From 0756bf12d10cf1b7f78c571de0a9ad69cbaeb7ca Mon Sep 17 00:00:00 2001
From: curtis <curtis@i-mps.com>
Date: 星期一, 30 三月 2026 14:24:17 +0800
Subject: [PATCH] fix: 更新內部引用方法參照
---
reassemble/view/scrollView.pas | 314 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 314 insertions(+), 0 deletions(-)
diff --git a/reassemble/view/scrollView.pas b/reassemble/view/scrollView.pas
new file mode 100644
index 0000000..02e2b9a
--- /dev/null
+++ b/reassemble/view/scrollView.pas
@@ -0,0 +1,314 @@
+{ ==============================================================================
+ 方法名稱:ISB1Click
+ 引用相依:
+ 方法描述:影像滾輪盒(ISB)的點擊處理。更新當前顯示的 ISB 對象,調整 Shape1 標記框
+ 的位置以框選當前 ISB。根據 ISB 名稱與捲軸位置計算並更新 PageLV 清單中
+ 的選取狀態(NowPage 與 ItemIndex)。
+============================================================================== }
+procedure TCB_IMGPSScanX.ISB1Click(Sender: TObject);
+var
+ p : Integer;
+begin
+ DisplayISB := TImageScrollBox(Sender);
+ Shape1.Left := TPanel(TImageScrollBox(Sender).Parent).Left - Seg;
+ Shape1.Top := TPanel(TImageScrollBox(Sender).Parent).Top - Seg;
+ P := strtoint(copy(DisplayISB.Name,4,1)) + ScrollBar1.Position-2;
+ if P <= PageLV.Items.Count-1 then
+ begin
+ if PageLVclear then
+ begin
+ PageLV.ClearSelection;
+ end;
+ NowPage := p+1;
+ PageLV.ItemIndex := P;
+ end;
+ //DisplayISB.SetFocus;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:ISB1EndScroll
+ 引用相依:
+ 方法描述:當影像滾輪盒停止捲動時觸發。呼叫 SetScrollData 將當前的水平/垂直捲軸
+ 位置與縮放百分比存回緩存中,以維持影像顯示的一致性。
+============================================================================== }
+procedure TCB_IMGPSScanX.ISB1EndScroll(Sender: TObject);
+var
+ ISB : TImageScrollBox;
+begin
+ ISB := TImageScrollBox(Sender);
+
+ SetScrollData(ISB,ISB.HorzScrollBar.Position,ISB.VertScrollBar.Position,ISB.ZoomPercent);
+ {if (TImageScrollBox(Sender) = MpsViewX1) and SortMode then
+ begin
+ ReczoomPercent := MpsViewX1.ZoomPercent;
+ RecHozPos := MpsViewX1.HorzScrollBarPos;
+ RecVerPos := MpsViewX1.VertScrollBarPos;
+ end;}
+end;
+
+
+{ ==============================================================================
+ 方法名稱:ISB1Enter
+ 引用相依:
+ 方法描述:當滑鼠進入影像滾輪盒區域時,強制將焦點設為 ISB1。
+============================================================================== }
+procedure TCB_IMGPSScanX.ISB1Enter(Sender: TObject);
+begin
+ ISB1.SetFocus;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:ISB1ImageMouseDown
+ 引用相依:LoadFromFile
+ 方法描述:影像滑鼠按下事件。設定當前 DisplayISB 並視情況取得焦點,更新 Shape1 的
+ 選取框位置。同步更新 PageLV 的選取頁面。若處於特定模式(NowClick = -1)
+ 且按下左鍵,則啟動影像的拖曳操作(BeginDrag)。此外也會處理旋轉模式下的
+ 影像載入。
+============================================================================== }
+procedure TCB_IMGPSScanX.ISB1ImageMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+var
+ p : Integer;
+begin
+ DisplayISB := TImageScrollBox(Sender);
+ if NowClick<>0 then
+ DisplayISB.SetFocus;
+ Shape1.Left := TPanel(TImageScrollBox(Sender).Parent).Left - Seg;
+ Shape1.Top := TPanel(TImageScrollBox(Sender).Parent).Top - Seg;
+ P := strtoint(copy(DisplayISB.Name,4,1)) + ScrollBar1.Position-2;
+ if P <= PageLV.Items.Count-1 then
+ begin
+ NowPage := p+1;
+ PageLV.ClearSelection;
+ PageLV.ItemIndex := P;
+
+ //PageLV.Selected := PageLV.Items.Item[PageLV.ItemIndex];
+
+ end;
+ if (NowClick = -1) and (Button=TMouseButton(mbLeft)) and (DisplayISB.FileName <> '') then
+ begin
+ {for P := 1 to 8 do
+ begin
+ TImageScrollBox(FindComponent('ISB'+inttostr(p))).Enabled := False;
+ end; }
+ DisplayISB.BeginDrag(True);
+ end;
+ case TImageScrollBox(Sender).MouseMode of
+ mmR90,mmR180,mmR270:
+ begin
+ TImageScrollBox(Sender).LoadFromFile(TImageScrollBox(Sender).FileName,1);
+ end;
+ end;
+
+end;
+
+
+{ ==============================================================================
+ 方法名稱:ISB1ImageMouseMove
+ 引用相依:
+ 方法描述:影像滑鼠移動事件。根據當前是否有載入影像檔案,動態切換滑鼠模式(MouseMo
+ de)。若無檔案則設為使用者模式(mmUser),否則根據 NowClick 狀態呼叫 View
+ MouseMode 切換至對應的檢視模式。
+============================================================================== }
+procedure TCB_IMGPSScanX.ISB1ImageMouseMove(Sender: TObject; Shift: TShiftState;
+ X, Y: Integer);
+begin
+ //Edit1.SetFocus;
+ //TImageScrollBox(Sender).SetFocus;
+
+ if TImageScrollBox(Sender).FileName = '' then
+ TImageScrollBox(Sender).MouseMode := mmUser
+ Else
+ ViewMouseMode(NowClick);
+
+ ISB1.AlwaysShowAnnotations := False;
+
+// if TImageScrollBox(Sender).FileName = '' then
+// begin
+////ShowMessage('AAA');
+//Label3.Caption:='FileName='+TImageScrollBox(Sender).FileName+' time='+FormatDateTime('yyyy/mm/dd HH:MM:SS', now);
+// TImageScrollBox(Sender).MouseMode := mmUser
+// end
+// Else
+// begin
+//Label3.Caption:='FileName='+TImageScrollBox(Sender).FileName;
+// ViewMouseMode(NowClick);
+// end;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:ISB1ImageMouseUp
+ 引用相依:SaveQuality, SaveToFile, TJpegGraphic
+ 方法描述:影像滑鼠放開事件。處理多種滑鼠模式:在 mmDelete 模式下觸發刪除功能;在
+ 旋轉模式(mmR90等)下儲存旋轉後的影像檔案,並同步更新預覽圖(SelectISB)
+ 與清空檢核記錄。最後針對縮放或拖曳模式更新捲軸位置數據。
+============================================================================== }
+procedure TCB_IMGPSScanX.ISB1ImageMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+Var
+ p : Integer;
+ ISB : TImageScrollBox;
+begin
+ case TImageScrollBox(Sender).MouseMode of
+ mmDelete:
+ begin
+ PM508Click(Self);
+ end;
+ mmR90,mmR180,mmR270:
+ begin
+ if TImageScrollBox(Sender).Graphic.ImageFormat <> ifBlackWhite then
+ begin
+ TJpegGraphic(TImageScrollBox(Sender).Graphic).SaveQuality := 30;
+ TJpegGraphic(TImageScrollBox(Sender).Graphic).SaveToFile(TImageScrollBox(Sender).FileName);
+ end
+ Else
+ TImageScrollBox(Sender).SaveToFile(TImageScrollBox(Sender).FileName);
+
+ SelectISB.Graphic.Assign(TImageScrollBox(Sender).Graphic);
+ SelectISB.Redraw(True);
+ FitPreViewISB;
+ ISBClick(SelectISB);
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+ end;
+ end;
+
+ ISB := TImageScrollBox(Sender);
+ if (ISB.MouseMode = mmZoom) or (ISB.MouseMode = mmDrag) then
+ SetScrollData(ISB,ISB.HorzScrollBar.Position,ISB.VertScrollBar.Position,ISB.ZoomPercent);
+
+end;
+
+
+{ ==============================================================================
+ 方法名稱:ScrollBox1MouseEnter
+ 引用相依:
+ 方法描述:當滑鼠進入捲軸區域時,自動將焦點設定至 ScrollBox1。
+============================================================================== }
+procedure TCB_IMGPSScanX.ScrollBox1MouseEnter(Sender: TObject);
+begin
+ScrollBox1.SetFocus;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:FindISB2View
+ 引用相依:
+ 方法描述:根據檢視模式,在畫面中尋找下一個可顯示影像的 TImageScrollBox。遍歷 ISB
+ 1-ISB8,檢查 FileName 是否為空;若已滿則會清空特定位置影像並重新開始,
+ 確保影像載入有對應視窗。
+============================================================================== }
+Function TCB_IMGPSScanX.FindISB2View(Vmode:Integer):TImageScrollBox; //找空的ISB來顯示
+var
+ i,n : Integer;
+ ISB : TImageScrollBox;
+begin
+ case Vmode of
+ 0 : n := 1;
+ 1 : n := 2;
+ 2 : n := 4;
+ 3 : n := 6;
+ 4 : n := 8;
+ end;
+ for i := 1 to 8 do
+ begin
+ if i > n then Break;
+ ISB := TImageScrollBox(FindComponent('ISB'+inttostr(i)));
+ if (i = n) and (ISB.FileName <> '') then
+ begin
+ clearView(i);
+ Result := ISB1;
+ end
+ Else if ISB.FileName = '' then
+ Result := ISB;
+ end;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:ImageScrollBox1NewGraphic
+ 引用相依:ConvertToBW, TDibGraphic
+ 方法描述:當載入新影像時觸發。將當前 Graphic 內容同步至黑白影像處理元件(ISB_BW)
+ ,若原始影像非黑白格式則執行 ConvertToBW 轉換。
+============================================================================== }
+procedure TCB_IMGPSScanX.ImageScrollBox1NewGraphic(const Graphic: TDibGraphic);
+begin
+ IF ImageScrollBox1.Graphic.Empty Then Exit;
+ ISB_BW.Graphic.Assign(ImageScrollBox1.Graphic);
+ If ImageScrollBox1.Graphic.ImageFormat <> ifBlackWhite Then
+ begin
+ ConvertToBW(ISB_BW.Graphic);
+ end;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:GetScrollData
+ 引用相依:
+ 方法描述:根據傳入的影像捲軸盒(ISB)名稱,從 ScrollRec 陣列中提取其儲存的水平、垂
+ 直捲軸位置及縮放比例。
+============================================================================== }
+Procedure TCB_IMGPSScanX.GetScrollData(ISB:TImageScrollBox;Var HS,VS:Integer;Var iRate:Single);
+var
+ index : Integer;
+begin
+ index := strtoint(copy(ISB.Name,4,1));
+ HS := ScrollRec[Index].HScroll;
+ VS := ScrollRec[Index].VScroll;
+ iRate := ScrollRec[Index].Rate;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:SetScrollData
+ 引用相依:
+ 方法描述:將指定的水平、垂直捲軸位置與縮放比例存入對應影像視窗索引的 ScrollRec
+ 記錄中。
+============================================================================== }
+Procedure TCB_IMGPSScanX.SetScrollData(ISB:TImageScrollBox;HS,VS:Integer;iRate:Single);
+var
+ index : Integer;
+begin
+ index := strtoint(copy(ISB.Name,4,1));
+ ScrollRec[Index].HScroll := HS;
+ ScrollRec[Index].VScroll := VS;
+ ScrollRec[Index].Rate := iRate;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:FindMpsView
+ 引用相依:
+ 方法描述:根據當前的檢視模式(Vmode),在 8 個影像視窗中尋找適合載入下一個影像的
+ 視窗組件。函式會根據 1x1 到 4x2 的佈局決定搜尋上限,優先回傳檔名為空的
+ 視窗;若視窗已滿,則清空指定位置的顯示並回傳主視窗 ISB1。
+============================================================================== }
+Function TCB_IMGPSScanX.FindMpsView(Vmode: Integer):TImageScrollBox;
+var
+ i,n : Integer;
+ ISB : TImageScrollBox;
+begin
+ case Vmode of
+ 0 : n := 1;
+ 1 : n := 2;
+ 2 : n := 4;
+ 3 : n := 6;
+ 4 : n := 8;
+ end;
+ for i := 1 to 8 do
+ begin
+ if i > n then Break;
+ ISB := TImageScrollBox(FindComponent('ISB'+inttostr(i)));
+ if (i = n) and (ISB.FileName <> '') then
+ begin
+ clearView(i);
+ Result := ISB1;
+ end
+ Else if ISB.FileName = '' then
+ Result := ISB;
+ end;
+end;
+
+
--
Gitblit v1.8.0