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/toolBar.pas | 1105 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 1,105 insertions(+), 0 deletions(-)
diff --git a/reassemble/view/toolBar.pas b/reassemble/view/toolBar.pas
new file mode 100644
index 0000000..63e2f56
--- /dev/null
+++ b/reassemble/view/toolBar.pas
@@ -0,0 +1,1105 @@
+{ ==============================================================================
+ 方法名稱:WNoteBtnClick
+ 引用相依:FileExists, LoadFromFile, SaveToFile
+ 方法描述:開啟備註編輯視窗。首先初始化多國語言並從 MEMO_INF_List 載入註記範本資
+ 訊。若存在 Scan_Memo.dat,則讀取既有的註記內容。顯示 TSortMemoForm 供使
+ 用者編輯,確認後將編輯結果存回 Scan_Memo.dat。最後視需要觸發 CaseHelpB
+ tnClick 以更新狀態。
+============================================================================== }
+procedure TCB_IMGPSScanX.WNoteBtnClick(Sender: TObject);
+var
+ i,n,v,v1:Integer;
+ SortMemoForm : TSortMemoForm;
+ M_Content,M_ID,M_Name : String;
+ S : TStringlist;
+begin
+ ShowText := _Msg('備註輸入中,請稍候');
+ DataLoading(True,True);
+ SortMemoForm := TSortMemoForm.Create(Self);
+ S := TStringlist.Create;
+ try
+ InitialLanguage(SortMemoForm); //載入多國語言
+
+ SortMemoForm.ContentList := TStringlist.Create; //註記內容
+ SortMemoForm.MemoIDList := TStringlist.Create; //註記代號
+ SortMemoForm.MemoNameList := TStringlist.Create; //註記名稱
+
+ for i := 1 to MEMO_INF_List.Count - 1 do
+ begin
+ M_Content := GetSQLData(MEMO_INF_List,'T1.MEMO_CONTENT',i);
+ M_ID := GetSQLData(MEMO_INF_List,'T1.MEMO_TYPE',i);
+ M_Name := GetSQLData(MEMO_INF_List,'T2.MEMO_TYPE_NAME',i);
+ SortMemoForm.ComboBox1.Items.Add(M_Name+'-->'+M_Content);
+ SortMemoForm.ContentList.Add(M_Content); //註記內容
+ SortMemoForm.MemoIDList.Add(M_ID); //註記代號
+ SortMemoForm.MemoNameList.Add(M_Name); //註記名稱
+ end;
+ if FileExists(DisplayPath+'Scan_Memo.dat') then
+ begin
+ S.LoadFromFile(DisplayPath+'Scan_Memo.dat');
+ for I := 0 to S.Count - 1 do
+ begin
+ v := Pos(',',S.Strings[i]);
+ v1 := length(S.Strings[i]);
+ M_ID := copy(S.Strings[i],1,v-1);
+ M_Name := MemoInfoTransfer('ID',M_ID,SortMemoForm.MemoIDList,SortMemoForm.MemoNameList);
+ M_Content := copy(S.Strings[i],v+1,v1-v);
+ SortMemoForm.ResoureMemo.Add(M_Name+'-->'+M_Content);
+ With SortMemoForm.MemoLV.Items.Add do
+ begin
+ Caption := M_Content;
+ SubItems.Add(M_Name);
+ end;
+ end;
+ end;
+
+ if SortMemoForm.ShowModal = mrOk then
+ begin
+ S.Clear;
+ for I := 0 to SortMemoForm.MemoLV.Items.Count - 1 do
+ begin
+ M_Content := SortMemoForm.MemoLV.Items.Item[i].Caption;
+ M_Name := SortMemoForm.MemoLV.Items.Item[i].SubItems.Strings[0];
+ M_ID := MemoInfoTransfer('NAME',M_Name,SortMemoForm.MemoIDList,SortMemoForm.MemoNameList);
+ S.Add(M_ID+','+M_Content);
+ end;
+ S.SaveToFile(DisplayPath+'Scan_Memo.dat');
+ end;
+ SortMemoForm.ContentList.Free; //註記內容
+ SortMemoForm.MemoIDList.Free; //註記代號
+ SortMemoForm.MemoNameList.Free; //註記名稱
+ finally
+ SortMemoForm.Free;
+ S.Free;
+ DataLoading(False,False);
+ if Ch_WriteNote then
+ begin
+ Ch_WriteNote := False;
+ CaseHelpBtnClick(self);
+ ErrIndex := 0;
+ end;
+ end;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:FC0Click
+ 引用相依:
+ 方法描述:工具列功能按鈕 0 的點擊處理。若重複點擊則關閉影像顯示(DesableImage),
+ 否則啟用索引為 0 的影像顯示(EnableImage)並更新 NowClick 狀態。
+============================================================================== }
+procedure TCB_IMGPSScanX.FC0Click(Sender: TObject);
+begin
+ IF NowClick = 0 Then
+ begin
+ DesableImage;
+ Exit;
+ end;
+ EnableImage(0 ,Sender);
+ NowClick := 0;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:FC1Click
+ 引用相依:
+ 方法描述:工具列功能按鈕 1 的點擊處理。若重複點擊則關閉影像顯示,否則啟用索引為
+ 1 的影像顯示並更新 NowClick 狀態。
+============================================================================== }
+procedure TCB_IMGPSScanX.FC1Click(Sender: TObject);
+begin
+ IF NowClick = 1 Then
+ begin
+ DesableImage;
+ Exit;
+ end;
+ EnableImage(1 ,Sender);
+ NowClick := 1;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:FC2Click
+ 引用相依:
+ 方法描述:工具列功能按鈕 2 的點擊處理。若重複點擊則關閉影像顯示,否則啟用索引為
+ 2 的影像顯示並更新 NowClick 狀態。
+============================================================================== }
+procedure TCB_IMGPSScanX.FC2Click(Sender: TObject);
+begin
+ IF NowClick = 2 Then
+ begin
+ DesableImage;
+ Exit;
+ end;
+ EnableImage(2,Sender);
+ NowClick := 2;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:FC3Click
+ 引用相依:
+ 方法描述:工具列功能按鈕 3 的點擊處理。若重複點擊則關閉影像顯示,否則啟用索引為
+ 3 的影像顯示並更新 NowClick 狀態。
+============================================================================== }
+procedure TCB_IMGPSScanX.FC3Click(Sender: TObject);
+begin
+ IF NowClick = 3 Then
+ begin
+ DesableImage;
+ Exit;
+ end;
+ EnableImage(3 ,Sender);
+ NowClick := 3;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:FC4Click
+ 引用相依:
+ 方法描述:工具列功能按鈕 4 的點擊處理。若重複點擊則關閉影像顯示,否則啟用索引為
+ 4 的影像顯示並更新 NowClick 狀態。
+============================================================================== }
+procedure TCB_IMGPSScanX.FC4Click(Sender: TObject);
+begin
+ IF NowClick = 4 Then
+ begin
+ DesableImage;
+ Exit;
+ end;
+ EnableImage(4 ,Sender);
+ NowClick := 4;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:FC5Click
+ 引用相依:
+ 方法描述:工具列功能按鈕 5 的點擊處理。若重複點擊則關閉影像顯示,否則啟用索引為
+ 5 的影像顯示並更新 NowClick 狀態。
+============================================================================== }
+procedure TCB_IMGPSScanX.FC5Click(Sender: TObject);
+begin
+ IF NowClick = 5 Then
+ begin
+ DesableImage;
+ Exit;
+ end;
+ EnableImage(5 ,Sender);
+ NowClick := 5;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:FC6Click
+ 引用相依:
+ 方法描述:工具列功能按鈕 6 的點擊處理。目前的實作已註解掉原有的影像啟用邏輯,改
+ 為直接呼叫 PM605Click(nil),即觸發右鍵選單中的刪除影像功能。
+============================================================================== }
+procedure TCB_IMGPSScanX.FC6Click(Sender: TObject);
+begin
+ {IF NowClick = 6 Then
+ begin
+ DesableImage;
+ Exit;
+ end;
+ EnableImage(6 ,Sender);
+ NowClick := 6;}
+ PM605Click(nil);
+end;
+
+
+{ ==============================================================================
+ 方法名稱:NewScanBtnClick
+ 引用相依:StatrTwainScan
+ 方法描述:點擊「新案掃瞄」按鈕的處理。首先檢查初始化狀態。針對重掃(RSCAN)、異動(ESC
+ AN)或重掃指定件(DSCAN),會自動選取新件節點並觸發追加掃瞄。若是全新掃瞄
+ ,則重設掃瞄模式與路徑,清空清單,最後呼叫 StatrTwainScan 啟動掃瞄程序,
+ 並在結束後重新載入影像檔案。
+============================================================================== }
+procedure TCB_IMGPSScanX.NewScanBtnClick(Sender: TObject);
+begin
+ IF not InitialOk Then
+ begin
+ Showmessage(_msg('資訊尚未下載完成,請稍候或重新進入'));
+ Exit;
+ end;
+LogFile1.LogToFile(logTimeString+'掃瞄開始');
+ if (FMode = 'RSCAN') or (FMode = 'ESCAN') or (FMode = 'DSCAN') then
+ begin
+ if NewTreeNode.Count > 0 then
+ begin
+ TreeView1.Selected := NewTreeNode.Item[0];
+ TreeView1click(nil);
+ FirstDocDir := '';
+ NowGuideFormID := '';
+ NowDivPageFormID :='';
+ AddScanBtnclick(nil);
+ end;
+ end
+ Else
+ begin
+ TreeView1.Selected := NewTreeNode;
+ NewTreeNode.Expand(False);
+ TreeView1Click(self);
+ Panel1.Enabled := False;
+ Panel2.Enabled := False;
+ ScanMode := smNew;
+ ScanInfo.ImageCount := 0;
+ ScanPath := '';
+ ScanCaseno := '';
+ NowGuideFormID := '';
+ NowDivPageFormID :='';
+ ClearView(1);
+ ContextList.Clear;
+ Try
+ StatrTwainScan;
+LogFile1.LogToFile(logTimeString+'掃瞄結束');
+ Except
+ Panel1.Enabled := True;
+ Panel2.Enabled := True;
+ end;
+ Panel1.Enabled := True;
+ Panel2.Enabled := True;
+ LoadImgFile;
+ end;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:NextPageBtnClick
+ 引用相依:
+ 方法描述:處理「下一頁」按鈕點擊。若有選取影像,則呼叫 NextPage 跳轉至下一頁,並判
+ 斷選取影像的位置是否超出目前滾輪區域的高度,若是則自動調整 ScrollBox1
+ 的垂直捲軸位置,以確保新頁面影像能正確顯示在視線範圍內。
+============================================================================== }
+procedure TCB_IMGPSScanX.NextPageBtnClick(Sender: TObject);
+var
+ page : Integer;
+begin
+ {page := ScrollBar1.Position;
+ Case Vmode of
+ 0 : Inc(page);
+ 1 : Page := Page + 2;
+ 2 : Page := Page + 4;
+ 3 : Page := Page + 6;
+ 4 : Page := Page + 8;
+ end;
+ IF page <= ScrollBar1.Max Then
+ begin
+ ScrollBar1.Position := page;
+ end;}
+ if selectISB = nil then Exit;
+ NextPage(SelectPage);
+ if SelectISB.Parent.Top+SelectISB.Parent.Height+4 > scrollBox1.Height then
+ ScrollBox1.VertScrollBar.Position := scrollBox1.VertScrollBar.Position + (SelectISB.Parent.Top+SelectISB.Parent.Height-ScrollBox1.Height+8);
+
+end;
+
+
+{ ==============================================================================
+ 方法名稱:OptionBtnClick
+ 引用相依:Scanner
+ 方法描述:處理「掃瞄參數設定」按鈕點擊。首先確認系統初始化是否完成,接著建立 TPatc
+ hDlg 對話框並載入多國語言。將目前的掃瞄設定(如自動刪除空白頁、DPI、單/
+ 雙面、反白、去邊、去偏斜、亮度、對比、旋轉角度及顯示模式等)同步至對話框。使
+ 用者完成設定後,將新參數存回系統變數,並呼叫 R_W_ScanIni 將設定寫入設
+ 定檔。
+============================================================================== }
+procedure TCB_IMGPSScanX.OptionBtnClick(Sender: TObject);
+var
+ PatchDlg : TPatchDlg;
+ i : Integer;
+begin
+ IF not InitialOk Then
+ begin
+ Showmessage(_msg('資訊尚未下載完成,請稍候或重新進入'));
+ Exit;
+ end;
+ ShowText := _Msg('掃瞄參數設定中,請稍候');
+ DataLoading(True,True);
+
+ PatchDlg := TPatchDlg.Create(self);
+ try
+ InitialLanguage(PatchDlg); //載入多國語言
+ PatchDlg.BlankuseCB.Checked := DeviceDelete;
+ if PatchDlg.BlankuseCB.Checked then
+ PatchDlg.SpinEdit5.Enabled := True
+ else
+ PatchDlg.SpinEdit5.Enabled := False;
+ PatchDlg.SpinEdit5.Value := DeviceDeleteSize;
+ For i := 0 to PatchDlg.ComboBox1.Items.Count -1 do
+ begin
+ If inttostr(ScanDpi) = PatchDlg.ComboBox1.Items.Strings[i] Then
+ PatchDlg.ComboBox1.ItemIndex := i;
+ end;
+ PatchDlg.DuplexCB.Checked := ScanDuplex;
+ PatchDlg.ReverseCB.Checked := ScannerReverse;
+ PatchDlg.BorderCB.Checked := BoardClear;
+ PatchDlg.DeskewCB.Checked := ScanDeskew;
+ PatchDlg.ImgSetUseCB.Checked := ScanImgSetUse;
+ PatchDlg.SpinEdit1.Value := ScanBright;
+ PatchDlg.SpinEdit2.Value := ScanContrast;
+ case ScanRotate of
+ 0 : PatchDlg.ScanRotateRG.ItemIndex := 0;
+ 270 : PatchDlg.ScanRotateRG.ItemIndex := 1;
+ 180 : PatchDlg.ScanRotateRG.ItemIndex := 2;
+ 90 : PatchDlg.ScanRotateRG.ItemIndex := 3;
+ end;
+ Case ScanImgShowMode of
+ 0 : PatchDlg.ScanShowRG.ItemIndex := 0;
+ 1 : PatchDlg.ScanShowRG.ItemIndex := 1;
+ 2 : PatchDlg.ScanShowRG.ItemIndex := 2;
+ end;
+ If PatchDlg.ShowModal = mrOk then
+ begin
+ DeviceDelete := PatchDlg.BlankuseCB.Checked;
+ DeviceDeleteSize := PatchDlg.SpinEdit5.Value;
+ ScanDpi := Strtoint(PatchDlg.ComboBox1.Text);
+ ScannerReverse := PatchDlg.ReverseCB.Checked;
+ BoardClear := PatchDlg.BorderCB.Checked;
+ ScanDeskew := PatchDlg.DeskewCB.Checked;
+ ScanDuplex := PatchDlg.DuplexCB.Checked;
+ ScanImgSetUse := PatchDlg.ImgSetUseCB.Checked;
+ ScanBright := PatchDlg.SpinEdit1.Value;
+ ScanContrast := PatchDlg.SpinEdit2.Value;
+ Case PatchDlg.ScanRotateRG.ItemIndex of
+ 0:ScanRotate := 0;
+ 1:ScanRotate := 270;
+ 2:ScanRotate := 180;
+ 3:ScanRotate := 90;
+ end;
+ Case PatchDlg.ScanShowRG.ItemIndex of
+ 0:ScanImgShowMode := 0;
+ 1:ScanImgShowMode := 1;
+ 2:ScanImgShowMode := 2;
+ end;
+ R_W_ScanIni('W');
+ ScanDuplexCB.Checked := ScanDuplex;
+ end;
+ finally
+ PatchDlg.Free;
+ DataLoading(False,False);
+ end;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:PrePageBtnClick
+ 引用相依:
+ 方法描述:處理「上一頁」按鈕點擊。跳轉至前一頁並判斷影像位置,若向上超出捲軸區域則
+ 自動滾動垂直捲軸,將影像帶入可見區域。
+============================================================================== }
+procedure TCB_IMGPSScanX.PrePageBtnClick(Sender: TObject);
+var
+ page : Integer;
+begin
+ {page := ScrollBar1.Position;
+ Case Vmode of
+ 0 : dec(page);
+ 1 : Page := Page - 2;
+ 2 : Page := Page - 4;
+ 3 : Page := Page - 6;
+ 4 : Page := Page - 8;
+ end;
+ IF page >= ScrollBar1.min Then
+ begin
+ ScrollBar1.Position := page;
+ end
+ Else
+ ScrollBar1.Position := 1; }
+ if selectISB = nil then Exit;
+ PriorPage(SelectPage);
+ if (SelectISB.Parent.Top-4) < 0 then
+ scrollBox1.VertScrollBar.Position := scrollBox1.VertScrollBar.Position + SelectISB.Parent.Top-4;
+
+ //ISBClick(TImageScrollBox(FindComponent(ISBName+'1')));
+
+
+end;
+
+
+{ ==============================================================================
+ 方法名稱:SampleScanBtnClick
+ 引用相依:BWTif2Jpg, FileExists, LoadFromFile, SaveToFile, StatrTwainScan, upF
+ ile
+ 方法描述:處理「範本掃瞄」按鈕點擊。切換為範本模式並引導使用者輸入 FormID,掃瞄後
+ 產生 TIF 與 JPG 影像。隨後透過 HTTPS 將範本上傳至伺服器,上傳過程中會
+ 嚴格檢查網路狀態、Session 有效性與伺服器回傳結果。
+============================================================================== }
+procedure TCB_IMGPSScanX.SampleScanBtnClick(Sender: TObject);
+var
+ SampleFormID : String;
+ SendData : String;
+ buttonSelected : Integer;
+begin
+ ScanMode := smSample;
+ ClearView(1);
+ Vmode := 0; //切成單頁
+ GoViewMode;
+ ScanInfo.ImageCount := 0;
+ ScanPath := SamplePath;
+ ScanCaseno := '';
+ ContextList.Clear;
+ ShowText := _Msg('範本掃描中,請稍候');
+ DataLoading(True,True);
+ SampleFormID := UpperCase(InputBox(_Msg('範本檔掃瞄輸入畫面'),_Msg('請輸入文件編號'),''));
+
+ if SampleFormIDList.IndexOf(SampleFormID)<>-1 then
+ begin
+ // Show a custom dialog
+ buttonSelected := messagedlg(SampleFormID+_Msg('已有範本,是否取代?'),mtCustom,
+ [mbYes,mbCancel], 0);
+ if buttonSelected = mrCancel then
+ begin
+ DataLoading(false,false);
+ Exit;
+ end;
+ end;
+
+ if SampleFormID <> '' then
+ begin
+ if FormIDExists(SampleFormID,False,0) then
+ begin
+ ScanSaveFilename := SampleFormID + '.tif';
+ end
+ Else
+ begin
+ Showmessage(Format(_Msg('FormID:%s尚未註冊'),[SampleFormID]));
+ Panel1.Enabled := True;
+ Panel2.Enabled := True;
+ DataLoading(false,false);
+ Exit;
+ end;
+ SampleAnchorMode := FormID2Anchor(SampleFormID);
+
+ Panel1.Enabled := False;
+ Panel2.Enabled := False;
+//ShowMessage('AAAAA');
+ Try
+ StatrTwainScan;
+ Except
+ Panel1.Enabled := True;
+ Panel2.Enabled := True;
+ end;
+
+ if (ISB1.FileName <> '') and FileExists(SamplePath+SampleFormID+'.tif') then
+ begin
+ ShowText := _Msg('範本傳送中,請稍候');
+ DataLoading(True,True);
+ //多存一份jpg
+ ImageScrollBox1.LoadFromFile(SamplePath+SampleFormID+'.tif',1);
+ BWTif2Jpg(ImageScrollBox1.Graphic);
+ ImageScrollBox1.SaveToFile(SamplePath+SampleFormID+'.jpg');
+ //多存一份jpg
+
+ NowWork_No := FormCode2WorkNo(SampleFormID);
+ SendData := 'data='+FData+'&verify='+FVerify+'&work_no='+FWork_no+'&file_name='+SampleFormID+'.tif';
+ if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/sample',SendData,'file',SamplePath+SampleFormID+'.tif',FReWrite,Memo1,False) then
+ begin
+ Showmessage(_Msg('傳送範本檔案時,網路發生錯誤!!')+_MSg('錯誤代碼:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason+')');
+ DataLoading(False,False);
+ Exit;
+ end;
+ if memo1.Lines.Strings[0] = '1' then
+ begin
+ Showmessage(_Msg('傳送範本檔案時,網路發生錯誤!!')+_Msg('錯誤原因:')+memo1.Lines.Strings[1]);
+ DataLoading(False,False);
+ Exit;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ Showmessage(_Msg('傳送範本檔案時,網路發生錯誤!!')+_Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入'));
+ DataLoading(False,False);
+ Exit;
+ end;
+
+ if FileExists(SamplePath+SampleFormID+'.jpg') then //傳送JPG影像
+ begin
+ SendData := 'data='+FData+'&verify='+FVerify+'&work_no='+FWork_no+'&file_name='+SampleFormID+'.jpg';
+ if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/sample',SendData,'file',SamplePath+SampleFormID+'.jpg',FReWrite,Memo1,False) then
+ begin
+ Showmessage(_Msg('傳送範本檔案(JPG)時,網路發生錯誤!!')+_MSg('錯誤代碼:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason+')');
+ DataLoading(False,False);
+ Exit;
+ end;
+ if memo1.Lines.Strings[0] = '1' then
+ begin
+ Showmessage(_Msg('傳送範本檔案(JPG)時,網路發生錯誤!!')+_Msg('錯誤原因:')+memo1.Lines.Strings[1]);
+ DataLoading(False,False);
+ Exit;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ Showmessage(_Msg('傳送範本檔案(JPG)時,網路發生錯誤!!')+_Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入'));
+ DataLoading(False,False);
+ Exit;
+ end;
+ end;
+ Showmessage(_Msg('傳送完成'));
+ end;
+ end;
+ DataLoading(False,False);
+
+end;
+
+
+{ ==============================================================================
+ 方法名稱:SelectScanBtnClick
+ 引用相依:Scanner, SelectScanner, scanner.SelectScanner
+ 方法描述:開啟系統掃瞄器選擇視窗。
+============================================================================== }
+procedure TCB_IMGPSScanX.SelectScanBtnClick(Sender: TObject);
+begin
+ Panel1.Enabled := False;
+ Panel2.Enabled := False;
+ scanner.SelectScanner;
+ Panel1.Enabled := True;
+ Panel2.Enabled := True;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:AddScanBtnClick
+ 引用相依:StatrTwainScan
+ 方法描述:處理「追加掃瞄」按鈕點擊。檢查狀態後設定掃瞄模式為 smInsert(插入模式),
+ 初始化掃瞄參數並啟動 StatrTwainScan。完成後重新繪製樹狀結構、更新筆數
+ 統計並清空檢核記錄,最後自動選取新文件節點。
+============================================================================== }
+procedure TCB_IMGPSScanX.AddScanBtnClick(Sender: TObject);
+var
+ P,v : Integer;
+begin
+ IF not InitialOk Then
+ begin
+ Showmessage(_Msg('資訊尚未下載完成,請稍候或重新進入'));
+ Exit;
+ end;
+ if MyTreeNode1 = nil then
+ begin
+ Showmessage(_Msg('請先選擇案件'));
+ Exit;
+ end;
+ Panel1.Enabled := False;
+ Panel2.Enabled := False;
+ ScanMode := smInsert;
+ ScanInfo.ImageCount := ContextList.Count;
+ ScanPath := DisplayPath;
+ ScanCaseno := NowCaseno;
+ ScanDocDir := NowDocDir;
+ Try
+ StatrTwainScan;
+ Except
+ Panel1.Enabled := True;
+ Panel2.Enabled := True;
+ end;
+ Panel1.Enabled := True;
+ Panel2.Enabled := True;
+ DrawDocItem2(MytreeNode1,NowCaseno);
+ //DrawDocItem(MytreeNode1,FORM_INF_List,NowCaseno);
+ //P := ContextList.Count;
+ GetCase_PageCount(CaseCount,PageCount);
+ v := Pos('-',NewTreeNode.Text);
+ NewTreeNode.Text := Format(_Msg('%s-共%d筆共%d頁'),[Copy(NewTreeNode.Text,1,v-1),CaseCount,PageCount]);
+ MytreeNode1.Text := Format(_Msg('%s-%d頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseno)]);
+
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+ SetDocDirtoSelected(MyTreeNode1,FirstDocDir);
+ TreeView1Click(self);
+end;
+
+
+{ ==============================================================================
+ 方法名稱:CaseHelpBtnClick
+ 引用相依:
+ 方法描述:處理檢核失敗(補件/更正)按鈕點擊。開啟 TErrlistForm 顯示 OMR 檢核錯誤
+ 清單供使用者操作。若使用者完成更正並按確定,則會根據目前模式(ISCAN/NSC
+ AN 等)將更新後的影像資料上傳至伺服器,並在完成後重新載入影像、提示使用
+ 者。
+============================================================================== }
+procedure TCB_IMGPSScanX.CaseHelpBtnClick(Sender: TObject);
+var
+ ErrlistForm : TErrlistForm;
+ S : TStringlist;
+ UpFormID : String;
+ Anchor : String;
+begin
+ ShowText := _Msg('處理檢核失敗中,請稍候');
+ DataLoading(True,True);
+LogFile1.LogToFile(logTimeString+'處理檢核失敗中開始');
+ ErrlistForm := TErrlistForm.Create(Self);
+ RejectCase := False;
+ S := TStringlist.Create;
+ try
+ InitialLanguage(ErrlistForm);
+ Application.ProcessMessages;
+ ErrlistForm.LogFile1.LogFile:=LogFile1.LogFile;
+ ErrlistForm.DeleteBt.Caption := ErrlistForm.DeleteBt.Caption+'(&D)';
+ ErrlistForm.iniPath := ImageSavePath + NowCaseNo+'\upload\';
+ OMRErrini2List(NowCaseno,ErrlistForm);
+ ErrlistForm.ErrListLV.ItemIndex := ErrIndex;
+ ErrlistForm.Timer1.Enabled := true;
+ if ErrlistForm.ShowModal = mrok then
+ begin
+ TransPath := ImageSavePath+NowCaseNo+'\upload\';
+ if FMode = 'ISCAN' then
+ TransPath := ImageSavePath + NowCaseNo+'\DownTemp\';
+ ShowText := NowCaseNo+_Msg('資料上傳中,請稍候');
+ DataLoading(True,True);
+
+ if FMode = 'ISCAN' then
+ begin
+ If Not TransCaseID(TransPath,NowCaseNo,True) Then //傳送案件
+ begin
+ DataLoading(False,False);
+ Exit;
+ end;
+ end
+ Else
+ begin
+ If Not TransCaseID(TransPath,NowCaseNo,True) Then //傳送案件
+ begin
+ DataLoading(False,False);
+ Exit;
+ end;
+ end;
+ CaseHelpBtn.Visible := False;
+ LoadImgFile;
+ if (FMode='NSCAN') or (FMode='DSCAN') then
+ begin
+ Showmessage(NowCaseNo+_Msg('影像上傳完成。此案已進入下一流程。'));
+ end;
+
+ if FMode='ESCAN' then
+ begin
+ Showmessage(NowCaseNo+_Msg('影像已補件完成。'));
+ end;
+
+ DataLoading(False,False);
+ end
+ Else
+ begin
+ MyTreeNode2ReFresh(NowCaseNo);
+ end;
+ finally
+ ErrlistForm.Free;
+ DataLoading(False,False);
+ S.Free;
+ end;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:CheckCaseBtnClick
+ 引用相依:SaveToFile
+ 方法描述:執行所有案件的批次檢核。遍歷 NewTreeNode 下的所有案件,對尚未檢核通過(
+ ImageIndex 不為 7 或 5)的案件呼叫 OMRCheckCase 進行檢核。若檢核成功則
+ 建立 OMRCheckOk.dat 標記檔。最後刷新影像與樹狀顯示。
+============================================================================== }
+procedure TCB_IMGPSScanX.CheckCaseBtnClick(Sender: TObject);
+Var
+ CaseID : String;
+ i,n,v : Integer;
+ S : TStringlist;
+begin
+ //if TreeView1.Selected = nil then Exit;
+ //if TreeView1.Selected = NewTreeNode then Exit;
+ Displaypath := ''; //20130327 修正報價單號會錯置的問題
+ S := TStringlist.Create;
+ try
+ ClearView(1);
+ ShowText := CaseID+_Msg('檢核中,請稍候');
+ DataLoading(True,True);
+ For i := 0 to NewTreeNode.Count -1 do
+ begin
+ v := posend('-',NewTreenode.Item[i].Text);
+ CaseID := Copy(NewTreenode.Item[i].Text,1,v-1);
+ ShowText := CaseID+_Msg('檢核中,請稍候');
+ DataLoading(True,True);
+ if (NewTreenode.Item[i].ImageIndex <> 7) and (NewTreenode.Item[i].ImageIndex <> 5) then //檢核完成的不再檢核
+ begin
+ If OMRCheckCase(CaseID) then //有成功
+ begin
+ S.Add('Y');
+ S.SaveToFile(ImageSavePath+CaseID+'\OMRCheckOk.dat');
+ end;
+ end;
+ //MyTreeNode2ReFresh(CaseID); //原本是OMR單一案件,後改成OMR全部案件 所以這個要mark
+ end;
+ LoadImgFile;
+ TreeView1Click(nil);
+ DataLoading(False,False);
+ finally
+ S.Free;
+ end;
+ Showmessage(_Msg('檢核完成'));
+end;
+
+
+{ ==============================================================================
+ 方法名稱:SpeedButton14Click
+ 引用相依:LoadFromFile, Rotate, SaveQuality, SaveToFile, TJpegGraphic
+ 方法描述:處理工具列按鈕點擊,執行影像逆時針旋轉 90 度(即旋轉 270 度)。程序會重
+ 新載入影像、執行旋轉、根據影像格式(JPG 則設定品質為 30)儲存回原檔案,最
+ 後更新主顯示區與縮圖區,並重新調整縮圖佈局。
+============================================================================== }
+procedure TCB_IMGPSScanX.SpeedButton14Click(Sender: TObject);
+var
+ Count : Integer;
+begin
+ if not ISB1.Graphic.IsEmpty then
+ begin
+ ISB1.LoadFromFile(ISB1.FileName,1);
+ Rotate(ISB1.Graphic,270);
+ if ISB1.Graphic.ImageFormat <> ifBlackWhite then
+ begin
+ TJpegGraphic(ISB1.Graphic).SaveQuality := 30;
+ TJpegGraphic(ISB1.Graphic).SaveToFile(ISB1.FileName);
+ end
+ Else
+ ISB1.SaveToFile(ISB1.FileName);
+ ISB1.Redraw(True);
+ SelectISB.Graphic.Assign(ISB1.Graphic);
+ SelectISB.Redraw(True);
+ FitPreViewISB;
+ ISBClick(SelectISB);
+ end;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:SpeedButton15Click
+ 引用相依:LoadFromFile, Rotate, SaveQuality, SaveToFile, TJpegGraphic
+ 方法描述:處理工具列按鈕點擊,執行影像旋轉 180 度。程序重新載入檔案後執行旋轉操
+ 作,並依據格式存檔。完成後同步更新主畫面與預覽圖,確保顯示一致性。
+============================================================================== }
+procedure TCB_IMGPSScanX.SpeedButton15Click(Sender: TObject);
+begin
+ if not ISB1.Graphic.IsEmpty then
+ begin
+ ISB1.LoadFromFile(ISB1.FileName,1);
+ Rotate(ISB1.Graphic,180);
+ if ISB1.Graphic.ImageFormat <> ifBlackWhite then
+ begin
+ TJpegGraphic(ISB1.Graphic).SaveQuality := 30;
+ TJpegGraphic(ISB1.Graphic).SaveToFile(ISB1.FileName);
+ end
+ Else
+ ISB1.SaveToFile(ISB1.FileName);
+ ISB1.Redraw(True);
+ SelectISB.Graphic.Assign(ISB1.Graphic);
+ SelectISB.Redraw(True);
+ FitPreViewISB;
+ ISBClick(SelectISB);
+ end;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:SpeedButton16Click
+ 引用相依:LoadFromFile, Rotate, SaveQuality, SaveToFile, TJpegGraphic
+ 方法描述:處理工具列按鈕點擊,執行影像順時針旋轉 90 度。載入影像後執行旋轉並儲存
+ ,針對非黑白影像會設定 JPG 壓縮品質。最後重新繪製相關顯示元件並觸發點
+ 擊事件。
+============================================================================== }
+procedure TCB_IMGPSScanX.SpeedButton16Click(Sender: TObject);
+begin
+ if not ISB1.Graphic.IsEmpty then
+ begin
+ ISB1.LoadFromFile(ISB1.FileName,1);
+ Rotate(ISB1.Graphic,90);
+ if ISB1.Graphic.ImageFormat <> ifBlackWhite then
+ begin
+ TJpegGraphic(ISB1.Graphic).SaveQuality := 30;
+ TJpegGraphic(ISB1.Graphic).SaveToFile(ISB1.FileName);
+ end
+ Else
+ ISB1.SaveToFile(ISB1.FileName);
+ ISB1.Redraw(True);
+ SelectISB.Graphic.Assign(ISB1.Graphic);
+ SelectISB.Redraw(True);
+ FitPreViewISB;
+ ISBClick(SelectISB);
+ end;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:SpeedButton17Click
+ 引用相依:
+ 方法描述:將主影像顯示區的縮放模式設定為「符合高度」(zmFitHeight)。
+============================================================================== }
+procedure TCB_IMGPSScanX.SpeedButton17Click(Sender: TObject);
+begin
+ ISB1.ZoomMode := zmFitHeight;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:SpeedButton18Click
+ 引用相依:
+ 方法描述:將主影像顯示區的縮放模式設定為「符合寬度」(zmFitWidth)。
+============================================================================== }
+procedure TCB_IMGPSScanX.SpeedButton18Click(Sender: TObject);
+begin
+ ISB1.ZoomMode := zmFitWidth;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:SpeedButton19Click
+ 引用相依:
+ 方法描述:將主影像顯示區的縮放模式設定為「原始大小」(zmOriginalSize)。
+============================================================================== }
+procedure TCB_IMGPSScanX.SpeedButton19Click(Sender: TObject);
+begin
+ ISB1.ZoomMode := zmOriginalSize;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:SpeedButton20Click
+ 引用相依:
+ 方法描述:將主影像顯示區的縮放模式設定為「符合頁面」(zmFittoPage)。
+============================================================================== }
+procedure TCB_IMGPSScanX.SpeedButton20Click(Sender: TObject);
+begin
+ ISB1.ZoomMode := zmFittoPage;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:SpeedButton21Click
+ 引用相依:
+ 方法描述:將主影像顯示區的縮放模式設定為自定義百分比,並將比例設為 50%。
+============================================================================== }
+procedure TCB_IMGPSScanX.SpeedButton21Click(Sender: TObject);
+begin
+ ISB1.ZoomMode := zmPercent;
+ ISB1.ZoomPercent := 50;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:SpeedButton22Click
+ 引用相依:
+ 方法描述:將主影像顯示區的縮放模式設定為自定義百分比,並將比例設為 25%。
+============================================================================== }
+procedure TCB_IMGPSScanX.SpeedButton22Click(Sender: TObject);
+begin
+ ISB1.ZoomMode := zmPercent;
+ ISB1.ZoomPercent := 25;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:SpeedButton3Click
+ 引用相依:
+ 方法描述:將主影像顯示區的縮放模式設定為「全頁顯示」(zmFullPage)。
+============================================================================== }
+procedure TCB_IMGPSScanX.SpeedButton3Click(Sender: TObject);
+begin
+ ISB1.ZoomMode := zmFullPage;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:TransBtnClick
+ 引用相依:LoadFromFile
+ 方法描述:處理工具列「上傳」按鈕的點擊事件。執行完整的前置檢查(包含案件配號、歸類、
+ 收件時間限制等),接著遍歷所有案件執行 OMR 檢核與 ReSize,最後呼叫 Tran
+ sCaseID 將案件封裝傳送至伺服器。上傳結束後會顯示成功/失敗的統計報告。
+============================================================================== }
+procedure TCB_IMGPSScanX.TransBtnClick(Sender: TObject);
+Var
+ CaseID : String;
+ i,n,v: Integer;
+ ZipFileList : TStringlist;
+ CaseTrans : Integer; //-1:失敗 0:可 1:不行
+ SuccessCount,ReCasecount,CheckErrCount : Integer;
+ TransMsg : String;
+ AreaStr : String;
+ S : TStringlist;
+ CheckStr : String;
+ uploadMsg:String;//20171122 新增 配合不同mode下要秀不能上傳訊息
+begin
+ IF not InitialOk Then
+ begin
+ Showmessage(_msg('資訊尚未下載完成,請稍候或重新進入'));
+ Exit;
+ end;
+LogFile1.LogToFile(logTimeString+'按下上傳');
+ ClearView(1);
+ CaseHelpBtn.Visible := False;
+ DisplayPath := '';
+ ClearCaseIndex;
+ RejectCase := False;
+ uploadMsg:='';
+ if not CheckCaseID_OK then //檢查是否有未配號的案件
+ begin
+ Showmessage(_Msg('尚有「無案件編號」之案件,無法上傳'));
+ Exit;
+ end;
+
+ if not CheckCaseAttach_OK then //20170911檢查是否有未歸類的案件
+ begin
+ Showmessage(_Msg('尚有未歸類文件,無法上傳'));
+ Exit;
+ end;
+
+
+ if NewTreeNode.Count = 0 then
+ begin
+ Showmessage(_Msg('無影像需傳送'));
+ Exit;
+ end;
+
+ SuccessCount := 0;
+ ReCasecount := 0;
+ CheckErrCount := 0;
+ if (FMode = 'NSCAN') and (not CheckScanDenialTime) then
+ begin
+ if Messagedlg(Format(_Msg('己超過收件時間(%s),預定作業日為下個營業日,是否繼續上傳??'),[ScanDenialTime]),mtConfirmation,[mbyes,mbcancel],0)=mrcancel then Exit;
+ end;
+
+ ShowText := _Msg('資料上傳中,請稍候');
+ DataLoading(True,True);
+
+ For i := 0 to NewTreeNode.Count -1 do
+ begin
+ v := posend('-',NewTreenode.Item[i].Text);
+ CaseID := Copy(NewTreenode.Item[i].Text,1,v-1);
+ ShowText := CaseID+_Msg('資料上傳中,請稍候');
+ DataLoading(True,True);
+ CreateIn_WH(CaseID); //產生入庫文件文字檔 In_Wh.dat
+ Case2upload(CaseID); //產生原影像結構
+ TransPath := ImageSavePath+CaseID+'\Upload\';
+ {if FMode = 'ESCAN' then //20140320 yuu說拿掉此檢查
+ begin
+ S := TStringlist.Create;
+ try
+ S.LoadFromFile(TransPath + 'Context.dat');
+ if S.Count = 0 then
+ begin
+ Showmessage(_Msg('無影像檔無法傳送'));
+ DataLoading(False,False);
+ LoadImgFile;
+ Exit;
+ end;
+ finally
+ s.Free;
+ end;
+ end;}
+ if (FMode = 'NSCAN') or (FMode = 'DSCAN') then //20170406 待掃瞄也要問一下
+ begin
+ /////訊問是否可上傳/////
+ CaseTrans := CaseAsk(CaseID);
+ //Showmessage('記得改回來');
+ //CaseTrans := 0;
+
+ /////訊問是否可上傳////
+ end
+ Else ///不是新件、重掃件、異動件的不查
+ begin
+ CaseTrans := 0;
+ end;
+ if CaseTrans = -1 then //失敗
+ begin
+ Showmessage(_Msg('')+HttpErrStr+'.');
+ DataLoading(False,False);
+ LoadImgFile;
+ Exit;
+ end;
+ if CaseTrans = 1 then
+ begin
+ ////重複處理/////
+ Inc(ReCasecount);
+ ////重複處理/////
+ Continue;
+ end
+ Else if CaseTrans = 0 then //可以傳送
+ begin
+ ///////檢核////// 20100927 User改為搬至外面做 ///20101019 User又改回上傳要做
+ //if FMode = 'NSCAN' then //20101019改成讀設定那些模式要做那些檢核
+ //begin
+ ///依十字定位點縮放////
+ CaseReSize(CaseID); //所以影像再做一次縮放
+ ////依十字定位點縮放/////// }
+ if (FMode <> 'FSCAN') then
+ begin
+ if (NewTreenode.Item[i].ImageIndex <> 7) and (NewTreenode.Item[i].ImageIndex <> 5) then //檢核完成的不再檢核
+ begin
+ ShowText := CaseID+_Msg('檢核中,請稍候');
+ DataLoading(True,True);
+ If not OMRCheckCase(CaseID) then //進檢核
+ begin
+ Inc(CheckErrCount);
+ Continue;
+ end;
+ end;
+ if (NewTreenode.Item[i].ImageIndex = 5) then
+ begin
+ Inc(CheckErrCount);
+ Continue;
+ end;
+ end;
+ //end;
+ ///////檢核//////
+ ShowText := CaseID+_Msg('資料上傳中,請稍候');
+ DataLoading(True,True);
+//ShowMessage('退出');DataLoading(False,False);Exit;
+ If Not TransCaseID(TransPath,CaseID,True) Then //傳送案件
+ begin
+ DataLoading(False,False);
+ LoadImgFile;
+ Exit;
+ end;
+ Inc(SuccessCount);
+ end;
+ end;
+ DataLoading(False,False);
+ TransMsg := Format(_Msg('成功件【%d】件'),[SuccessCount]);
+ if ReCasecount > 0 then
+ TransMsg := TransMsg + #13#10 + Format(_Msg('無法上傳件【%d】件'),[ReCasecount]);
+ if CheckErrCount > 0 then
+ begin
+ TransMsg := TransMsg + #13#10 + Format(_Msg('檢核失敗件【%d】件,請先點選「案件編號」,再點選「問號」查看錯誤原因'),[CheckErrCount]);
+LogFile1.LogToFile(logTimeString+'檢核失敗原因:'+OMRErrini2ListForLog(''));
+ end;
+
+ if (FMode = 'DSCAN') and (SuccessCount = 1) then
+ begin
+ uploadMsg:=NowCaseNo+_Msg('影像上傳完成。此案已進入下一流程');
+ end;
+ if (FMode='ESCAN') and (FModeName=_Msg('補件掃描')) and (SuccessCount = 1) then
+ begin
+ uploadMsg:=NowCaseNo+_Msg('影像已補件完成');
+ end;
+//ShowMessage('uploadMsg='+uploadMsg);
+ if uploadMsg<>'' then
+ begin
+ ShowMessage(uploadMsg);
+ end
+ else
+ begin
+ Showmessage(_Msg('傳送完成')+#13#10+TransMsg);
+ end;
+
+ LoadImgFile;
+ if (FMode = 'ESCAN') and (SuccessCount = 1) then
+ begin
+ if FEvents <> nil Then
+ begin
+ FEvents.OnClosePage;
+ end;
+ end;
+ if (FMode = 'DSCAN') and (SuccessCount = 1) then
+ begin
+ if FEvents <> nil Then
+ begin
+ FEvents.OnClosePage;
+ end;
+ end;
+end;
+
+
--
Gitblit v1.8.0