{ ==============================================================================
方法名稱: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('',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('',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;