{ ==============================================================================
|
方法名稱: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
|
引用相依:FileExists, LoadFromFile, SaveToFile, StatrTwainScan, upFile
|
方法描述:處理「範本掃瞄」按鈕點擊。切換為範本模式並引導使用者輸入 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
|
引用相依:SelectScanner, scanner.SelectScanner, Scanner
|
方法描述:開啟系統掃瞄器選擇視窗。
|
============================================================================== }
|
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
|
引用相依:Rotate, TJpegGraphic, SaveQuality, LoadFromFile, SaveToFile
|
方法描述:處理工具列按鈕點擊,執行影像逆時針旋轉 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
|
引用相依:Rotate, TJpegGraphic, SaveQuality, LoadFromFile, SaveToFile
|
方法描述:處理工具列按鈕點擊,執行影像旋轉 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
|
引用相依:Rotate, TJpegGraphic, SaveQuality, LoadFromFile, SaveToFile
|
方法描述:處理工具列按鈕點擊,執行影像順時針旋轉 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;
|