From 19b365ac7e1f14820565e3d52297927302096caa Mon Sep 17 00:00:00 2001
From: Hong-Dell\Hong <chlin1022@i-mps.com>
Date: 星期五, 28 十月 2022 15:07:01 +0800
Subject: [PATCH] ver 2,0,1,76
---
CB_IMGPSScanImp.dfm | 45
ErrList.dcu | 0
OldCaseInfo.pas | 46
CB_IMGPSScan.ocx | 0
CB_IMGPSScanImp.pas1 | 16158 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CB_IMGPSScan.dproj | 12
CB_IMGPSScan.res | 0
CB_IMGPSScan.ridl | 2
OldCaseInfo.dcu | 0
CB_IMGPSScanImp.dcu | 0
CB_IMGPSScanImp.pas | 190
CB_IMGPSScan.identcache | 0
CB_IMGPSScan_TLB.dcu | 0
OldCaseInfo.dfm | 30
14 files changed, 16,340 insertions(+), 143 deletions(-)
diff --git a/CB_IMGPSScan.dproj b/CB_IMGPSScan.dproj
index 5bae943..168b84f 100644
--- a/CB_IMGPSScan.dproj
+++ b/CB_IMGPSScan.dproj
@@ -66,12 +66,12 @@
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
- <BuildConfiguration Include="Release">
- <Key>Cfg_1</Key>
- <CfgParent>Base</CfgParent>
- </BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
+ <CfgParent>Base</CfgParent>
+ </BuildConfiguration>
+ <BuildConfiguration Include="Release">
+ <Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
@@ -95,7 +95,7 @@
<VersionInfo Name="MajorVer">2</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">1</VersionInfo>
- <VersionInfo Name="Build">73</VersionInfo>
+ <VersionInfo Name="Build">76</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
@@ -107,7 +107,7 @@
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"/>
<VersionInfoKeys Name="FileDescription"/>
- <VersionInfoKeys Name="FileVersion">2.0.1.73</VersionInfoKeys>
+ <VersionInfoKeys Name="FileVersion">2.0.1.76</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"/>
<VersionInfoKeys Name="LegalCopyright"/>
<VersionInfoKeys Name="LegalTrademarks"/>
diff --git a/CB_IMGPSScan.identcache b/CB_IMGPSScan.identcache
index cedb155..e329438 100644
--- a/CB_IMGPSScan.identcache
+++ b/CB_IMGPSScan.identcache
Binary files differ
diff --git a/CB_IMGPSScan.ocx b/CB_IMGPSScan.ocx
index 0ac08df..8e48b6c 100644
--- a/CB_IMGPSScan.ocx
+++ b/CB_IMGPSScan.ocx
Binary files differ
diff --git a/CB_IMGPSScan.res b/CB_IMGPSScan.res
index 845601f..6bd4c77 100644
--- a/CB_IMGPSScan.res
+++ b/CB_IMGPSScan.res
Binary files differ
diff --git a/CB_IMGPSScan.ridl b/CB_IMGPSScan.ridl
index c78a99a..a84db2f 100644
--- a/CB_IMGPSScan.ridl
+++ b/CB_IMGPSScan.ridl
@@ -6,7 +6,7 @@
// However, when applying changes via the Editor this file will be regenerated
// and comments or formatting changes will be lost.
// ************************************************************************ //
-// File generated on 2017/8/18 �U�� 03:12:43 (- $Rev: 12980 $, 104663453).
+// File generated on 2022/10/28 �W�� 10:03:13 (- $Rev: 12980 $, 3429500).
[
uuid(F7D1C429-BE85-4FAD-A058-36A41C2AAA89),
diff --git a/CB_IMGPSScanImp.dcu b/CB_IMGPSScanImp.dcu
index 61074db..dcad054 100644
--- a/CB_IMGPSScanImp.dcu
+++ b/CB_IMGPSScanImp.dcu
Binary files differ
diff --git a/CB_IMGPSScanImp.dfm b/CB_IMGPSScanImp.dfm
index 8acac39..3269e50 100644
--- a/CB_IMGPSScanImp.dfm
+++ b/CB_IMGPSScanImp.dfm
@@ -55,6 +55,7 @@
Width = 42
Height = 50
Align = alLeft
+ DoubleBuffered = True
Glyph.Data = {
360C0000424D360C000000000000360000002800000020000000200000000100
180000000000000C0000C40E0000C40E00000000000000000000808000808000
@@ -154,6 +155,7 @@
808000808000808000808000808000808000808000808000908FFF5F60FF8080
0080800080800080800080800080800080800080800080800080800080800080
8000808000808000808000808000808000808000808000808000}
+ ParentDoubleBuffered = False
TabOrder = 0
TabStop = False
OnClick = TransBtnClick
@@ -269,6 +271,7 @@
Top = 1
Width = 41
Height = 49
+ DoubleBuffered = True
Glyph.Data = {
360C0000424D360C000000000000360000002800000020000000200000000100
180000000000000C0000C40E0000C40E00000000000000000000808000808000
@@ -368,6 +371,7 @@
8080008080008080008080008080008080008080008080008080008080008080
0080800080800080800080800080800080800080800080800080800080800080
8000808000808000808000808000808000808000808000808000}
+ ParentDoubleBuffered = False
TabOrder = 2
TabStop = False
OnClick = OptionBtnClick
@@ -477,6 +481,7 @@
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ ParentDoubleBuffered = False
TabOrder = 3
TabStop = False
OnClick = SelectScanBtnClick
@@ -486,6 +491,7 @@
Top = 1
Width = 42
Height = 49
+ DoubleBuffered = True
Glyph.Data = {
36080000424D3608000000000000360400002800000020000000200000000100
08000000000000040000C40E0000C40E00000001000000000000000000000000
@@ -553,6 +559,7 @@
FFFFFFFFFFFFA449FFFFFFFFFFFFFFFFA400FFFFA44902020202A4F7F7F7F7F7
F7F7F7F7F7F7A4A4A4A4A4A4A4A4A4A40700F7F7A40202020202020202020202
0202020202020202020202020202020202020202020202020202}
+ ParentDoubleBuffered = False
TabOrder = 4
TabStop = False
OnClick = NextPageBtnClick
@@ -562,6 +569,7 @@
Top = 1
Width = 42
Height = 49
+ DoubleBuffered = True
Glyph.Data = {
36080000424D3608000000000000360400002800000020000000200000000100
08000000000000040000C40E0000C40E00000001000000000000000000000000
@@ -629,6 +637,7 @@
FFFFFFFFFFFFA449FFFFFFFFFFFFFFFFA400FFFFA44902020202A4F7F7F7F7F7
F7F7F7F7F7F7A4A4A4A4A4A4A4A4A4A40700F7F7A40202020202020202020202
0202020202020202020202020202020202020202020202020202}
+ ParentDoubleBuffered = False
TabOrder = 5
TabStop = False
OnClick = PrePageBtnClick
@@ -638,6 +647,8 @@
Top = 1
Width = 42
Height = 49
+ DoubleBuffered = True
+ ParentDoubleBuffered = False
TabOrder = 6
TabStop = False
Visible = False
@@ -648,6 +659,8 @@
Top = 1
Width = 42
Height = 49
+ DoubleBuffered = True
+ ParentDoubleBuffered = False
TabOrder = 7
TabStop = False
OnClick = FC5Click
@@ -657,6 +670,8 @@
Top = 1
Width = 42
Height = 49
+ DoubleBuffered = True
+ ParentDoubleBuffered = False
TabOrder = 8
TabStop = False
OnClick = FC4Click
@@ -666,6 +681,8 @@
Top = 1
Width = 42
Height = 49
+ DoubleBuffered = True
+ ParentDoubleBuffered = False
TabOrder = 9
TabStop = False
OnClick = FC3Click
@@ -675,6 +692,8 @@
Top = 1
Width = 42
Height = 49
+ DoubleBuffered = True
+ ParentDoubleBuffered = False
TabOrder = 10
TabStop = False
OnClick = FC2Click
@@ -684,6 +703,8 @@
Top = 1
Width = 42
Height = 49
+ DoubleBuffered = True
+ ParentDoubleBuffered = False
TabOrder = 11
TabStop = False
OnClick = FC1Click
@@ -693,6 +714,8 @@
Top = 1
Width = 42
Height = 49
+ DoubleBuffered = True
+ ParentDoubleBuffered = False
TabOrder = 12
TabStop = False
OnClick = FC0Click
@@ -727,6 +750,7 @@
Top = 0
Width = 42
Height = 50
+ DoubleBuffered = True
Glyph.Data = {
360C0000424D360C000000000000360000002800000020000000200000000100
180000000000000C0000C40E0000C40E00000000000000000000808000808000
@@ -826,6 +850,7 @@
8080008080008080008080008080008080008080008080008080008080008080
0080800080800080800080800080800080800080800080800080800080800080
8000808000808000808000808000808000808000808000808000}
+ ParentDoubleBuffered = False
TabOrder = 0
TabStop = False
OnClick = NewScanBtnClick
@@ -835,6 +860,7 @@
Top = 0
Width = 42
Height = 50
+ DoubleBuffered = True
Glyph.Data = {
360C0000424D360C000000000000360000002800000020000000200000000100
180000000000000C000000000000000000000000000000000000808000808000
@@ -934,6 +960,7 @@
8080008080008080008080008080008080008080008080008080008080008080
0080800080800080800080800080800080800080800080800080800080800080
8000808000808000808000808000808000808000808000808000}
+ ParentDoubleBuffered = False
TabOrder = 1
TabStop = False
Visible = False
@@ -1075,6 +1102,7 @@
Top = 9
Width = 27
Height = 28
+ DoubleBuffered = True
Glyph.Data = {
06020000424D0602000000000000760000002800000028000000140000000100
0400000000009001000000000000000000001000000000000000000000000000
@@ -1094,6 +1122,7 @@
333333333EEEE333333333333333333333333333333333333333333333333333
33333333333333333333}
NumGlyphs = 2
+ ParentDoubleBuffered = False
TabOrder = 3
TabStop = False
Visible = False
@@ -1104,6 +1133,7 @@
Top = 9
Width = 27
Height = 28
+ DoubleBuffered = True
Glyph.Data = {
76010000424D7601000000000000760000002800000020000000100000000100
04000000000000010000120B0000120B00001000000000000000000000000000
@@ -1118,6 +1148,7 @@
555577F7F7F7F7F75F5550707070700B055557F7F7F7F7757FF5507070707050
9055575757575757775505050505055505557575757575557555}
NumGlyphs = 2
+ ParentDoubleBuffered = False
TabOrder = 4
TabStop = False
Visible = False
@@ -1128,6 +1159,7 @@
Top = 19
Width = 51
Height = 25
+ DoubleBuffered = True
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
0400000000008000000000000000000000001000000000000000000000000000
@@ -1137,6 +1169,7 @@
00080F888700078000880F8800FFF00008880F807FFFF07088880F70E000F080
78880F0EFEFEF08808880F0F0000F0880888000EFEFFF0880888887000000080
7888888008888870888888880088800888888888870007888888}
+ ParentDoubleBuffered = False
TabOrder = 5
TabStop = False
Visible = False
@@ -1310,6 +1343,7 @@
Top = 6
Width = 80
Height = 27
+ DoubleBuffered = True
Glyph.Data = {
76010000424D7601000000000000760000002800000020000000100000000100
04000000000000010000120B0000120B00001000000000000000000000000000
@@ -1324,6 +1358,7 @@
FB33373F37777733373333BFBF999FBFB3333373FF77733F7333333BFBFBFBFB
3333333773FFFF77333333333FBFBF3333333333377777333333}
NumGlyphs = 2
+ ParentDoubleBuffered = False
TabOrder = 0
TabStop = False
Visible = False
@@ -5556,7 +5591,7 @@
object SmoothCB: TCheckBox
Left = 298
Top = 16
- Width = 94
+ Width = 120
Height = 17
Caption = #28784#38542#24179#28369#39023#31034
TabOrder = 0
@@ -5763,7 +5798,7 @@
Left = 32
Top = 360
Bitmap = {
- 494C01010A000D00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+ 494C01010A000D00100010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000400000003000000001002000000000000030
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
@@ -6172,7 +6207,7 @@
Left = 32
Top = 225
Bitmap = {
- 494C010105000900040020002000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+ 494C010105000900100020002000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000800000004000000001002000000000000080
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
@@ -7243,7 +7278,7 @@
Left = 29
Top = 273
Bitmap = {
- 494C010107000900040020002000FFFFFF00FF10FFFFFFFFFFFFFFFF424D3600
+ 494C010107000900100020002000FFFFFF00FF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000800000004000000001002000000000000080
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
@@ -8314,7 +8349,7 @@
Left = 37
Top = 313
Bitmap = {
- 494C010107000900040020002000FFFFFF00FF10FFFFFFFFFFFFFFFF424D3600
+ 494C010107000900100020002000FFFFFF00FF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000800000004000000001002000000000000080
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
diff --git a/CB_IMGPSScanImp.pas b/CB_IMGPSScanImp.pas
index 0b115dd..beb5aaf 100644
--- a/CB_IMGPSScanImp.pas
+++ b/CB_IMGPSScanImp.pas
@@ -744,7 +744,6 @@
Procedure PageReplaceFormID(Path,NowFormID,NewFormID:String); //選取頁更換FormID
Function ModeNeedCheck(OMRMode,ScanMode:String):Boolean; //掃瞄模式是否要做檢核
procedure WMMOUSEWHEEL(var message: TWMMouseWheel); message WM_MOUSEWHEEL;
- Function GetInputMask:String; //取得輸入的保單號碼
Function GetCasePage(Path,CaseID:String):Integer;
Function GetFormIDPage(FileList:TStringlist;FormID:String):Integer;
Procedure SetFile2Case(CaseID,FileName:String);
@@ -2212,11 +2211,11 @@
GoAtt := True;
end;
- if InputQuery('輸入其他文件名稱','文件名稱',CustomDocName) then
+ if InputQuery(_Msg('輸入其他文件名稱'),_Msg('文件名稱'),CustomDocName) then
begin
if FindCustomDocName(DisplayPath,CustomDocName) then
begin
- Showmessage(Format('文件名稱:"%s"己存在',[CustomDocName]));
+ Showmessage(Format(_Msg('文件名稱:"%s"己存在'),[CustomDocName]));
Exit;
end;
CustomDocNo := GetNewCustomDocNo(DisplayPath,CustomDocName);
@@ -2296,7 +2295,7 @@
iISBName,OldName : String;
iISB : TImageScrollBox;
begin
- if MessageDlg('是否確定刪除??',mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
+ if MessageDlg(_Msg('是否確定刪除??'),mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
for i := 0 to ComponentCount -1 do
begin
@@ -2322,7 +2321,7 @@
//ShowMessage('iISB.FileName='+iISB.FileName);
ReSortFileName(ExtractFilePath(iISB.FileName));
DrawDocItem2(MytreeNode1,NowCaseno);
- MyTreeNode1.Text := Format('%s-%d'+_Msg('頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
+ MyTreeNode1.Text := Format(_Msg('%s-%d頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
NewTreeNodeRefresh;
ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
TreeView1click(self);
@@ -2332,7 +2331,7 @@
var
mp:string;
begin
- mp := InputBox('移動頁數','請輸入移入頁碼','');
+ mp := InputBox(_Msg('移動頁數'),_Msg('請輸入移入頁碼'),'');
if (mp <> '') then
begin
MoveImage(DisplayPath+NowDocDir+'\',strtoint(mp));
@@ -2795,8 +2794,9 @@
//ShowMessage(IntToStr(FileRec.Size)+','+IntToStr(FFileSizeLimit * 1024));
If FileRec.Size > FFileSizeLimit * 1024 Then // 檢查檔案大小
Begin
- ShowMessage(Format('目前檔案大小為 %.3f MB', [FileRec.Size / (1024*1024)]) +
- ',已超過單一檔案匯入限制'+Format('%.1f',[FFileSizeLimit/1024])+'MB');
+ ShowMessage(Format(_Msg('目前檔案大小為 %.3f MB,已超過單一檔案匯入限制%1.f MB'),[FileRec.Size / (1024*1024),FFileSizeLimit/1024]));
+ {ShowMessage(Format('目前檔案大小為 %.3f MB', [FileRec.Size / (1024*1024)]) +
+ ',已超過單一檔案匯入限制'+Format('%.1f',[FFileSizeLimit/1024])+'MB');}
FindClose(FileRec);
DataLoading(false, false);
Exit;
@@ -2811,7 +2811,8 @@
P := ISB.ImageCountFromFile(OpenDialog1.FileName);
For i := 1 To P Do
Begin
- ShowText := _Msg('檔案加入中,請稍候(' + inttostr(i) + '/' + inttostr(P) + ')');
+ ShowText := Format(_Msg('檔案加入中,請稍候(%d/%d)'),[i,p]);
+ //ShowText := _Msg('檔案加入中,請稍候')+'(' + inttostr(i) + '/' + inttostr(P) + ')';
DataLoading(True, True);
ISB.LoadFromFile(FName, i);
DeskewImg(ISB.Graphic);
@@ -2860,7 +2861,7 @@
iRect.Bottom := ISB.Graphic.Height;
CropImg(iGraphic_sec, iRect);
End;
-
+ ISB.Graphic.Clear; //20220711 Hong 覺得ISB後面沒有到了,先清掉減少記憶體使用
iGraphic := iGraphic_First;
While Not iGraphic.IsEmpty Do
@@ -2915,7 +2916,7 @@
DocNo := FormCode2DocNo(FormID);
DocDir := FindLastestDocDir(CaseID, DocNo);
- if (FMode='ESCAN') and (FModeName='補件掃描') then
+ if (FMode='ESCAN') and (FModeName=_Msg('補件掃描')) then
begin
DocDir := FindLastestDocDirForPage(CaseID, DocNo,FormID);
//ShowMessage('DocDir='+DocDir);
@@ -3139,6 +3140,8 @@
finally
ISB.Free;
+iGraphic_First.Free;
+iGraphic_sec.Free;
end;
@@ -3284,12 +3287,12 @@
if Trim(DocListForm.Edit1.Text)='' then
begin
- Showmessage('未輸入文件名稱');
+ Showmessage(_Msg('未輸入文件名稱'));
Exit;
end;
if FindCustomDocName(DisplayPath,NewFormID) then
begin
- Showmessage(Format('文件名稱:"%s"己存在',[NewFormID]));
+ Showmessage(Format(_Msg('文件名稱:"%s"己存在'),[NewFormID]));
Exit;
end;
if NowFormCode <> AttName then
@@ -3380,7 +3383,7 @@
SavePath : String;
ST1:TStringList;
begin
- if InputQuery('輸入其他文件名稱','文件名稱',CustomDocName) then
+ if InputQuery(_Msg('輸入其他文件名稱'),_Msg('文件名稱'),CustomDocName) then
begin
if CustomDocName <> '' then
begin
@@ -3409,26 +3412,26 @@
begin
oldCopies := GetDocDirCopies(NowCaseno,NowDocDir);
try
- NewCopies := Strtoint(inputBox('修改份數','請輸入修改後的份數',inttostr(oldCopies)));
+ NewCopies := Strtoint(inputBox(_Msg('修改份數'),_Msg('請輸入修改後的份數'),inttostr(oldCopies)));
except
- Showmessage('輸入錯誤');
+ Showmessage(_Msg('輸入錯誤'));
Exit;
end;
if (NewCopies <= 0) and (NewCopies >= 10000) then
begin
- Showmessage('輸入範圍錯誤');
+ Showmessage(_Msg('輸入範圍錯誤'));
Exit;
end;
if (oldCopies <> NewCopies) and (NewCopies > 0) and (NewCopies < 10000) then
begin
- if DocNoNeedDiv(NowDocNo) and (NewCopies = 1) and (MessageDlg('修改至1份後此文件將無法再進行份數修改,是否確定??',mtConfirmation,[mbyes,mbcancel],0)= mrcancel) then
+ if DocNoNeedDiv(NowDocNo) and (NewCopies = 1) and (MessageDlg(_Msg('修改至1份後此文件將無法再進行份數修改,是否確定??'),mtConfirmation,[mbyes,mbcancel],0)= mrcancel) then
Exit;
SetDocDirCopies(NowCaseno,NowDocDir,NewCopies);
SetRecordEditedDocDir('A',NowCaseNo,NowDocDir);
DrawDocItem2(MytreeNode1,NowCaseno);
- Showmessage('修改完成');
+ Showmessage(_Msg('修改完成'));
end;
end;
@@ -3584,7 +3587,7 @@
if DisplayISB.FileName = '' then Exit;
if (ContextList.Count = 1) and ((FMode = 'NSCAN') or (FMode = 'ASCAN') or (FMode = 'DSCAN') or (FMode = 'ISCAN') or (FMode = 'SSCAN') or (FMode = 'MSCAN') or (FMode = 'RI_SCAN')) then
begin
- if Messagedlg(_Msg('刪除後(%s)案件無影像,將刪除此案件,是否確定刪除?'),mtconfirmation,[mbyes,mbcancel],0) = mrCancel then Exit;
+ if Messagedlg(Format(_Msg('刪除後(%s)案件無影像,將刪除此案件,是否確定刪除?'),[NowCaseno]),mtconfirmation,[mbyes,mbcancel],0) = mrCancel then Exit;
_DelTree(DisplayPath);
SetCaseList('D',NewTreeNode.IndexOf(MyTreeNode1),'');
LoadImgFile;
@@ -3655,7 +3658,7 @@
PM104.Visible := True; //檔案加入影像
end;
- if FModeName='異動件' then
+ if FModeName=_Msg('異動件') then
begin
PM101.Visible := True;
end;
@@ -3680,7 +3683,7 @@
if FMode='ESCAN' then
PM101.Visible:=false;
- if FModeName='異動件' then
+ if FModeName=_Msg('異動件') then
begin
PM101.Visible := True;
end;
@@ -3720,7 +3723,7 @@
PM101.Visible:=false;
end;
- if FModeName='異動件' then
+ if FModeName=_Msg('異動件') then
begin
PM101.Visible := True;
end;
@@ -3759,7 +3762,7 @@
PM101.Visible:=false;
end;
- if FModeName='異動件' then
+ if FModeName=_Msg('異動件') then
begin
PM101.Visible := True;
end;
@@ -3861,7 +3864,7 @@
PM605.Visible := True; //刪除
end;
- if FModeName<>'異動件' then
+ if FModeName<>_Msg('異動件') then
begin
if (FImgDelete='Y') then
begin
@@ -3934,7 +3937,7 @@
if SampleFormIDList.IndexOf(SampleFormID)<>-1 then
begin
// Show a custom dialog
- buttonSelected := messagedlg(SampleFormID+'已有範本,是否取代?',mtCustom,
+ buttonSelected := messagedlg(SampleFormID+_Msg('已有範本,是否取代?'),mtCustom,
[mbYes,mbCancel], 0);
if buttonSelected = mrCancel then
begin
@@ -4141,7 +4144,7 @@
AddFile := HTTPEncode(UTF8Encode(ExtractFileName(OpenDialog1.Files.Strings[i])));
if FileExists(ImageSavePath+NowCaseno+'\'+AddFile) then
begin
- if Messagedlg(Format(_msg('%s己存在,是否覆蓋??'),[Addfile]),mtconfirmation,[mbyes,mbcancel],0) = mrcancel Then
+ if Messagedlg(Format(_Msg('%s己存在,是否覆蓋??'),[Addfile]),mtconfirmation,[mbyes,mbcancel],0) = mrcancel Then
Continue;
SetAttContextList('D',-1,NowCaseno,AddFile);
end;
@@ -4174,7 +4177,7 @@
begin
IF not InitialOk Then
begin
- Showmessage(_msg('資訊尚未下載完成,請稍候或重新進入'));
+ Showmessage(_Msg('資訊尚未下載完成,請稍候或重新進入'));
Exit;
end;
if MyTreeNode1 = nil then
@@ -4823,7 +4826,7 @@
DocNo := FormCode2DocNo(FormID);
ScanDocDir := FindLastestDocDir(ScanCaseno,DocNo);
- if (FMode='ESCAN') and (FModeName='補件掃描') then //20180207 加入的特殊邏輯
+ if (FMode='ESCAN') and (FModeName=_Msg('補件掃描')) then //20180207 加入的特殊邏輯
begin
ScanDocDir := FindLastestDocDirForPage(ScanCaseno, DocNo,FormID);
end;
@@ -4951,7 +4954,7 @@
DeleteFile(LngPath+'mps.dat');
end;
////壓zip//////
- Showmessage('匯出完成,匯出檔案:'+LngPath+'mps.zip');
+ Showmessage(_Msg('匯出完成,匯出檔案:')+LngPath+'mps.zip');
end;
procedure TCB_IMGPSScanX.ImportBtClick(Sender: TObject);
@@ -4978,16 +4981,16 @@
str2dir(ZipPath);
if not ExecuteUnZip_Pwd(OpenDialog1.FileName,ZipPath,False,'9338430') then
- Showmessage('無法解壓縮');
+ Showmessage(_Msg('無法解壓縮'));
if not FileExists(ZipPath+'mps.dat') then
begin
- Showmessage('格式不符,無法匯入');
+ Showmessage(_Msg('格式不符,無法匯入'));
Exit;
end;
S.LoadFromFile(ZipPath+'mps.dat');
if (En_DecryptionStr_Base64('D',S.Strings[0],'9338430')<> ServerDate) then
begin
- Showmessage('檔案過期,無法匯入');
+ Showmessage(_Msg('檔案過期,無法匯入'));
Exit;
end;
@@ -5027,7 +5030,7 @@
S.Free;
_DelTree(ZipPath);
end;
- Showmessage('匯入完成');
+ Showmessage(_Msg('匯入完成'));
end;
procedure TCB_IMGPSScanX.HotKeyDown (var Msg : TMessage);
@@ -6014,7 +6017,7 @@
begin
if FileName2FormCode(FileList.Strings[i]) = FormID then
begin
- if (FMode = 'ESCAN') and (FModeName<>'異動件') then
+ if (FMode = 'ESCAN') and (FModeName<>_Msg('異動件')) then
begin
if ISExistImg(ImageSavePath+CaseID+'\'+DocDir+'\'+FileList.Strings[i]) then
begin
@@ -6549,7 +6552,8 @@
//exit; //目前上傳檔案大小為xxMB,已超過50MB,無法上傳 %.3f ,[FileRec.Size / 1048576]
If FileRec.Size > StrtoInt(FMaxUploadSize) * 1048576 Then // 檢查檔案大小
Begin
- ShowMessage(Format('%s目前上傳檔案大小為%.3fMB,已超過'+FMaxUploadSize+'MB,無法上傳',[caseid,FileRec.Size / 1048576]) );
+ ShowMessage(Format(_Msg('%s目前上傳檔案大小為%.3fMB,已超過%sMB,無法上傳'),[caseid,FileRec.Size / 1048576,FMaxUploadSize]));
+ //ShowMessage(Format('%s目前上傳檔案大小為%.3fMB,已超過'+FMaxUploadSize+'MB,無法上傳',[caseid,FileRec.Size / 1048576]) );
FindClose(FileRec);
Result := False;
Exit;
@@ -7754,26 +7758,6 @@
Result := True;
end;
-Function TCB_IMGPSScanX.GetInputMask:String; //取得輸入的保單號碼
-var
- InputMaskForm: TInputMaskForm;
-begin
- Result := '';
- ShowText := _msg('輸入保單號碼中');
- DataLoading(True,True);
- InputMaskForm := TInputMaskForm.Create(self);
- try
- InputMaskForm.MaskEdit1.ClearSelection;
- if InputMaskForm.ShowModal = mrOk then
- begin
- Result := Trim(InputMaskForm.MaskEdit1.Text)+Trim(InputMaskForm.MaskEdit2.Text)+Trim(InputMaskForm.MaskEdit3.Text);
- end;
- finally
- InputMaskForm.Free;
- DataLoading(False,False);
- end;
-end;
-
Function TCB_IMGPSScanX.GetCasePage(Path,CaseID:String):Integer;
var
DocDirList,FileList,ST1 :TStringlist;
@@ -8487,7 +8471,7 @@
begin
if Mode = 'ID' then
begin
- Result := '自行輸入';
+ Result := _Msg('自行輸入');
for i := 0 to ID_S.Count - 1 do
begin
if Str = ID_S.Strings[i] then
@@ -8931,7 +8915,7 @@
//DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('頁'),[CaseDocNoList.Strings[i],DocNo2DocName(Caseno,iDocNo),DocNoPage]));
//DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[CaseDocNoList.Strings[i],DocNo2DocName(Caseno,iDocNo),DocNoCopies]));
//ShowMessage('iDocNo='+iDocNo);
- DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[DocNo2DocName(Caseno,iDocNo),CaseDocNoList.Strings[i],DocNoCopies]));
+ DocNode := TreeView1.Items.AddChild(CaseNode,Format(_Msg('%s{%s}-%d份'),[DocNo2DocName(Caseno,iDocNo),CaseDocNoList.Strings[i],DocNoCopies]));
if GetUseCase('F',ImageSavePath+Caseno+'\',CaseDocNoList.Strings[i]) <> '' Then
begin
@@ -8961,7 +8945,7 @@
FormPage := GetFormIDPage(FileList,FormID);
FormName := FormCode2FormName(Caseno,FormID);
//FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
- FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
FormNode.ImageIndex := 4;
FormNode.SelectedIndex := 4;
DocNode.AlphaSort(True);
@@ -8975,7 +8959,8 @@
FormPage := GetFormIDPage(FileList,FormID);
FormName := FormCode2FormName(Caseno,FormID);
//FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
- FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
FormNode.ImageIndex := 4;
FormNode.SelectedIndex := 4;
DocNode.AlphaSort(True);
@@ -9001,8 +8986,8 @@
FormPage := GetFormIDPage(FileList,FormID);
FormName := FormCode2FormName(Caseno,FormID);
//FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
- FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
-
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
FormNode.ImageIndex := 4;
FormNode.SelectedIndex := 4;
DocNode.AlphaSort(True);
@@ -9036,7 +9021,7 @@
DocNoPage := FileList.Count;
iDocNo := DocNoDir2DocNo(AttName);
//DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[AttName,DocNo2DocName(Caseno,iDocNo),1]));
- DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[DocNo2DocName(Caseno,iDocNo),AttName,1]));
+ DocNode := TreeView1.Items.AddChild(CaseNode,Format(_Msg('%s{%s}-%d份'),[DocNo2DocName(Caseno,iDocNo),AttName,1]));
DocNode.ImageIndex := 2;
DocNode.SelectedIndex := 2;
for n := 0 to FileList.Count - 1 do
@@ -9047,8 +9032,8 @@
FormPage := GetFormIDPage(FileList,FormID);
FormName := FormCode2FormName(Caseno,FormID);
//FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
- FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
-
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
FormNode.ImageIndex := 4;
FormNode.SelectedIndex := 4;
end;
@@ -9070,7 +9055,9 @@
DocNoPage := FileList.Count;
iDocNo := DocNoDir2DocNo(AttName);
//DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[AttName,DocNo2DocName(Caseno,iDocNo),1]));
- DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[DocNo2DocName(Caseno,iDocNo),'Attach',1]));
+ //DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[DocNo2DocName(Caseno,iDocNo),'Attach',1]));
+ DocNode := TreeView1.Items.AddChild(CaseNode,Format(_Msg('%s{%s}-%d份'),[DocNo2DocName(Caseno,iDocNo),'Attach',1]));
+
DocNode.ImageIndex := 2;
DocNode.SelectedIndex := 2;
for n := 0 to FileList.Count - 1 do
@@ -9081,7 +9068,8 @@
FormPage := GetFormIDPage(FileList,FormID);
FormName := FormCode2FormName(Caseno,FormID);
//FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
- FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
FormNode.ImageIndex := 4;
FormNode.SelectedIndex := 4;
@@ -9172,7 +9160,7 @@
PrtDialog : TPrintDialog;
S : String;
begin
- ShowText := '列印中,請稍候';
+ ShowText := _Msg('列印中,請稍候');
DataLoading(True,True);
Case2upload(NowCaseNo); //產生原影像結構
@@ -9256,6 +9244,7 @@
OldCaseInfoForm.IN_WH_DocNoList := TStringlist.Create;
OldCaseInfoForm.OldCopiesList := TStringlist.Create;
try
+ InitialLanguage(OldCaseInfoForm); //載入多國語言
OldCaseInfoForm.Notebook1.ActivePage := 'CaseInfo';
OldCaseInfoForm.ImageSavePath := ImageSavePath;
OldCaseInfoForm.CaseID := NowCaseNo;
@@ -9282,7 +9271,7 @@
Year := Caseinfolist.Strings[1];
BS_No := Caseinfolist.Strings[2];
IS_Old := Caseinfolist.Strings[3];
- With OldCaseInfoForm.ListView1.Items.Add do
+ With OldCaseInfoForm.OldCaseLV.Items.Add do
begin
Caption := CaseID;
SubItems.Add(Year);
@@ -9366,7 +9355,8 @@
iDocNoList.SaveToFile(NewPath+'CaseDocNo.dat');
iDocNo_CopiesList.SaveToFile(NewPath+'CaseDocNo_Copies.dat');
DrawDocItem2(MyTreeNode1,NowCaseNo);
- MyTreeNode1.Text := Format('%s-%d'+_Msg('頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
+ //MyTreeNode1.Text := Format('%s-%d'+_Msg('頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
+ MyTreeNode1.Text := Format(_Msg('%s-%d頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
NewTreeNodeRefresh;
ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
end;
@@ -9773,9 +9763,9 @@
if FileExists(LngPath+'MPSLIC_SCAN.lic') then
DeleteFile(LngPath+'MPSLIC_SCAN.lic');
if LegalDate = '' then
- StatusBar1.Panels[4].Text := '註冊號:'+MacID+' 剩餘註冊數:'+inttostr(Totalcount-Nowcount);
+ StatusBar1.Panels[4].Text := Format(_Msg('註冊號:%s 剩餘註冊數:%s'),[MacID,inttostr(Totalcount-Nowcount)]);
if LegalDate <> '' then
- StatusBar1.Panels[4].Text := '*註冊號:'+MacID+'('+inttostr(Lic_Idx)+')'+' 剩餘註冊數:'+inttostr(Totalcount-Nowcount);
+ StatusBar1.Panels[4].Text := '*'+Format(_Msg('註冊號:%s 剩餘註冊數:%s'),[MacID+'('+inttostr(Lic_Idx)+')',inttostr(Totalcount-Nowcount)]);
end;
procedure TCB_IMGPSScanX.SmoothCBClick(Sender: TObject);
@@ -10098,7 +10088,7 @@
Printer object. Otherwise, if UsePrintJob is True, the Title
property of the TDibGraphicPrinter object is used to specify the
job name. }
- Printer.Title := '影像列印';
+ Printer.Title := _Msg('影像列印');
end;
IF (Page mod 2) = 1 Then
@@ -10123,7 +10113,7 @@
procedure PrintWithAutoPrintJob;
begin
GraphicPrinter.UsePrintJob := True;
- GraphicPrinter.Title := '影像列印';
+ GraphicPrinter.Title := _Msg('影像列印');
GraphicPrinter.Print(ImageScrollBox1.Graphic);
end;
@@ -10767,19 +10757,19 @@
//Showmessage(FUrl+'service/slic/SLIC02/useOther?'+senddata);
if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/useOther',SendData,'file',OldCasePath+'UseCase.ini',FReWrite,Memo1,False) then
begin
- Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'+_Msg('錯誤代碼:')),[OldCaseID])+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
+ Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'),[OldCaseID])+_Msg('錯誤代碼:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
Result := False;
Exit;
end;
if memo1.Lines.Strings[0] = '1' then
begin
- Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!')+_Msg('錯誤原因:'),[OldCaseID])+memo1.Lines.Strings[1]);
+ Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'),[OldCaseID])+_Msg('錯誤原因:')+memo1.Lines.Strings[1]);
Result := False;
Exit;
end
Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
begin
- Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!')+_Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入'),[OldCaseID]));
+ Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'),[OldCaseID])+_Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入'));
Result := False;
Exit;
end;
@@ -12191,7 +12181,7 @@
LogFile1.LogToFile(logTimeString+'最大頁數B段 '+CaseID+' '+'OMRFileList.Text='+OMRFileList.Text);
For i := 0 to OMRFileList.Count - 1 do
begin
- if FModeName='異動件' then Continue;
+ if FModeName=_Msg('異動件') then Continue;
if FWH_category='N' then
begin
@@ -12787,7 +12777,7 @@
begin
Result := True; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
//dnFile(HTTPSClient,FUrl+'Language.Lng','','',LngPath+'Language.Lng',FReWrite.Text,Memo1,False,DownImgStatus)
- If not dnFile_Get(HTTPSClient,FUrl+'Language.Lng','','',LngPath+'Language.Lng',FReWrite,Memo1,False,'') Then
+ If not dnFile_Get(HTTPSClient,FUrl+'Language.Lng','','',LngPath+'Language.Lng',FReWrite,Memo1,False,DownImgStatus) Then
begin
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
Result := False;
@@ -12817,7 +12807,7 @@
List_FormCode,Err_FormCode: String;
iFormID : String;
begin
- ShowText := '影像顯示中,請稍候';
+ ShowText := _Msg('影像顯示中,請稍候');
DataLoading(True,True);
IF FormCode = 'ShowAll' then //顯示所有的影像 (因為附件會傳空字串,所以用ShowAll)
@@ -12934,7 +12924,7 @@
iGroupNo,page,Ct,int1 : Integer;
ST1:TStringList;
begin
- ShowText := '影像顯示中,請稍候';
+ ShowText := _Msg('影像顯示中,請稍候');
DataLoading(True,True);
ST1:=TStringList.Create;
//Display1.Lines.Clear;
@@ -14695,7 +14685,7 @@
DisplayMode(1,1,1,Panel9);
Application.ProcessMessages;
StatusBar1.Panels[0].Text := 'Ver'+GetCurrentVersionNo;
- StatusBar1.Panels[1].Text := _Msg('登入人員:')+FUserName;
+ StatusBar1.Panels[1].Text := 'Login User:'+FUserName;
if FPrintyn = 'Y' then
PrtLB.Visible := True;
@@ -14703,11 +14693,24 @@
InitScrollRec;
If FUrl = '' then
begin
- Showmessage(_Msg('URL不能為空白,請洽詢程式人員'));
+ Showmessage(_Msg('URL cannot be empty,please contact system administrator'));
Exit;
end;
if FUrl[length(FUrl)]<>'/' then
FUrl := FUrl + '/';
+ //20221028 把語言檔改放至 Local目錄裡,才不會有些文字來不及使用
+ LngPath := GetLocalAppDir(Handle)+'MPS\CB_IMGPS\';
+ Str2Dir(LngPath);
+ ////下載語言檔///// 20170218 先拿調以便測試
+ If not DownLanguage Then
+ begin
+ Showmessage('Language File error!!'+HttpErrStr);
+ DataLoading(False,False);
+ Exit;
+ end;
+
+ InitialLanguage(Self); //載入多國語言
+
if FWork_no='' then
begin
@@ -14860,7 +14863,7 @@
//ShowMessage('CheckXmlPath='+CheckXmlPath);
//SitePath := ImagePath+'Site\'+FWork_No+'\';
SitePath := ImagePath+'Site\'; // 20200612 發現影像平台是取回所有業務的設定,所以不能有業務別目錄
- LngPath := ImagePath;
+ //LngPath := ImagePath; //改放至上面取Local目錄
SamplePath := ImagePath+'Sample\'+FWork_No+'\';
ImagePath := ImagePath + 'Scantemp\';
//ShowMessage('AA ImagePath='+ImagePath);
@@ -14899,15 +14902,8 @@
ShowText := _Msg('資料載入中,請稍候');
DataLoading(True,True);
- ////下載語言檔///// 20170218 先拿調以便測試
- If not DownLanguage Then
- begin
- Showmessage('Language File error!!'+HttpErrStr);
- DataLoading(False,False);
- Exit;
- end;
- InitialLanguage(Self); //載入多國語言
+ StatusBar1.Panels[1].Text := _Msg('登入人員:')+FUserName;
//FCaseID:='20150302180133';//測試用
////下載語言檔/////
//ShowMessage('OOOO');
@@ -15210,7 +15206,7 @@
begin
uploadMsg:=NowCaseNo+_Msg('影像上傳完成。此案已進入下一流程');
end;
- if (FMode='ESCAN') and (FModeName='補件掃描') and (SuccessCount = 1) then
+ if (FMode='ESCAN') and (FModeName=_Msg('補件掃描')) and (SuccessCount = 1) then
begin
uploadMsg:=NowCaseNo+_Msg('影像已補件完成');
end;
@@ -15341,9 +15337,9 @@
DisplayPath := ImageSavePath+NowCaseNo+'\';
if GetUseCase('F',DisplayPath,NowDocDir) <> '' then
- StatusBar1.Panels[2].Text := Format('從%s引用',[GetUseCase('F',DisplayPath,NowDocDir)]);
+ StatusBar1.Panels[2].Text := Format(_Msg('從%s引用'),[GetUseCase('F',DisplayPath,NowDocDir)]);
if GetUseCase('T',DisplayPath,NowDocDir) <> '' then
- StatusBar1.Panels[2].Text := Format('被%s引用',[GetUseCase('T',DisplayPath,NowDocDir)]);
+ StatusBar1.Panels[2].Text := Format(_Msg('被%s引用'),[GetUseCase('T',DisplayPath,NowDocDir)]);
if FLoanDoc_Enable = 'Y' then
begin
AddCredit1RG.Enabled := True;
@@ -15417,9 +15413,9 @@
DisplayPath := ImageSavePath+NowCaseNo+'\';
if GetUseCase('F',DisplayPath,NowDocDir) <> '' then
- StatusBar1.Panels[2].Text := Format('從%s引用',[GetUseCase('F',DisplayPath,NowDocDir)]);
+ StatusBar1.Panels[2].Text := Format(_Msg('從%s引用'),[GetUseCase('F',DisplayPath,NowDocDir)]);
if GetUseCase('T',DisplayPath,NowDocDir) <> '' then
- StatusBar1.Panels[2].Text := Format('被%s引用',[GetUseCase('T',DisplayPath,NowDocDir)]);
+ StatusBar1.Panels[2].Text := Format(_Msg('被%s引用'),[GetUseCase('T',DisplayPath,NowDocDir)]);
if FLoanDoc_Enable = 'Y' then
begin
diff --git a/CB_IMGPSScanImp.pas1 b/CB_IMGPSScanImp.pas1
new file mode 100644
index 0000000..c73b15b
--- /dev/null
+++ b/CB_IMGPSScanImp.pas1
@@ -0,0 +1,16158 @@
+unit CB_IMGPSScanImp;
+
+{$WARN SYMBOL_PLATFORM OFF}
+
+interface
+uses
+ EnScan, { for Scanner }
+ EnDiGrph, { for TDibGraphic }
+ EnMisc, { for MinFloat }
+ EnTifGr, { for TTifGraphic }
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ ActiveX, AxCtrls, CB_IMGPSScan_TLB, StdVcl, VCLUnZip, VCLZip, Encryp,
+ ExtCtrls, ComCtrls, Menus, StdCtrls, Gauges, EnImgScr, PJMenuSpeedButtons,
+ Buttons, ImgList, SBSimpleSSL, SBHTTPSClient, SBWinCertStorage, SBX509,
+ SBCustomCertStorage, SBUtils,mpsBarco,BarcodesFinder,HTTPApp,ErrList,
+ Xmltool,inifiles,printers,IdHashMessageDigest, idHash, LogFile,ShellApi,
+ SBSocket;
+
+var
+ Ch_WriteNote : Boolean;
+ RejectCase : Boolean;
+ ErrIndex : Integer;
+
+ //*****預設區*****//
+ Def_DeviceDelete : Boolean; //空白頁刪除啟動
+ Def_DeviceDeleteSize : Integer; //空白頁Size
+ Def_ScannerReverse : Boolean; //是否需反相
+ Def_BoardClear : Boolean; //是否清黑邊
+ Def_ScanDpi : Integer; //掃瞄DPI
+ Def_ScanDuplex : Boolean; //是否雙面掃瞄
+ Def_ScanRotate : Integer; //掃瞄時旋轉角度
+ Def_ScanDeskew : Boolean; //是否傾斜矯正
+ Def_ScanBright : Integer; //亮度
+ Def_ScanContrast : Integer; //對比
+ Def_ScanImgShowMode : Integer; //0:清楚影像 1:不清楚影像 2:不顯示
+ Def_ScanImgSetUse : Boolean; //是否使用亮度對比設定
+ //*****預設區*****//
+
+Const
+ ISBName = 'PreViewISB';
+
+{獲取自身版本號所需要 }
+type
+ TVersionLanguage = (vlArabic, vlBulgarian, vlCatalan, vlTraditionalChinese,
+ vlCzech, vlDanish, vlGerman, vlGreek, vlUSEnglish, vlCastilianSpanish,
+ vlFinnish, vlFrench, vlHebrew, vlHungarian, vlIcelandic, vlItalian,
+ vlJapanese, vlKorean, vlDutch, vlNorwegianBokmel, vlPolish,
+ vlBrazilianPortuguese, vlRhaetoRomanic, vlRomanian, vlRussian,
+ vlCroatoSerbian, vlSlovak, vlAlbanian, vlSwedish, vlThai, vlTurkish,
+ vlUrdu, vlBahasa, vlSimplifiedChinese, vlSwissGerman, vlUKEnglish,
+ vlMexicanSpanish, vlBelgianFrench, vlSwissItalian, vlBelgianDutch,
+ vlNorwegianNynorsk, vlPortuguese, vlSerboCroatian, vlCanadianFrench,
+ vlSwissFrench, vlUnknown);
+
+const LanguageValues: array[TVersionLanguage] of Word = ($0401, $0402, $0403,
+ $0404, $0405, $0406, $0407, $0408, $0409, $040A, $040B, $040C, $040D,
+ $040E, $040F, $0410, $0411, $0412, $0413, $0414, $0415, $0416, $0417,
+ $0418, $0419, $041A, $041B, $041C, $041D, $041E, $041F, $0420, $0421,
+ $0804, $0807, $0809, $080A, $080C, $0810, $0813, $0814, $0816, $081A,
+ $0C0C, $100C, $0000);
+{獲取自身版本號所需要 end}
+
+
+type
+ TScanMode = (smNew, smReplace, smInsert, smSample, smRTS);
+ TpScanInfo = ^TScanInfo;
+ TScanInfo = record
+ MultiPage : Boolean;
+ { supplementary info when MultiPage is True }
+ Graphic : TTiffGraphic;
+ Stream : TFileStream;
+ ImageCount : LongInt;
+ end;
+ TOMRErrInfo = record
+ Display : Boolean; //是否顯示
+ Ignore : Boolean; //可否刪除
+ Info : String;
+ Mode : String;
+ end;
+ TScrollRec = Record
+ HScroll : Integer;
+ VScroll : Integer;
+ Rate : Single;
+ end;
+
+type
+ TCB_IMGPSScanX = class(TActiveForm, ICB_IMGPSScanX)
+ Panel1: TPanel;
+ TransBtn: TBitBtn;
+ Panel21: TPanel;
+ ViewModeBtn: TPJMenuSpeedButton;
+ Button2: TButton;
+ Button1: TButton;
+ OptionBtn: TBitBtn;
+ SelectScanBtn: TBitBtn;
+ NextPageBtn: TBitBtn;
+ PrePageBtn: TBitBtn;
+ FC6: TBitBtn;
+ FC5: TBitBtn;
+ FC4: TBitBtn;
+ FC3: TBitBtn;
+ FC2: TBitBtn;
+ FC1: TBitBtn;
+ FC0: TBitBtn;
+ Panel23: TPanel;
+ PJLinkedMenuSpeedButton2: TPJLinkedMenuSpeedButton;
+ NewScanBtn: TBitBtn;
+ AddScanBtn: TBitBtn;
+ Panel4: TPanel;
+ Panel2: TPanel;
+ Splitter1: TSplitter;
+ Panel3: TPanel;
+ Label7: TLabel;
+ Panel6: TPanel;
+ CB1: TCheckBox;
+ ScanDuplexCB: TCheckBox;
+ ScanFlatCB: TCheckBox;
+ Panel18: TPanel;
+ Panel12: TPanel;
+ Panel7: TPanel;
+ Panel9: TPanel;
+ Shape1: TShape;
+ ImageScrollBox1: TImageScrollBox;
+ imgp8: TPanel;
+ lb8: TLabel;
+ ISB8: TImageScrollBox;
+ imgp7: TPanel;
+ lb7: TLabel;
+ ISB7: TImageScrollBox;
+ imgp6: TPanel;
+ lb6: TLabel;
+ ISB6: TImageScrollBox;
+ imgp5: TPanel;
+ lb5: TLabel;
+ ISB5: TImageScrollBox;
+ imgp4: TPanel;
+ lb4: TLabel;
+ ISB4: TImageScrollBox;
+ imgp3: TPanel;
+ lb3: TLabel;
+ ISB3: TImageScrollBox;
+ imgp2: TPanel;
+ lb2: TLabel;
+ ISB2: TImageScrollBox;
+ imgp1: TPanel;
+ lb1: TLabel;
+ Memo1: TMemo;
+ Display1: TMemo;
+ Panel22: TPanel;
+ Panel8: TPanel;
+ Label2: TLabel;
+ Gauge1: TGauge;
+ ScrollBar1: TScrollBar;
+ Panel10: TPanel;
+ PageLV: TListView;
+ StatusBar1: TStatusBar;
+ ImageList4: TImageList;
+ ImageList3: TImageList;
+ ImageList1: TImageList;
+ PopupMenu2: TPopupMenu;
+ mode1: TMenuItem;
+ mode2: TMenuItem;
+ mode3: TMenuItem;
+ mode4: TMenuItem;
+ N51: TMenuItem;
+ ImageList2: TImageList;
+ OpenDialog1: TOpenDialog;
+ PopupMenu3: TPopupMenu;
+ PM301: TMenuItem;
+ PM302: TMenuItem;
+ PM303: TMenuItem;
+ Timer1: TTimer;
+ TomEncryption1: TTomEncryption;
+ SaveDialog1: TSaveDialog;
+ Timer2: TTimer;
+ VCLZip1: TVCLZip;
+ PopupMenu4: TPopupMenu;
+ PM401: TMenuItem;
+ PM402: TMenuItem;
+ PM403: TMenuItem;
+ PM404: TMenuItem;
+ ElWinCertStorage: TElWinCertStorage;
+ ElMemoryCertStorage: TElMemoryCertStorage;
+ Panel5: TPanel;
+ AddCredit1RG: TRadioGroup;
+ Panel11: TPanel;
+ SampleScanBtn: TBitBtn;
+ WNoteBtn: TBitBtn;
+ PopupMenu1: TPopupMenu;
+ PM101: TMenuItem;
+ N12: TMenuItem;
+ PM102: TMenuItem;
+ MenuItem1: TMenuItem;
+ PM103: TMenuItem;
+ PM104: TMenuItem;
+ N7: TMenuItem;
+ PM106: TMenuItem;
+ PM107: TMenuItem;
+ PM108: TMenuItem;
+ PM109: TMenuItem;
+ PopupMenu5: TPopupMenu;
+ PM501: TMenuItem;
+ PM502: TMenuItem;
+ PM503: TMenuItem;
+ PM504: TMenuItem;
+ N5: TMenuItem;
+ PM505: TMenuItem;
+ PM506: TMenuItem;
+ N29: TMenuItem;
+ PM510: TMenuItem;
+ PM509: TMenuItem;
+ PM507: TMenuItem;
+ N15: TMenuItem;
+ PM508: TMenuItem;
+ ExportBt: TButton;
+ ImportBt: TButton;
+ CheckCaseBtn: TBitBtn;
+ DenialTimeLb: TLabel;
+ Panel14: TPanel;
+ ScrollBox1: TScrollBox;
+ Label1: TLabel;
+ Button3: TButton;
+ Panel15: TPanel;
+ Button4: TButton;
+ PopupMenu6: TPopupMenu;
+ PM602: TMenuItem;
+ PM601: TMenuItem;
+ PM605: TMenuItem;
+ PM603: TMenuItem;
+ PM604: TMenuItem;
+ N8: TMenuItem;
+ Panel16: TPanel;
+ SpeedButton3: TSpeedButton;
+ SpeedButton14: TSpeedButton;
+ SpeedButton15: TSpeedButton;
+ SpeedButton16: TSpeedButton;
+ SpeedButton17: TSpeedButton;
+ SpeedButton18: TSpeedButton;
+ SpeedButton19: TSpeedButton;
+ SpeedButton20: TSpeedButton;
+ SpeedButton21: TSpeedButton;
+ SpeedButton22: TSpeedButton;
+ Edit1: TEdit;
+ PM110: TMenuItem;
+ Image1: TImage;
+ UseOldCaseLb: TLabel;
+ PM111: TMenuItem;
+ SmoothCB: TCheckBox;
+ ISB_BW: TImageScrollBox;
+ N1: TMenuItem;
+ N2: TMenuItem;
+ ISB1: TImageScrollBox;
+ Label3: TLabel;
+ LogFile1: TLogFile;
+ ScanGrayCB: TCheckBox;
+ AttFileGB: TGroupBox;
+ AttListBox: TListBox;
+ Panel20: TPanel;
+ AddAttFileLB: TLabel;
+ DelAttFileLB: TLabel;
+ Splitter2: TSplitter;
+ Panel17: TPanel;
+ TreeView1: TTreeView;
+ Panel13: TPanel;
+ PrtLb: TLabel;
+ CaseHelpBtn: TBitBtn;
+ HTTPSClient: TElHTTPSClient;
+ procedure ActiveFormCreate(Sender: TObject);
+ procedure Panel9Resize(Sender: TObject);
+ procedure ISB1Click(Sender: TObject);
+ procedure WNoteBtnClick(Sender: TObject);
+ procedure CaseHelpBtnClick(Sender: TObject);
+ procedure FC0Click(Sender: TObject);
+ procedure FC1Click(Sender: TObject);
+ procedure FC2Click(Sender: TObject);
+ procedure FC3Click(Sender: TObject);
+ procedure FC4Click(Sender: TObject);
+ procedure FC5Click(Sender: TObject);
+ procedure FC6Click(Sender: TObject);
+ procedure PrePageBtnClick(Sender: TObject);
+ procedure NextPageBtnClick(Sender: TObject);
+ procedure OptionBtnClick(Sender: TObject);
+ procedure SelectScanBtnClick(Sender: TObject);
+ procedure mode1Click(Sender: TObject);
+ procedure mode2Click(Sender: TObject);
+ procedure mode3Click(Sender: TObject);
+ procedure mode4Click(Sender: TObject);
+ procedure N51Click(Sender: TObject);
+ procedure ScrollBar1Change(Sender: TObject);
+ procedure ISB1EndScroll(Sender: TObject);
+ procedure ISB1ImageMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure ISB1ImageMouseMove(Sender: TObject; Shift: TShiftState; X,
+ Y: Integer);
+ procedure ISB1ImageMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure PM508Click(Sender: TObject);
+ procedure PM401Click(Sender: TObject);
+ procedure PM402Click(Sender: TObject);
+ procedure PM403Click(Sender: TObject);
+ procedure PM404Click(Sender: TObject);
+ procedure TreeView1Click(Sender: TObject);
+ procedure NewScanBtnClick(Sender: TObject);
+ procedure AddScanBtnClick(Sender: TObject);
+ procedure PageLVClick(Sender: TObject);
+ procedure PageLVKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
+ procedure PageLVMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure PM101Click(Sender: TObject);
+ procedure PM104Click(Sender: TObject);
+ procedure PM102Click(Sender: TObject);
+ procedure PM103Click(Sender: TObject);
+ procedure PM106Click(Sender: TObject);
+ procedure PM107Click(Sender: TObject);
+ procedure PM108Click(Sender: TObject);
+ procedure PM109Click(Sender: TObject);
+ procedure PM301Click(Sender: TObject);
+ procedure PM302Click(Sender: TObject);
+ procedure PM303Click(Sender: TObject);
+ procedure PM501Click(Sender: TObject);
+ procedure PM502Click(Sender: TObject);
+ procedure PM503Click(Sender: TObject);
+ procedure PM504Click(Sender: TObject);
+ procedure PM505Click(Sender: TObject);
+ procedure PM510Click(Sender: TObject);
+ procedure PM509Click(Sender: TObject);
+ procedure PM507Click(Sender: TObject);
+ procedure PopupMenu1Popup(Sender: TObject);
+ procedure PopupMenu4Popup(Sender: TObject);
+ procedure PopupMenu5Popup(Sender: TObject);
+ procedure SampleScanBtnClick(Sender: TObject);
+ procedure StatusBar1DblClick(Sender: TObject);
+ procedure ExportBtClick(Sender: TObject);
+ procedure ImportBtClick(Sender: TObject);
+ procedure HTTPSClientCertificateValidate(Sender: TObject;
+ X509Certificate: TElX509Certificate; var Validate: Boolean);
+ procedure ScanDuplexCBClick(Sender: TObject);
+ procedure CheckCaseBtnClick(Sender: TObject);
+ procedure Timer1Timer(Sender: TObject);
+ procedure Timer2Timer(Sender: TObject);
+ procedure TransBtnClick(Sender: TObject);
+ procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
+ procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
+ State: TDragState; var Accept: Boolean);
+ procedure TreeView1KeyUp(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+ procedure TreeView1MouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure ViewModeBtnMouseEnter(Sender: TObject);
+ procedure Button3Click(Sender: TObject);
+ procedure AddCredit1RGClick(Sender: TObject);
+ procedure CB1Click(Sender: TObject);
+ procedure Button4Click(Sender: TObject);
+ procedure ISB1Enter(Sender: TObject);
+ procedure TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,
+ Y: Integer);
+ procedure PM601Click(Sender: TObject);
+ procedure PopupMenu6Popup(Sender: TObject);
+ procedure PM604Click(Sender: TObject);
+ procedure PM605Click(Sender: TObject);
+ procedure SpeedButton3Click(Sender: TObject);
+ procedure SpeedButton14Click(Sender: TObject);
+ procedure SpeedButton15Click(Sender: TObject);
+ procedure SpeedButton16Click(Sender: TObject);
+ procedure SpeedButton17Click(Sender: TObject);
+ procedure SpeedButton18Click(Sender: TObject);
+ procedure SpeedButton19Click(Sender: TObject);
+ procedure SpeedButton20Click(Sender: TObject);
+ procedure SpeedButton21Click(Sender: TObject);
+ procedure SpeedButton22Click(Sender: TObject);
+ procedure ActiveFormKeyUp(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+ procedure PM110Click(Sender: TObject);
+ procedure PM602Click(Sender: TObject);
+ procedure PrtLbClick(Sender: TObject);
+ procedure Panel1DblClick(Sender: TObject);
+ procedure Panel11DblClick(Sender: TObject);
+ procedure UseOldCaseLbClick(Sender: TObject);
+ procedure PM111Click(Sender: TObject);
+ procedure ImageScrollBox1NewGraphic(const Graphic: TDibGraphic);
+ procedure SmoothCBClick(Sender: TObject);
+ procedure N1Click(Sender: TObject);
+ procedure TreeView1MouseEnter(Sender: TObject);
+ procedure ScrollBox1MouseEnter(Sender: TObject);
+ procedure ScanGrayCBClick(Sender: TObject);
+ procedure AddAttFileLBClick(Sender: TObject);
+ procedure DelAttFileLBClick(Sender: TObject);
+ procedure AttListBoxDblClick(Sender: TObject);
+ procedure AttListBoxClick(Sender: TObject);
+ procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure HTTPSClientRedirection(Sender: TObject; const OldURL: string;
+ var NewURL: string; var AllowRedirection: Boolean);
+ private
+ { Private declarations }
+ HotKeyId1,HotKeyId2,HotKeyId3,HotKeyId4 :Integer;
+
+ ////////傳入參數/////////
+ FUrl : String;
+ FCaseID : String;
+ FMode : String; //NSCAN:新件;ESCAN:修改 20170306 DSCAN:被配合待掃瞄清單使用
+ FModeName : String;
+ FWork_no : String;
+ FUserID : String;
+ FUserName : String;
+ FUserUnit : String;
+ FData : String;
+ FVerify : String;
+ FReWrite : String;
+ FLanguage : String;
+ FLoanDoc_Value : String; //新增授信卷的值
+ FLoanDoc_Enable : String; //新增授信卷是否可異動
+ FUseProxy : String; //是否使用Proxy
+ FC_DocNoList : String; //外面傳來要新增的文件編號
+ FC_DocNameList : String; //外面傳來要新增的自訂文件
+ FFixFileList : String; //要鎖住的檔名
+ FIs_In_Wh : String; //是否只顯示入庫文件 (Y:只顯示入庫 N:只顯示非入庫 空白:都顯示)
+ FOldCaseInfo : String; //舊件資訊 CaseID_year[tab]CaseID_year
+ FPrintyn : String; //是否可列印
+ FIs_OldCase : String; //是否是舊案第一次進入
+ FCustDocYN : String; //是否可自訂文件
+ //20170222 新增
+ FImgDPI:integer;//DPI 依業務別決定 150~~1200 預設300
+ FScanColor:integer;///掃瞄色彩 依業務別決定 0 :黑白 1:灰階 2:彩色 預設黑白
+ FFileSizeLimit:integer;//匯入單一檔案大小限 依業務別決定 以KB為單位 預設5*1024kb
+ FCaseNoLength:integer;//案件編號長度檢查 依業務別決定 無預設 一定要傳入
+ FImgDelete:string; // Y/N 有權限可在補件時刪除影像
+ FIsExternal:string;//Y/N
+ FCheck_main_form:string; //Y/N
+ FWH_category:string; //Y/N Y是歸類時有區分入庫非入庫文件 N 是不區分
+ ////////傳入參數///////
+
+ //********Http參數********
+ HttpErrStr : String; //錯誤訊息
+ //********Http參數********
+
+ //********ini參數********
+ DeviceDelete : Boolean; //空白頁刪除啟動
+ DeviceDeleteSize : Integer; //空白頁Size
+ ScannerReverse : Boolean; //是否需反相
+ BoardClear : Boolean; //是否清黑邊
+ ScanDpi : Integer; //掃瞄DPI
+ ScanDuplex : Boolean; //是否雙面掃瞄
+ ScanRotate : Integer; //掃瞄時旋轉角度
+ ScanDeskew : Boolean; //是否傾斜矯正
+ ScanBright : Integer; //亮度
+ ScanContrast : Integer; //對比
+ ScanImgShowMode : Integer; //0:清楚影像 1:不清楚影像 2:不顯示
+ ScanImgSetUse : Boolean; //是否使用亮度對比設定
+
+ //********ini參數********
+ ScanColor : TImageFormat;
+
+ //********時間********
+ ServerDate : String;
+ ServerTime : String;
+ Balance : Longint; //local跟server的時間差
+ ScanDenialTime : String; //停止進件時間
+ //********時間********
+ ScanDenialHint : String; //掃描顯示提醒字串
+
+ //********路徑********
+ ScanPath : String; // SpecifyDir\Workid\userunit\mode
+ ImagePath : String; // SpecifyDir\Workid\userunit\mode
+ ImageSavePath : String; // ImagePath\
+ ScaniniPath : String; // SpecifyDir\Workid\userunit\
+ LngPath :String; //多國語言檔目錄
+ CheckXmlPath : String; //檢核用的Xml存放目錄
+ SitePath : String; //登打位置(切簽名用)
+ SamplePath : String; //範本目錄
+ TransPath : String; //檔案上傳的路徑(補充件會多一層目錄)
+ //********路徑********
+ ScanSaveFilename : String; //掃瞄的檔名
+ ScanCaseno : String; //掃瞄時的案號
+ ScanDocDir : String; //掃描時的文件代號目錄
+ //********清單區********
+ Doc_Inf_List : TStringList; //Doc_Inf 清單
+ DM_FORM_INF_List :TstringList; //DM_FORM_INF 清單
+ FORM_INF_List : TStringList; //FORM_INF的清單
+ CHECK_RULE_INF_List : TStringList; //CHECK_RULE_INF 清單
+ MEMO_INF_List : TStringList; //MEMO_INF 清單
+ WORK_INF_List : TStringList; //WORK_INF 清單
+ LASTEST_FORM_INF_List : TStringList; // LASTEST_FORM_INF 清單
+
+ FindResult : TStringList; //找SQLData的結果
+ CaseList : TStringList; //記錄掃瞄案件的順序
+ Context_DocnoList : TStringlist; //案件裡的Docno清單
+ CaseDocNoList : TStringlist; //案件裡的DocNo清單(不重複)
+ CaseDocNo_CopiesList : TStringlist; //案件裡的DocNo份數清單
+ ContextList : TStringlist; //案件裡的檔案清單
+ AttContextList : TStringlist; //案件裡的附加檔案清單
+ OMRFileList : TStringList; //要OMR檢核的文件(只檢查每種Form的第一頁)
+ Cust_DocNoList : TStringlist; //自行定義文件名稱
+ IN_WH_DocNoList : TStringlist; //入庫的文件清單
+
+ FormCode_PageSize : TStringList; //文件的預設大小 FormCode_Height_Width
+ DocNo_NeedDoc : TStringList; //有Docno時要相依的文件 DocNo_相依文件_相依文件
+ DocNo_NoDoc : TstringList; //有Docno時互斥的文件 DocNo_互斥文件_互斥文件
+ DocNo_VerinCase : TStringlist; //案件裡的DocNo+版本的清單
+
+ NoSaveBarCodeList : TStringlist; //不儲存的條碼清單
+ FormID_List : TStringlist; //FormID 清單 20130403 因為原FormCode2Docno會很慢..把FormID抽出來
+ DocNo_List : TStringlist; //DocNo 清單 20130403 因為原FormCode2Docno會很慢..把DocNo抽出來
+ NowShowFileList : TStringlist; //目前顯示的影像清單
+ NowSelectFileList : TStringlist; //目前被點選的影像清單
+ GuideFormIDList : TStringlist; //要當導引頁表單清單
+ DivPageFormIDList:TStringlist; //要當分案頁表單清單
+ LastInitFormidList:TStringList;
+ LastAddFormidList:TstringList;
+ SampleFormIDList:TStringList; //20170627 已存在範本的formid
+ ExistImgList:TStringList; //20170724 已經存在的影像list for ESCAN //Img的完整路徑
+ reSizeExistImgList:TstringList; //20171012被縮放的舊圖MD5存入
+ //********清單區********
+
+ //********顯示區********
+ NowCaseno : String; //目前顯示的案件編號
+ NowDocNo : String; //目前的文件編號
+ NowDocDir : String; //目前的文件目錄
+ NowFormCode : String; //目前顯示的表單編號
+ NowFormName : String; //目前顯示的表單名稱
+ NowPage : Integer; //目前點選的頁碼
+ DisplayPath : String; //目前顯示的目錄
+ //********顯示區********
+
+ //******索引資料*********
+ Case_loandoc : String; //是否新增授信卷
+ //******索引資料*********
+
+ //********十字定位點資訊********
+ UpLPoint : Tpoint; //左上方的十字點
+ UpRPoint : Tpoint; //右上方的十字點
+ DownLPoint : Tpoint; //左下方的十字點
+ DownRPoint : Tpoint; //右下方的十字點
+ Point_Width : String; //十字點的寬
+ Point_Height : String; //十字點的高
+ //********十字定位點資訊********
+
+ CaseIDLength : Integer; //案件編號長度
+ FormIDLength : Integer; //FormID長度
+ DocNoLength : Integer; //Docno長度
+
+ PEFileName : String; //掃描時的檔名
+
+ ISB : TImageScrollBox;
+ ScanInfo : TScanInfo;
+ TwainShowUI : Boolean;
+ MpsBarcodeinf : TMpsBarcodeinf;
+ ScanMode : TScanMode;
+ Mpskey : String;
+ Seg : Integer; //顯示的邊界值
+ VMode : Integer; //顯示的index
+ NowClick : Integer; //目前點到的按鈕功能Index
+ ScanIP : String; //掃瞄端的IP
+ DisplayISB : TImageScrollBox; //被點到的影像
+ SelectISB : TImageScrollBox; //被點到的縮圖
+ SelectPage : Integer; //被點到的頁數
+ NewTreeNode,MyTreeNode1,MyTreeNode2,MyTreeNode3 : TTreenode;
+ InitialOk : Boolean; //資訊載入是否完成
+ ShowText : String; //DataLoading時要秀出的訊息
+ Ext : String; //附檔名 .tif .jpg
+ SafePixel : Integer; //OMR容忍誤差值點數
+ OMRErrInfo : Array[1..11] of TOMRErrInfo; //檢核的方式及訊息
+ ScrollRec : Array[1..8] of TScrollRec; //瀏覽窗的Scroll記錄
+ RecHozPos,RecVerPos : Integer; //記錄MPSViewX1的ScrollBar位置
+ ReczoomPercent : Single;
+ SortMode : Boolean;
+ PreMytreeNode2Name:String;
+ HS,VS : Integer;
+ iRate : Single;
+ Bt : Integer; //去直線時橫線判斷的容忍值
+ BarCodeRotate : Integer; //條碼要轉的角度
+ HaveAppDoc : Boolean; //補全時是否有補入要保書
+ PageLVclear : Boolean;
+ CaseCount,PageCount : Integer; //總案件量及總頁數
+ Item : TMenuItem;
+ SampleAnchorMode : String; //範本掃瞄十字線的模式 NONE:無;ANCHOR:十字;FRAME:邊框
+ DownImgStatus : String; //下載影像的狀態(NO_DATA:沒資料;NO_FILE:沒影像)
+ TransForm_Field : String; //要用OMR勾選確認是否轉換FORMID的欄位名稱
+ NowWork_No : String; //現在的作業別
+ CropBarcode : String; //要切影像的條碼
+ Has_Authorize :String; //是否有授權書影像
+ AttName : String; //未歸類目錄名稱
+ NowGuideFormID : String;
+ NowDivPageFormID:String;
+
+ FirstDocDir : String;
+ FMaxUploadSize:String;// 上傳zip大小限制
+ FJpgCompression:integer;// 20171211 jpg to tif 的壓縮率
+
+ Draging : Boolean;
+ MDown : Boolean; //20181210 用來判斷滑鼠右鍵要Popupmenu是否有MouseDonw發生
+
+ FEvents: ICB_IMGPSScanXEvents;
+
+ procedure HotKeyDown (var Msg : TMessage);message WM_HOTKEY;
+ Procedure InitialLanguage(Sender: TObject); //畫面載入多國語言
+ //Function _Msg(S:String):String;
+
+ //*********SQL相關************
+ Procedure SetSQLData(ColumeStr:String;FromList,ToList:TStringlist); //把SQL值塞入
+ Function GetSQLData(TableList:TStringlist;Colname:String;colNo:Integer):String; //依欄位及索引取值
+ Function FindSQLData(TableList:TStringlist;ColumeStr,KeyColumeStr,KeyStr:String;ColNo:Integer;Var ResultList:TStringlist):Boolean; //找指定的資料
+ Function GetFindResult(Col:String):String;
+ //*********SQL相關************
+
+
+ //*******轉換區*********
+ Function FindDivFormCode(FormCode:String):Boolean; //找有沒有分案的條碼
+ Function FormCode2FormName(CaseID,FormCode:String):String; //用FormCode轉成文件名稱
+ Function FormCode2FileName(FormCode:String;List:TStrings):String; //用FormCode找出檔名(第一頁)
+ Function FileName2FormCode(FileName:String):String; //從檔名取出FormCode
+ Function FileName2FormName(CaseID,FileName:String):String; //從檔名取出文件名稱
+ Function FileName2ScanPage(FileName:String):Integer; //從檔名取出掃瞄頁數
+ Function FileName2NoQuene_Filename(FileName:String):String; //取出沒有序號的檔名
+ Function FileName2Index(FileName:String):Integer; //從檔名取出在ContextList的序號
+ Function FileName2NowDcoNo(FileName:String;CtList,DNList:TStrings):String; //從檔名取出歸屬的文件代號
+ Function FormCode2DocNo(FormCode:String):String; //FormCode轉Docno
+ Function FormCode2Version(FormCode:String):String; //FormCode轉版本
+ Function FormCode2Page(FormCode:String):String; //FormCode轉文件頁數
+ Function DocNo2DocName(CaseID,DocNo:String):String; //Docno轉Doc名稱
+ Function DocNo2FileName(DocNo:String;List:TStrings):String; //用DocNo找出檔名(第一頁)
+ Function FormCode2WorkNo(FormCode:String):String; //用FormCode取出作業別
+ Function DocNo2WorkNo(DocNo:String):String; //用DocNo取出作業別
+ Function DocNo2DocNoDir(Path,DocNo:String):String; //DocNo轉成DocNo(份數)目錄
+ Function DocNoDir2DocNo(DocNoDir:String):String; //DocNo(份數)目錄轉成DocNo
+ Function DocNoDir2Index(Path,DocNoDir:String):Integer; //DocNo(份數)目錄轉成index
+
+ Function DocNoNeedDiv(DocNo:String):Boolean; //是否是需分份數的文件代號
+ //Function CaseNo2DocNo(CaseNo:String):TStringList;
+
+ Function CaseNode2Info(Node:TTreeNode;Mode:Char):String; //案件Node取案件編號 Mode: I:Caseno;P:Page
+ Function DocNode2Info(Node:TTreeNode;Mode:Char):String; //文件Node取文件代號 Mode: I:Docno;N:Docname;P:Page;G:Group
+ Function FormNode2Info(Node:TTreeNode;Mode:Char):String; //表單Node取表單代號 Mode: I:FormID;N:FormName;P:Page
+ //*******轉換區*********
+
+ Procedure PriorPage(Page:Integer); //上一頁
+ Procedure NextPage(Page:Integer); //下一頁
+
+ Function DocNoExistsinTree(CaseNode:TTreeNode;DocNo:String):Boolean; //DocNo是否己存在樹裡
+ Function DocnoNeedGroup(DocNo:String):Boolean; //傳入的DocNo是否需分組
+
+ function GetSiteOMR(FileName, Site: String;bt: Integer): Integer;
+ Function FindISB2View(Vmode:Integer):TImageScrollBox; //找空的ISB來顯示
+ Procedure R_W_ScanIni(Mode:Char); //'R'讀取;'W'寫入
+ Procedure GetDefScanIni; //取得掃瞄的預設值
+ procedure DesableImage;
+ procedure EnableImage(v:integer;Sender : TObject);
+ Procedure ViewMouseMode(v:Integer);
+ Procedure GoViewMode;
+ Procedure DisplayMode(index,H_Count,W_Count:Integer;BasePanel:TPanel);
+ Function GetServerDate : Boolean; //取主機時間
+ Function GetSetInf1 : Boolean; //取系統設定資訊mode1 DOC_INF
+ Function GetSetInf2 : Boolean; //取系統設定資訊mode2 DM_FORM_INF
+ Function GetSetInf3 : Boolean; //取系統設定資訊mode3 FORM_INF
+ Function GetSetInf4 : Boolean; //取系統設定資訊mode4 CHECK_RULE_INF
+ Function GetSetInf5 : Boolean; //取系統設定資訊mode5 MEMO_INF
+ Function GetSetInf6 : Boolean; //取系統設定資訊mode6 WORK_INF
+ Function GetSetInf7 : Boolean; //取系統設定資訊mode7 LASTESTFORM_INF
+ Procedure SetFormID_DocNo; //將FormID及Docno抽出來另存入list裡
+ Procedure SetIn_WH_DocNo; //將要入庫的DocNo抽出來另存入list裡
+
+ Procedure DataLoading(Loading,UseTimer:Boolean); //資料載入中要停止點選的動作
+ procedure ClearView(stkv:Integer); //清除瀏覽窗的影像
+ Function DrawDocItem2(CaseNode : TTreenode;Caseno:String):Boolean; //畫出文件名稱的Tree
+
+ Procedure initkscan; //檢查掃描器的功能
+ procedure LoadImgFile; //載入案件
+ procedure LoadImgFile1; //載入案件
+ procedure LoadAttFile(CaseID:String); //載入附加檔案
+ Procedure DistinctFormCode(CaseID:String); //案件裡的FormCode取出第一頁
+ Function OMRCheckCase(CaseID:String):Boolean; //OMR檢核
+ Procedure OMRErr2ini(CaseID,Reason,FileName,Site,RelaFileName,RelaSite,Anchor,Anchor1:String;Del,Ingnore,Display:Boolean); //OMR檢核失敗寫入ini
+ Procedure OMRErrini2List(CaseID:String;ErrlistForm : TErrlistForm); //OMR檢核失敗從ini寫入ListView
+ Function DownLanguage:Boolean; //下載多國語言檔
+ Function FindMpsView(Vmode:Integer):TImageScrollBox;
+ Function CaseAsk(CaseID:String):Integer; //詢問是否可上傳 (-1:失敗;0:可以;1:不行;)
+ Function CaseComplete(Path,CaseID:String;MainCase:Boolean):Boolean; //通知傳送完成
+ Function GetCaseFormID(Path:String):String; //取案件的FormID
+ Procedure CreateFormID_FormName(Path,CaseID:String); //產生FormID_FormName.dat
+ Procedure CreateDocNo_DocName(Path,CaseID:String); //產生DocNo_DocName.dat
+ Procedure CreateIn_WH(CaseID:String); //產生In_WH.dat
+ Function CreateDocNo_Info(CaseID:String):String; //產生保管袋文件 DocNo[tab]份數[tab]總頁數[tab]是否異動[換行]DocNo[tab]份數[tab]總頁數[tab]是否異動
+ Function CreateCustDocNo_Info(CaseID:String):String; //產生自訂文件 DocName[tab]份數[tab]總頁數[tab]是否異動[#13#10]DocName[tab]份數[tab]總頁數[tab]是否異動
+ //Function CreateCustDocNo_Info(path,CaseID:String):String; overload
+ Function CreateAttach_Info(CaseID:String):String; //產生是否有Attach Y:有 N:沒有
+ Function CreateDocnoFrom_Info(CaseID:String):String; //產生被引進的保管袋文件資訊 Docno[tab]份數[tab]案件編號#13#10Docno[tab]份數[tab]案件編號
+ Function CreateCustDocNoFrom_Info(CaseID:String):String; //產生被引進的自定文件資訊 Docno[tab]份數[tab]案件編號#13#10Docno[tab]份數[tab]案件編號
+
+ Function GetDocNoEdit(CaseID,DocNo,DocName:String):String; //取出DocNo是否被異動 (Y/N)
+ Function GetDocNo_Count(Path,DocNo:String):Integer; //取出文件份數
+ Function GetDocNo_Page(Path,DocNo:String):Integer; //取出文件總頁數
+ Function FormIDExists(FormCode:String;CheckDate:Boolean;index:Integer):Boolean; //檢查FormID是否存在及是否要檢查啟用停用日期
+ Function Case_DocNoExists(CaseID,Docno:String):Boolean; //Docno是否存在案件裡
+ Procedure ReSortFileName_New(Path:String); //檔名重新排序
+ Procedure ReSortFileName(Path:String); //檔名重新排序
+ Procedure ReSortFileName2Scanlist(Path:String); //檔名重新排序給Scanlist.dat
+ Function GetOMRCheckSet:Boolean; //下載OMR檢核XML檔
+ Function GetKeyinSet : Boolean; //取登打設定
+ Procedure CheckRule2OMRErrInfo; //檢核規則填入OMRErrINFo Record
+ Procedure ReNameContext(Path,OldName,NewName:String);
+ Procedure DeleteImageFile(Path,FileName,CaseID:String); // 刪除檔案
+ Procedure DeleteFormCodeFile(CaseID,DocDir,FormID:String); //刪除指定FormID文件
+ Function DeleteDocNoFile(Path,DocNo:String):Boolean; //刪除指定DocNo文件
+ Procedure DeleteShowFile(Path:String); //刪除顯示中的影像
+ Function GetDataDocNoPage(MainDocNo,MainVersion:String):Integer; //取記錄的文件_版本頁數
+ Function CheckCaseDocNoPage(CaseID,DocNo,Version:String;Pages:Integer):Integer; //檢查案件裡的文件_版本頁數
+ Function FindFormCodePages(CaseID,FormCode:String):Integer; //計算案件裡FormID的頁數
+ Function GetDataFormCodePages(FormCode:String):Integer; //取記錄的FormcID的頁數
+ Procedure CaseReSize(CaseID:String); //案件的影像縮放
+ Procedure ImageReSize_FormID(CaseID,FileName:String); //依十字定位點做縮放
+ Procedure ImageReSize_tmp(FormID,FileName:String); //依十字定位點做縮放(暫存檔)
+ Function TransCaseID(Path,CaseID:String;MainCase:Boolean):Boolean; //傳送案件
+ Procedure NewTreeNodeRefresh;
+ Procedure MyTreeNode1Refresh;
+ Procedure MyTreeNode2ReFresh(CaseID:String);
+ Procedure MyTreeNode3ReFresh(CaseID:String);
+ Function Node2DocNo(Node2:TTreeNode):String; //MyTreeNode2取DocNo出來
+ Function Node3DocNo(Node3:TTreeNode):String; //MyTreeNode3取DocNo出來
+ Function Node3FormID(Node3:TTreeNode):String; //MyTreeNode3取FormCode出來
+ Function GetNode2Name(Node2:TTreeNode):String; //取MyTreeNode2的識別字出來(記之前點選用)
+ //Function Down_Replace_Img(SPAth,DPath,CaseID:String):Boolean;
+ Function Down_Img(Path,CaseID:String):Boolean;
+ Function GetNoNameCase(Path:string):String; //取未配號XXXX
+ Procedure CaseResort(Path:String); //案件的檔案重新排序(次文件依Docno挑)
+ Procedure CaseResort2Scanlist(Path:String); //案件的檔案重新排序給scanlist(次文件依FormID排)
+ Procedure DistinctDocinCase(Path:String); //列出案件裡的Docno_版本
+ Procedure DistinctDocNoinCase(Path:String); //列出案件裡的Docno
+ Procedure ClearErrini(CaseID:String;CaseNode:TTreeNode); //清掉檢核檔案
+ Procedure SetCaseList(Mode:Char;Index:Integer;text:String); //'A:加入,I:插入,D:刪除,E:修改'
+ Procedure SetDocNoList(Mode:Char;Index:Integer;CaseNo,DocDir,Copies:String); //'A:加入,I:插入,D:刪除,E:修改'
+ Procedure SetContextList(Mode:Char;Index:Integer;CaseNo,DocDir,FileName:String); //'A:加入,I:插入,D:刪除,E:修改'
+ Procedure SetAttContextList(Mode:Char;Index:Integer;CaseNo,FileName:String); //'A:加入,I:插入,D:刪除,E:修改'
+
+
+ Function checkCaseOMRDone:Boolean; //檢查案件是否完成OMR檢核
+ Function CheckCaseID_OK:Boolean; //檢查是否有未配號的案件
+ Procedure CreateEmptyCase(Path,CaseID:String); //產生空白案號(重掃件用)
+ Procedure InitScrollRec; //初始化影像Scroll記錄
+ Procedure GetScrollData(ISB:TImageScrollBox;Var HS,VS:Integer;Var iRate:Single); //取影像Scroll記錄
+ Procedure SetScrollData(ISB:TImageScrollBox;HS,VS:Integer;iRate:Single); //寫影像Scroll記錄
+ Procedure FormIDReplace(CaseID,DocDir,OldFormID,NewFormID:String); //指定FormID更換成新的FormID
+ Procedure ShowFileReplace(Path,NewFormID:String);//顯示的影像換成新的FormID
+ Procedure PageReplaceFormID(Path,NowFormID,NewFormID:String); //選取頁更換FormID
+ Function ModeNeedCheck(OMRMode,ScanMode:String):Boolean; //掃瞄模式是否要做檢核
+ procedure WMMOUSEWHEEL(var message: TWMMouseWheel); message WM_MOUSEWHEEL;
+ Function GetInputMask:String; //取得輸入的保單號碼
+ Function GetCasePage(Path,CaseID:String):Integer;
+ Function GetFormIDPage(FileList:TStringlist;FormID:String):Integer;
+ Procedure SetFile2Case(CaseID,FileName:String);
+ Procedure WriteResize(ImgName,TxtName:String); //產生Resize.dat
+ Function GetCase_PageCount(var CaseCount,PageCount:Integer):Boolean; //取出案件的數量及頁數 ID為空值時為取所有的
+ Function BarCode2FormID : String; //Barcode依規則轉成FormID
+ Function BarCode2CaseID : String; //Barcode依規則轉成CaseID
+ Procedure WriteCaseIndex(Path:String);
+ Procedure ReadCaseIndex(Path:String);
+ Procedure ClearCaseIndex;
+ Procedure GetSelectImageFile;
+ Function GetDocNoDir(Path,DocNo:String):String; //取出目前DocNo的份數
+ Function CheckFormIDExists(DocNoNode:TTreeNode;FormID:String):Boolean; //檢查FormID是否存在文件裡
+
+ Procedure ZipMainFile(SoPath,DePath,ZipName:String); //壓縮影像檔
+ Procedure ZipMaskFile(SoPath,MarkPath,DePath,ZipName:String); //壓縮遮罩影像檔
+ Procedure ParserPoint(S:String); //解析十字點的字串
+ Function CheckScanDenialTime:Boolean;
+ Function FormID2Anchor(FormID:String):String; //用FormID取出十字模式
+ Function Index2Anchor(Anchor:String):String; //十字模式 0->NONE;1->ANCHOR;2->FRAME
+ Function MemoInfoTransfer(Mode,Str:String;ID_S,Name_S:TStringlist):String; //註記代碼註記類別轉換 Mode 'ID':代碼轉名稱;'NAME':名稱轉代碼
+ Function GetFormatID(CaseID:String):String; //取出案件的FormatID
+ Function FindNoSaveBarCode : Boolean; //找是否有不要儲存影像的條碼
+ Function CheckAvailable:Boolean; //檢查是否可使用元件
+ Function Case2Mask(SoPath,DePath:String):Boolean;//產生遮罩影像
+ Function CheckNeedCrop(Graphic:TDibGraphic):Boolean; //是否是A3要切影像
+ Function GetNewCustomDocNo(Path,DocName:String):String; //取出未使用的自訂文件代號
+ Function GetCustomDocName(Path,DocNo:String):String; //取出自定文件名稱
+ Function GetCustomFormID(Path,DocNo:String):String; //取出自定文件FormID
+ Function GetCustomDocDir(Path,DocName:String):String; //取出自定文件DocDir
+ Function FindCustomDocName(Path,DocName:String):Boolean; //尋找自定文件名稱是否存在
+ Procedure DeleteCustomDocDir(Path,DocNo:String); //刪除自定文件DocNo
+ Function CheckFormID_Prt(FormID:String):Boolean; //傳入的FormID是否預設列印
+ procedure PrintImg(FileName, LoginID, Datetime,Path: WideString);
+ Function FindLastestDocDir(CaseID,DocNo:String):String; //找出最新的DocDir
+ Procedure Create_Cust_DocDir(CaseID:String); //產生外面傳入的文件代號及自定文件
+ Procedure OldCasetoNewCase(CaseID:String); //將舊案份數轉成新規則
+ Procedure ErrFormtoCurrentForm(CaseID,EFormID,CFormID:String);//將舊案的錯誤FormID改正確的FormID
+ Procedure SetRecordEditedDocDir(Mode:Char;CaseID,DocDir:String); //記錄被異動的文件目錄 'A:加入D:刪掉'
+ Function GetDocDir_Page(CaseID,DocDir:String):Integer; //取得DocDir的頁數
+ Function Path2DocDir(Path,CaseID:String):String;
+ Function GetDocNo_IS_WH(DocNo:String):Boolean; //DocNo是否為入庫文件
+ Procedure SortDocDir_FormID(CaseID,DocDir:String); //將DocDir裡的文件編號排序
+ Procedure GotoAttach(OldLevel:Integer);
+ Function DocNoIs_In_WH(DocNo:String):Boolean; //DocNo是否為入庫文件
+ Procedure CreateCaseNeedData(Path:String); //先做影像截取會少二個文字檔,產生CaseDocNo.dat及DocDir.dat
+ Procedure SetDocDirtoSelected(CaseNode:TTreeNode;DocDir:String);
+ Function CheckSelectImg_UseCase(Path,CaseID:String):Boolean; //檢查選擇的影像是否有包含被引用的影像
+ Function TransOldCaseFile(Path:String):Boolean; //上傳引用舊件的記錄檔
+ Function Writelog(CaseID:String):Boolean;
+ Function FormIDAppear(FormID:String):Boolean; //FormID是否可出現
+ Function DocNoAppear(DocNo:String):Boolean; //DocNo是否可出現
+ Function GetDocNoCount(CaseID,DocNo:String):Integer; //取DocNo數量
+ Function GetDocDirCopies(CaseID,DocDir:String):Integer; //取DocDir份數
+ Procedure SetDocDirCopies(CaseID,DocDir:String;NewCopies:Integer); //修改DocDir份數
+ Function GetDocDirCopies_Rec(Path,CaseID,DocDir:String):Integer; //取記錄裡的DocDir份數
+ Function GetCustomNameCount(CustomName:String):Integer; //取外傳的名稱數量
+ Function GetCustomDocNoCount(Docno:String):Integer; //取外傳的DocNo數量
+ Function ISGuideFormID(FormID:String):Boolean;
+ Function CaseDelete_Enable(CaseID:String):Boolean; //案件可否被刪除
+
+ Procedure MoveImage(Path:String;mp:Integer); //移動頁數
+ Procedure MoveImage_Drag(Path:String;fp,tp:Integer); //拖拉移動頁數
+
+
+ Procedure SetUseCase(Mode:Char;Path,DocDir,FormCaseID,ToCaseID:String); //記錄引用其他案件 A:加入 D:刪掉
+ Function GetUseCase(Mode:Char;Path,DocDir:String):String; //F:取被引用 To:引用
+
+ Procedure Case2upload(CaseID:String);
+ Procedure Download2Case(SoDir,DeDir:String);
+
+ procedure view_image_FormCode(Path,FormCode:String;stpage,stview:integer); //用FormCode來找影像
+ procedure view_image_DocNo(Path,DocNo,FormID:String;Pages:integer); //用DocNo來找影像
+
+ Function ShapeName2PreViewISBName(SP:TShape):String; //轉出指定PreViewISBName
+ Procedure CreatePreViewISB(Count:Integer);
+ Procedure FreePreViewISB;
+ Procedure FitPreViewISB;
+ Procedure PaintShape(FromImg,ToImg:TImageScrollBox); //畫有被選取的影像
+ Procedure FreeShapeobj(SelectISB : TImageScrollBox);
+ Procedure ISBClick(Sender : TObject);
+ Procedure ISBMouseMove(Sender: TObject; Shift: TShiftState;
+ X, Y: Integer);
+ procedure ISBImageMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure ISBImageMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure ISBEndDrag(Sender, Target: TObject; X, Y: Integer);
+ procedure ISBDragDrop(Sender, Source: TObject; X, Y: Integer);
+ procedure ISBDragOver(Sender, Source: TObject; X, Y: Integer;
+ State: TDragState; var Accept: Boolean);
+
+ procedure BtnMouseEnter(Sender: TObject);
+
+ procedure PageEnd; //掃描接收完成
+ Procedure PageDone; //掃描完成後顯示影像
+ procedure StatrTwainScan;
+ procedure OnAcquire( const DibHandle : THandle;
+ const XDpi : Word;
+ const YDpi : Word;
+ const CallBackData : LongInt );
+
+
+ procedure ActivateEvent(Sender: TObject);
+ procedure ClickEvent(Sender: TObject);
+ procedure CreateEvent(Sender: TObject);
+ procedure DblClickEvent(Sender: TObject);
+ procedure DeactivateEvent(Sender: TObject);
+ procedure DestroyEvent(Sender: TObject);
+ procedure KeyPressEvent(Sender: TObject; var Key: Char);
+ procedure MouseEnterEvent(Sender: TObject);
+ procedure MouseLeaveEvent(Sender: TObject);
+ procedure PaintEvent(Sender: TObject);
+ function GetCurrentVersionNo: String;
+ procedure initParameter;
+ procedure LastInitFormidListCreate(path:string);
+ function checkFormCodeIsCustom(path,formcode:string):boolean;
+ function ISDivPageFormID(FormID: String): Boolean;
+ function GetSampleInf: Boolean;
+ procedure InitExistImgList(casepath:String);
+ function LoadFileGetMD5(const filename:string):string; //20170809 取的檔案的MD5
+ function ISExistImg(const filename:string):boolean; //20170809 確認是否存在原有影像
+ procedure _DelTreeForExistImg(ASourceDir:String); //2017 刪除前確認 有舊影像嗎
+ function DocNoIsExistImg(DocNopath: String): boolean; //2017 刪除前確認 有舊影像嗎
+ function CheckCaseAttach_OK: Boolean;
+ function DeleteDocNoFileForESCAN(Path, DocNo: String): Boolean; //2017 確認是否有未歸類文件
+ function CheckRequiredColumnValues(workno,caseno:String) :Boolean; //20171003 此大類下此案是否檢核必填
+ function logTimeString :String;
+ procedure ReduceLogFile ;
+ function FindLastestDocDirForPage(CaseID, DocNo, formid: String): String;
+ function OMRErrini2ListForLog(CaseID: String):String;
+ protected
+ { Protected declarations }
+ procedure DefinePropertyPages(DefinePropertyPage: TDefinePropertyPage); override;
+ procedure EventSinkChanged(const EventSink: IUnknown); override;
+ function Get_Active: WordBool; safecall;
+ function Get_AlignDisabled: WordBool; safecall;
+ function Get_AlignWithMargins: WordBool; safecall;
+ function Get_AutoScroll: WordBool; safecall;
+ function Get_AutoSize: WordBool; safecall;
+ function Get_AxBorderStyle: TxActiveFormBorderStyle; safecall;
+ function Get_Caption: WideString; safecall;
+ function Get_Color: OLE_COLOR; safecall;
+ function Get_DockSite: WordBool; safecall;
+ function Get_DoubleBuffered: WordBool; safecall;
+ function Get_DropTarget: WordBool; safecall;
+ function Get_Enabled: WordBool; safecall;
+ function Get_ExplicitHeight: Integer; safecall;
+ function Get_ExplicitLeft: Integer; safecall;
+ function Get_ExplicitTop: Integer; safecall;
+ function Get_ExplicitWidth: Integer; safecall;
+ function Get_Font: IFontDisp; safecall;
+ function Get_HelpFile: WideString; safecall;
+ function Get_KeyPreview: WordBool; safecall;
+ function Get_MouseInClient: WordBool; safecall;
+ function Get_ParentCustomHint: WordBool; safecall;
+ function Get_ParentDoubleBuffered: WordBool; safecall;
+ function Get_PixelsPerInch: Integer; safecall;
+ function Get_PopupMode: TxPopupMode; safecall;
+ function Get_PrintScale: TxPrintScale; safecall;
+ function Get_Scaled: WordBool; safecall;
+ function Get_ScreenSnap: WordBool; safecall;
+ function Get_SnapBuffer: Integer; safecall;
+ function Get_UseDockManager: WordBool; safecall;
+ function Get_Visible: WordBool; safecall;
+ function Get_VisibleDockClientCount: Integer; safecall;
+ procedure _Set_Font(var Value: IFontDisp); safecall;
+ procedure Set_AlignWithMargins(Value: WordBool); safecall;
+ procedure Set_AutoScroll(Value: WordBool); safecall;
+ procedure Set_AutoSize(Value: WordBool); safecall;
+ procedure Set_AxBorderStyle(Value: TxActiveFormBorderStyle); safecall;
+ procedure Set_Caption(const Value: WideString); safecall;
+ procedure Set_Color(Value: OLE_COLOR); safecall;
+ procedure Set_DockSite(Value: WordBool); safecall;
+ procedure Set_DoubleBuffered(Value: WordBool); safecall;
+ procedure Set_DropTarget(Value: WordBool); safecall;
+ procedure Set_Enabled(Value: WordBool); safecall;
+ procedure Set_Font(const Value: IFontDisp); safecall;
+ procedure Set_HelpFile(const Value: WideString); safecall;
+ procedure Set_KeyPreview(Value: WordBool); safecall;
+ procedure Set_ParentCustomHint(Value: WordBool); safecall;
+ procedure Set_ParentDoubleBuffered(Value: WordBool); safecall;
+ procedure Set_PixelsPerInch(Value: Integer); safecall;
+ procedure Set_PopupMode(Value: TxPopupMode); safecall;
+ procedure Set_PrintScale(Value: TxPrintScale); safecall;
+ procedure Set_Scaled(Value: WordBool); safecall;
+ procedure Set_ScreenSnap(Value: WordBool); safecall;
+ procedure Set_SnapBuffer(Value: Integer); safecall;
+ procedure Set_UseDockManager(Value: WordBool); safecall;
+ procedure Set_Visible(Value: WordBool); safecall;
+ procedure Set_caseid(const Value: WideString); safecall;
+ procedure Set_data(const Value: WideString); safecall;
+ procedure Set_mode(const Value: WideString); safecall;
+ procedure Set_rewrite(const Value: WideString); safecall;
+ procedure Set_url(const Value: WideString); safecall;
+ procedure Set_userid(const Value: WideString); safecall;
+ procedure Set_username(const Value: WideString); safecall;
+ procedure Set_verify(const Value: WideString); safecall;
+ procedure Set_language(const Value: WideString); safecall;
+ procedure Set_modename(const Value: WideString); safecall;
+ procedure Set_userunit(const Value: WideString); safecall;
+ procedure Set_work_no(const Value: WideString); safecall;
+ procedure Set_loandoc_enable(const Value: WideString); safecall;
+ procedure Set_loandoc_value(const Value: WideString); safecall;
+ procedure Set_useproxy(const Value: WideString); safecall;
+ procedure Set_c_docnamelist(const Value: WideString); safecall;
+ procedure Set_c_docnolist(const Value: WideString); safecall;
+ procedure Set_fixfilelist(const Value: WideString); safecall;
+ procedure Set_is_in_wh(const Value: WideString); safecall;
+ procedure Set_oldcaseinfo(const Value: WideString); safecall;
+ function Get_c_docnamelist: WideString; safecall;
+ function Get_c_docnolist: WideString; safecall;
+ function Get_caseid: WideString; safecall;
+ function Get_data: WideString; safecall;
+ function Get_fixfilelist: WideString; safecall;
+ function Get_is_in_wh: WideString; safecall;
+ function Get_language: WideString; safecall;
+ function Get_loandoc_enable: WideString; safecall;
+ function Get_loandoc_value: WideString; safecall;
+ function Get_mode: WideString; safecall;
+ function Get_modename: WideString; safecall;
+ function Get_oldcaseinfo: WideString; safecall;
+ function Get_rewrite: WideString; safecall;
+ function Get_url: WideString; safecall;
+ function Get_useproxy: WideString; safecall;
+ function Get_userid: WideString; safecall;
+ function Get_username: WideString; safecall;
+ function Get_userunit: WideString; safecall;
+ function Get_verify: WideString; safecall;
+ function Get_work_no: WideString; safecall;
+ function Get_printyn: WideString; safecall;
+ procedure Set_printyn(const Value: WideString); safecall;
+ function Get_is_oldcase: WideString; safecall;
+ procedure Set_is_oldcase(const Value: WideString); safecall;
+ function Get_custdocyn: WideString; safecall;
+ procedure Set_custdocyn(const Value: WideString); safecall;
+ function Get_casenolength: WideString; safecall;
+ function Get_filesizelimit: WideString; safecall;
+ function Get_imgdpi: WideString; safecall;
+ function Get_scancolor: WideString; safecall;
+ procedure Set_casenolength(const Value: WideString); safecall;
+ procedure Set_filesizelimit(const Value: WideString); safecall;
+ procedure Set_imgdpi(const Value: WideString); safecall;
+ procedure Set_scancolor(const Value: WideString); safecall;
+ function Get_imgdelete: WideString; safecall;
+ procedure Set_imgdelete(const Value: WideString); safecall;
+ function Get_check_main_form: WideString; safecall;
+ function Get_isExternal: WideString; safecall;
+ procedure Set_check_main_form(const Value: WideString); safecall;
+ procedure Set_isExternal(const Value: WideString); safecall;
+ function Get_WH_CATEGORY: WideString; safecall;
+ procedure Set_WH_CATEGORY(const Value: WideString); safecall;
+ public
+ { Public declarations }
+ procedure Initialize; override;
+ end;
+
+implementation
+
+uses EnBarcode,
+ EnTransf, { for TImageTransform }
+ Enpnggr, { for PNGGraphic }
+ EnJpgGr, { for JPGGraphic }
+ EnReg,
+ EnBmpGr, { for TBitmapGraphic }
+ EnPrint, { for TEnvisionPrintMode, TDibGraphicPrinter }
+ ComObj, ComServ,IISUnit,IIS_File2Web,IIS_ImageProcess,
+ PatchFom,Doclist,ScanMemo,DocCopy,InputMask,SortMemo,DocPrt,OldCaseInfo;
+
+{$R *.DFM}
+
+{ TCB_IMGPSScanX }
+
+function TCB_IMGPSScanX.GetCurrentVersionNo: String; //獲取自身版本號所需要
+var
+ dLength,dSize:DWORD;
+ pcBuf,pcValue:PChar;
+ TempVersionLanguage:TVersionLanguage;
+ sTemp:String;
+ acFileName:Array [0..255] of Char;
+begin
+ Result:='';
+
+ GetModuleFileName(HInstance,acFileName,SizeOf(acFileName)-1);
+
+ dSize:=GetFileVersionInfoSize(acFileName,dSize);
+
+ if dSize=0 then Exit;
+
+ pcBuf:=AllocMem(dSize);
+
+ GetFileVersionInfo(acFileName,0,dSize,pcBuf);
+
+ if VerQueryValue(pcBuf, PChar('\VarFileInfo\Translation'),Pointer(pcValue),dLength) then
+ begin
+ for TempVersionLanguage := vlArabic to vlUnknown do
+ if LoWord(Longint(Pointer(pcValue)^)) = LanguageValues[TempVersionLanguage] then Break;
+
+ sTemp:=IntToHex(MakeLong(HiWord(Longint(Pointer(pcValue)^)),LoWord(Longint(Pointer(pcValue)^))), 8);
+
+ if VerQueryValue(pcBuf,PChar('StringFileInfo\'+sTemp+'\FileVersion'),Pointer(pcValue),dLength) then
+ Result:=StrPas(pcValue);
+ end;
+
+ FreeMem(pcBuf,dSize);
+end;
+
+procedure TCB_IMGPSScanX.WMMOUSEWHEEL(var message: TWMMouseWheel);
+var
+ I: Integer;
+ iISB : TImageScrollBox;
+begin
+ inherited;
+ //lb1.Caption:=IntToStr(message.Keys);
+ if (message.WheelDelta = WHEEL_DELTA) Then
+ begin
+
+ if ScrollBox1.Focused then
+ begin
+ ScrollBox1.VertScrollBar.Increment := 50;
+ ScrollBox1.Perform(WM_VSCROLL,SB_Lineup,0);
+ end;
+ if DisplayISB <> nil then
+ begin
+ if (DisplayISB.Focused) and (message.Keys=0) then
+ begin
+ DisplayISB.VertScrollBar.Increment := 50;
+ DisplayISB.Perform(WM_VSCROLL,SB_Lineup,0);
+ end;
+
+ if (DisplayISB.Focused) and (message.Keys=50) then
+ begin
+ DisplayISB.ZoomMode := zmPercent;
+ if DisplayISB.ZoomPercent < 90 then
+ DisplayISB.ZoomPercent := DisplayISB.ZoomPercent+10;
+ end;
+
+ end;
+ i:=0;
+ while FindComponent(ISBName+inttostr(i)) <> nil do
+ begin
+ iISB := TImageScrollBox(FindComponent(ISBName+inttostr(i)));
+ if iISB.Focused then
+ begin
+ ScrollBox1.VertScrollBar.Increment := 50;
+ ScrollBox1.Perform(WM_VSCROLL,SB_Lineup,0);
+ end;
+ inc(i);
+ end;
+
+ end
+ else if (message.WheelDelta = -WHEEL_DELTA) then
+ begin
+
+ if ScrollBox1.Focused then
+ begin
+ ScrollBox1.VertScrollBar.Increment := 50;
+ ScrollBox1.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
+ end;
+ if DisplayISB <> nil then
+ begin
+ if (DisplayISB.Focused) and (message.Keys=0) then
+ begin
+ DisplayISB.VertScrollBar.Increment := 50;
+ DisplayISB.Perform(WM_VSCROLL,SB_LINEDOWN,0);
+ end;
+ if (DisplayISB.Focused) and (message.Keys=50) then
+ begin
+ DisplayISB.ZoomMode := zmPercent;
+ if DisplayISB.ZoomPercent > 10 then
+ DisplayISB.ZoomPercent := DisplayISB.ZoomPercent-10;
+ end;
+
+
+ end;
+
+ i:=0;
+ while FindComponent(ISBName+inttostr(i)) <> nil do
+ begin
+ iISB := TImageScrollBox(FindComponent(ISBName+inttostr(i)));
+ if iISB.Focused then
+ begin
+ ScrollBox1.VertScrollBar.Increment := 50;
+ ScrollBox1.Perform(WM_VSCROLL,SB_Lineup,0);
+ end;
+ inc(i);
+ end;
+
+ end;
+
+
+end;
+
+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;
+
+procedure TCB_IMGPSScanX.DefinePropertyPages(DefinePropertyPage: TDefinePropertyPage);
+begin
+ { Define property pages here. Property pages are defined by calling
+ DefinePropertyPage with the class id of the page. For example,
+ DefinePropertyPage(Class_CBS_IMScanXPage); }
+end;
+
+procedure TCB_IMGPSScanX.EventSinkChanged(const EventSink: IUnknown);
+begin
+ FEvents := EventSink as ICB_IMGPSScanXEvents;
+ inherited EventSinkChanged(EventSink);
+end;
+
+procedure TCB_IMGPSScanX.FC0Click(Sender: TObject);
+begin
+ IF NowClick = 0 Then
+ begin
+ DesableImage;
+ Exit;
+ end;
+ EnableImage(0 ,Sender);
+ NowClick := 0;
+end;
+
+procedure TCB_IMGPSScanX.FC1Click(Sender: TObject);
+begin
+ IF NowClick = 1 Then
+ begin
+ DesableImage;
+ Exit;
+ end;
+ EnableImage(1 ,Sender);
+ NowClick := 1;
+end;
+
+procedure TCB_IMGPSScanX.FC2Click(Sender: TObject);
+begin
+ IF NowClick = 2 Then
+ begin
+ DesableImage;
+ Exit;
+ end;
+ EnableImage(2,Sender);
+ NowClick := 2;
+end;
+
+procedure TCB_IMGPSScanX.FC3Click(Sender: TObject);
+begin
+ IF NowClick = 3 Then
+ begin
+ DesableImage;
+ Exit;
+ end;
+ EnableImage(3 ,Sender);
+ NowClick := 3;
+end;
+
+procedure TCB_IMGPSScanX.FC4Click(Sender: TObject);
+begin
+ IF NowClick = 4 Then
+ begin
+ DesableImage;
+ Exit;
+ end;
+ EnableImage(4 ,Sender);
+ NowClick := 4;
+end;
+
+procedure TCB_IMGPSScanX.FC5Click(Sender: TObject);
+begin
+ IF NowClick = 5 Then
+ begin
+ DesableImage;
+ Exit;
+ end;
+ EnableImage(5 ,Sender);
+ NowClick := 5;
+end;
+
+procedure TCB_IMGPSScanX.FC6Click(Sender: TObject);
+begin
+ {IF NowClick = 6 Then
+ begin
+ DesableImage;
+ Exit;
+ end;
+ EnableImage(6 ,Sender);
+ NowClick := 6;}
+ PM605Click(nil);
+end;
+
+procedure TCB_IMGPSScanX.InitExistImgList(casepath: String);
+var
+ ST1,ST2,ST3,ST4:TStringList;
+ i,j,k:Integer;
+begin
+
+ ST1:=TStringList.Create;
+ ST2:=TStringList.Create;
+ ST3:=TStringList.Create;
+
+ ExistImgList.Clear;
+ ST1.LoadFromFile(casepath+'Download\Context.dat');
+ for I := 0 to ST1.Count - 1 do
+ begin
+LogFile1.LogToFile(logTimeString+casepath+'Download\'+ST1.Strings[i]+',MD5='+LoadFileGetMD5(casepath+'Download\'+ST1.Strings[i]));
+ ExistImgList.Add(LoadFileGetMD5(casepath+'Download\'+ST1.Strings[i])) ;
+ end;
+LogFile1.LogToFile(logTimeString+'ExistImgList.text'+ExistImgList.CommaText);
+
+ ST1.Free;
+ ST2.Free;
+ ST3.Free;
+
+end;
+
+procedure TCB_IMGPSScanX.Initialize;
+begin
+ inherited Initialize;
+ OnActivate := ActivateEvent;
+ OnClick := ClickEvent;
+ OnCreate := CreateEvent;
+ OnDblClick := DblClickEvent;
+ OnDeactivate := DeactivateEvent;
+ OnDestroy := DestroyEvent;
+ OnKeyPress := KeyPressEvent;
+ OnMouseEnter := MouseEnterEvent;
+ OnMouseLeave := MouseLeaveEvent;
+ OnPaint := PaintEvent;
+ MpsKey := 'fbim';
+ Seg := 3; //瀏覽窗的邊界
+ Ext := '.tif';
+ SafePixel := 20;
+ CaseIDLength := 16; //案件編號長度 16碼 20170222 在用網頁參數來取代
+ FormIDLength := 15; //FormID長度 15碼 20170222 發現是用來辨識條碼用的
+ ///DocNoLength := 8; //DocNo長度 8碼 (1~8) //20170222 發現沒用到就註解吧
+ Bt :=4; //去直線時橫線判斷的容忍值
+ CropBarcode := 'CC';//要切影像的條碼
+end;
+
+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;
+
+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;
+
+procedure TCB_IMGPSScanX.ISB1Enter(Sender: TObject);
+begin
+ ISB1.SetFocus;
+end;
+
+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;
+
+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;
+
+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;
+
+function TCB_IMGPSScanX.Get_Active: WordBool;
+begin
+ Result := Active;
+end;
+
+function TCB_IMGPSScanX.Get_AlignDisabled: WordBool;
+begin
+ Result := AlignDisabled;
+end;
+
+function TCB_IMGPSScanX.Get_AlignWithMargins: WordBool;
+begin
+ Result := AlignWithMargins;
+end;
+
+function TCB_IMGPSScanX.Get_AutoScroll: WordBool;
+begin
+ Result := AutoScroll;
+end;
+
+function TCB_IMGPSScanX.Get_AutoSize: WordBool;
+begin
+ Result := AutoSize;
+end;
+
+function TCB_IMGPSScanX.Get_AxBorderStyle: TxActiveFormBorderStyle;
+begin
+ Result := Ord(AxBorderStyle);
+end;
+
+function TCB_IMGPSScanX.Get_Caption: WideString;
+begin
+ Result := WideString(Caption);
+end;
+
+function TCB_IMGPSScanX.Get_Color: OLE_COLOR;
+begin
+ Result := OLE_COLOR(Color);
+end;
+
+function TCB_IMGPSScanX.Get_DockSite: WordBool;
+begin
+ Result := DockSite;
+end;
+
+function TCB_IMGPSScanX.Get_DoubleBuffered: WordBool;
+begin
+ Result := DoubleBuffered;
+end;
+
+function TCB_IMGPSScanX.Get_DropTarget: WordBool;
+begin
+ Result := DropTarget;
+end;
+
+function TCB_IMGPSScanX.Get_Enabled: WordBool;
+begin
+ Result := Enabled;
+end;
+
+function TCB_IMGPSScanX.Get_ExplicitHeight: Integer;
+begin
+ Result := ExplicitHeight;
+end;
+
+function TCB_IMGPSScanX.Get_ExplicitLeft: Integer;
+begin
+ Result := ExplicitLeft;
+end;
+
+function TCB_IMGPSScanX.Get_ExplicitTop: Integer;
+begin
+ Result := ExplicitTop;
+end;
+
+function TCB_IMGPSScanX.Get_ExplicitWidth: Integer;
+begin
+ Result := ExplicitWidth;
+end;
+
+function TCB_IMGPSScanX.Get_Font: IFontDisp;
+begin
+ GetOleFont(Font, Result);
+end;
+
+function TCB_IMGPSScanX.Get_HelpFile: WideString;
+begin
+ Result := WideString(HelpFile);
+end;
+
+function TCB_IMGPSScanX.Get_KeyPreview: WordBool;
+begin
+ Result := KeyPreview;
+end;
+
+function TCB_IMGPSScanX.Get_MouseInClient: WordBool;
+begin
+ Result := MouseInClient;
+end;
+
+function TCB_IMGPSScanX.Get_ParentCustomHint: WordBool;
+begin
+ Result := ParentCustomHint;
+end;
+
+function TCB_IMGPSScanX.Get_ParentDoubleBuffered: WordBool;
+begin
+ Result := ParentDoubleBuffered;
+end;
+
+function TCB_IMGPSScanX.Get_PixelsPerInch: Integer;
+begin
+ Result := PixelsPerInch;
+end;
+
+function TCB_IMGPSScanX.Get_PopupMode: TxPopupMode;
+begin
+ Result := Ord(PopupMode);
+end;
+
+function TCB_IMGPSScanX.Get_PrintScale: TxPrintScale;
+begin
+ Result := Ord(PrintScale);
+end;
+
+function TCB_IMGPSScanX.Get_Scaled: WordBool;
+begin
+ Result := Scaled;
+end;
+
+function TCB_IMGPSScanX.Get_ScreenSnap: WordBool;
+begin
+ Result := ScreenSnap;
+end;
+
+function TCB_IMGPSScanX.Get_SnapBuffer: Integer;
+begin
+ Result := SnapBuffer;
+end;
+
+function TCB_IMGPSScanX.Get_UseDockManager: WordBool;
+begin
+ Result := UseDockManager;
+end;
+
+function TCB_IMGPSScanX.Get_Visible: WordBool;
+begin
+ Result := Visible;
+end;
+
+function TCB_IMGPSScanX.Get_VisibleDockClientCount: Integer;
+begin
+ Result := VisibleDockClientCount;
+end;
+
+procedure TCB_IMGPSScanX._Set_Font(var Value: IFontDisp);
+begin
+ SetOleFont(Font, Value);
+end;
+
+procedure TCB_IMGPSScanX.ActivateEvent(Sender: TObject);
+begin
+ if FEvents <> nil then FEvents.OnActivate;
+end;
+
+procedure TCB_IMGPSScanX.ClickEvent(Sender: TObject);
+begin
+ if FEvents <> nil then FEvents.OnClick;
+end;
+
+procedure TCB_IMGPSScanX.CreateEvent(Sender: TObject);
+begin
+ if FEvents <> nil then FEvents.OnCreate;
+end;
+
+procedure TCB_IMGPSScanX.DblClickEvent(Sender: TObject);
+begin
+ if FEvents <> nil then FEvents.OnDblClick;
+end;
+
+procedure TCB_IMGPSScanX.DeactivateEvent(Sender: TObject);
+begin
+ if FEvents <> nil then FEvents.OnDeactivate;
+end;
+
+procedure TCB_IMGPSScanX.DestroyEvent(Sender: TObject);
+begin
+ //********清單區********
+ Doc_Inf_List.Free; //Doc_Inf 清單 Docno + 版本為key
+ DM_FORM_INF_List.Free; //DM_FORM_INF 清單 Docno + 版本為key
+ FORM_INF_List.Free; //FORM_INF的清單
+ CHECK_RULE_INF_List.Free; //CHECK_RULE_INF 清單
+ MEMO_INF_List.Free; //MEMO_INF 清單
+ WORK_INF_List.Free; //WORK_INF 清單
+ LASTEST_FORM_INF_List.Free; // LASTEST_FORM_INF 清單
+ FindResult.Free ; //找SQLData的結果
+ OMRFileList.Free; //要OMR檢核的文件(只檢查每種Form的第一頁)
+ FormCode_PageSize.Free; //文件的預設大小 FormCode_Height_Width
+ DocNo_NeedDoc.Free; //有Docno時要相依的文件 DocNo_相依文件_相依文件
+ DocNo_NoDoc.Free; //有Docno時互斥的文件 DocNo_互斥文件_互斥文件
+ DocNo_VerinCase.Free; //案件裡的DocNo+版本的清單
+ CaseDocNoList.Free; //案件裡的DocNo清單
+ CaseDocNo_CopiesList.Free; //案件裡的DocNo份數清單
+ CaseList.Free; //記錄掃瞄案件的順序
+ NoSaveBarCodeList.Free; //不儲存的條碼清單
+ FormID_List.Free; //FormID清單
+ DocNo_List.Free; //DocNo清單
+ Context_DocnoList.Free; //案件裡的檔案Docno清單
+ ContextList.Free; //案件裡的檔案清單
+ AttContextList.Free; //案件裡的附加檔案清單
+ NowShowFileList.Free; //目前顯示的影像清單
+ NowSelectFileList.Free; //目前被點選的影像清單
+ Cust_DocNoList.Free; //自行定義文件名稱
+ IN_WH_DocNoList.Free; //入庫的文件清單
+ GuideFormIDList.Free; //要當導引頁表單清單
+ DivPageFormIDList.Free; //要當分案頁表單清單
+ LastInitFormidList.Free;
+ LastAddFormidList.Free;
+ SampleFormIDList.Free;
+ ExistImgList.Free;
+ reSizeExistImgList.Free;
+ //********清單區********
+ if (FMode = 'DSCAN') or (FMode = 'ESCAN') then //重掃件及異動件要只能掃指定編號的件
+ begin
+ if ImagePath<>'' then
+ _Deltree(ImagePath);
+ end;
+
+ if FEvents <> nil then FEvents.OnDestroy;
+end;
+
+procedure TCB_IMGPSScanX.KeyPressEvent(Sender: TObject; var Key: Char);
+var
+ TempKey: Smallint;
+begin
+ TempKey := Smallint(Key);
+ if FEvents <> nil then FEvents.OnKeyPress(TempKey);
+ Key := Char(TempKey);
+end;
+
+procedure TCB_IMGPSScanX.mode1Click(Sender: TObject);
+begin
+ VMode := 0;
+ GoViewMode;
+ //ScrollBar1Change(Self);
+ Panel14.Visible := False;
+end;
+
+procedure TCB_IMGPSScanX.mode2Click(Sender: TObject);
+begin
+ VMode := 1;
+ GoViewMode;
+ //ScrollBar1Change(Self);
+ Panel14.Visible := True;
+end;
+
+procedure TCB_IMGPSScanX.mode3Click(Sender: TObject);
+begin
+ VMode := 2;
+ GoViewMode;
+ ScrollBar1Change(Self);
+end;
+
+procedure TCB_IMGPSScanX.mode4Click(Sender: TObject);
+begin
+ VMode := 3;
+ GoViewMode;
+ ScrollBar1Change(Self);
+end;
+
+procedure TCB_IMGPSScanX.MouseEnterEvent(Sender: TObject);
+begin
+ if FEvents <> nil then FEvents.OnMouseEnter;
+end;
+
+procedure TCB_IMGPSScanX.MouseLeaveEvent(Sender: TObject);
+begin
+ if FEvents <> nil then FEvents.OnMouseLeave;
+end;
+
+procedure TCB_IMGPSScanX.PaintEvent(Sender: TObject);
+begin
+ if FEvents <> nil then FEvents.OnPaint;
+end;
+
+procedure TCB_IMGPSScanX.Set_AlignWithMargins(Value: WordBool);
+begin
+ AlignWithMargins := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_AutoScroll(Value: WordBool);
+begin
+ AutoScroll := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_AutoSize(Value: WordBool);
+begin
+ AutoSize := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_AxBorderStyle(Value: TxActiveFormBorderStyle);
+begin
+ AxBorderStyle := TActiveFormBorderStyle(Value);
+end;
+
+procedure TCB_IMGPSScanX.Set_Caption(const Value: WideString);
+begin
+ Caption := TCaption(Value);
+end;
+
+procedure TCB_IMGPSScanX.Set_Color(Value: OLE_COLOR);
+begin
+ Color := TColor(Value);
+end;
+
+procedure TCB_IMGPSScanX.Set_DockSite(Value: WordBool);
+begin
+ DockSite := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_DoubleBuffered(Value: WordBool);
+begin
+ DoubleBuffered := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_DropTarget(Value: WordBool);
+begin
+ DropTarget := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_Enabled(Value: WordBool);
+begin
+ Enabled := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_Font(const Value: IFontDisp);
+begin
+ SetOleFont(Font, Value);
+end;
+
+procedure TCB_IMGPSScanX.Set_HelpFile(const Value: WideString);
+begin
+ HelpFile := string(Value);
+end;
+
+procedure TCB_IMGPSScanX.Set_KeyPreview(Value: WordBool);
+begin
+ KeyPreview := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_ParentCustomHint(Value: WordBool);
+begin
+ ParentCustomHint := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_ParentDoubleBuffered(Value: WordBool);
+begin
+ ParentDoubleBuffered := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_PixelsPerInch(Value: Integer);
+begin
+ PixelsPerInch := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_PopupMode(Value: TxPopupMode);
+begin
+ PopupMode := TPopupMode(Value);
+end;
+
+procedure TCB_IMGPSScanX.Set_PrintScale(Value: TxPrintScale);
+begin
+ PrintScale := TPrintScale(Value);
+end;
+
+procedure TCB_IMGPSScanX.Set_Scaled(Value: WordBool);
+begin
+ Scaled := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_ScreenSnap(Value: WordBool);
+begin
+ ScreenSnap := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_SnapBuffer(Value: Integer);
+begin
+ SnapBuffer := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_UseDockManager(Value: WordBool);
+begin
+ UseDockManager := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_Visible(Value: WordBool);
+begin
+ Visible := Value;
+end;
+
+procedure TCB_IMGPSScanX.PM401Click(Sender: TObject);
+var
+ i : Integer;
+ FromIndex : Integer;
+ CaseID : String;
+ NewPath : String;
+ OldName,NewName:String;
+ S : TStringlist;
+begin
+ S := TStringlist.Create;
+ try
+ FromIndex := PageLv.ItemIndex;
+ if FromIndex = 0 then
+ begin
+ Showmessage(_Msg('不能從第1頁分案'));
+ Exit;
+ end;
+
+ If MessageDlg(Format(_Msg('是否確定從%d頁分出新案'),[PageLV.ItemIndex+1]),Mtconfirmation,[mbyes,mbcancel],0) = mrcancel Then Exit;
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+ CaseID := GetNoNameCase(ImageSavePath);
+ NewPath := ImageSavePath + CaseID+'\';
+ Str2Dir(NewPath);
+ for i := FromIndex to ContextList.Count - 1 do
+ begin
+ OldName := ContextList.Strings[i];
+ //NewName := Add_Zoo(S.Count+1,3)+Copy(OldName,4,length(OldName)-3);
+ NewName := Add_Zoo(S.Count+1,3)+FileName2NoQuene_Filename(OldName);
+
+ ReNameFile(DisplayPath+OldName,NewPath+NewName);
+ S.Add(NewName);
+ S.SaveToFile(NewPath+'Context.dat');
+ end;
+ for i := ContextList.Count - 1 downto FromIndex do
+ begin
+ ContextList.Delete(i);
+ ContextList.SaveToFile(DisplayPath+'Context.dat');
+ end;
+ SetCaseList('I',MyTreeNode1.IndexOf(MyTreeNode2)+1,CaseID);
+ if FileExists(DisplayPath+'CaseIndex.dat') then //把原經辦代號取出來再寫入新件裡
+ begin
+ S.LoadFromFile(DisplayPath+'CaseIndex.dat');
+ end;
+ DisplayPath := '';
+
+ ClearCaseIndex;
+ WriteCaseIndex(NewPath);
+ finally
+ S.Free;
+ end;
+ LoadImgFile;
+ Showmessage(_Msg('分案完成'));
+end;
+
+procedure TCB_IMGPSScanX.PM402Click(Sender: TObject);
+var
+ i : Integer;
+begin
+ for i := 0 to PageLV.Items.Count - 1 do
+ begin
+ PageLV.Items.Item[i].Selected := True;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.PM403Click(Sender: TObject);
+var
+ i : Integer;
+begin
+ for i := 0 to PageLV.Items.Count - 1 do
+ begin
+ PageLV.Items.Item[i].Selected := False;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.PM404Click(Sender: TObject);
+var
+ i : Integer;
+ DocListForm : TDocListForm;
+ OldName,NewName,Ext : String;
+ FormID,FormName : String;
+ PreNode2Name : String;
+begin
+ PreNode2Name := '';
+ if TreeView1.Selected.Parent = MyTreeNode1 then
+ PreNode2Name:= GetNode2Name(MyTreeNode2);
+ ShowText := _Msg('文件歸類中,請稍候');
+ DataLoading(True,True);
+ DocListForm := TDocListForm.Create(self);
+ try
+ InitialLanguage(PatchDlg); //載入多國語言
+ for i := 1 to FORM_INF_List.Count - 1 do
+ begin
+ FormID := GetSQLData(FORM_INF_List,'T1.FORM_ID',i);
+ FormName := GetSQLData(FORM_INF_List,'T1.FORM_DESC',i);
+ if (FormID <> NowFormCode) and FormIDExists(FormID,True,0) then
+ begin
+ DocListForm.FormIDList.Add(FormID+'#@#'+FormName);
+ With DocListForm.DocLV.Items.Add do
+ begin
+ Caption := FormID;
+ SubItems.Add(FormName);
+ end;
+ end;
+ end;
+
+ if DocListForm.ShowModal = mrOk then
+ begin
+ FormID := DocListForm.DocLV.Selected.Caption;
+ if (TreeView1.Selected.Level=1) then
+ begin
+ PageReplaceFormID(DisplayPath,'ALL',FormID);
+ end
+ Else if (TreeView1.Selected.Level=2) and (NowFormCode = '') then
+ PageReplaceFormID(DisplayPath,'',FormID)
+ Else
+ begin
+ PageReplaceFormID(DisplayPath,NowFormCode,FormID);
+ end;
+ //DrawDocItem(MytreeNode1,FORM_INF_List,NowCaseno);
+ //DrawDocItem1(MytreeNode1,Doc_Inf_List,NowCaseno); //201408280改
+ DrawDocItem2(MytreeNode1,NowCaseno);
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+ //Showmessage(_Msg('歸類完成')); //20101103 User要求拿掉
+ if PreNode2Name <> '' then // 回到原本點選的文件節點上
+ begin
+ for i := 0 to MyTreeNode1.Count - 1 do
+ begin
+ if GetNode2Name(MyTreeNode1.Item[i]) = PreNode2Name then
+ begin
+ TreeView1.Selected := MyTreeNode1.Item[i];
+ Break;
+ end;
+ end;
+ end;
+ TreeView1click(self);
+ end;
+ finally
+ DocListForm.Free;
+ DataLoading(False,False);
+ end;
+
+end;
+
+procedure TCB_IMGPSScanX.PM601Click(Sender: TObject);
+var
+ i : Integer;
+ DocListForm : TDocListForm;
+ OldName,NewName,Ext : String;
+ FormID,FormName,DocNo,DocDir : String;
+ PreNode2Name : String;
+ iFormID : String;
+ iISBName : String;
+ iISB : TImageScrollBox;
+ GoAtt : Boolean;
+ AttLv : Integer;
+ ST1 :TStringList;
+begin
+ PreNode2Name := '';
+ ST1:=TStringList.Create;
+ if TreeView1.Selected.Parent = MyTreeNode1 then
+ PreNode2Name:= GetNode2Name(MyTreeNode2);
+ ShowText := _Msg('文件歸類中,請稍候');
+LogFile1.LogToFile(logTimeString+'縮圖 歸類開始');
+ DataLoading(True,True);
+ GoAtt := False;
+ if (MytreeNode2 <> nil) and (Pos('Attach',MyTreeNode2.Text)>0) then
+ begin
+ AttLv := TreeView1.Selected.Level;
+ GoAtt := True;
+ end;
+ DocListForm := TDocListForm.Create(self);
+ try
+ InitialLanguage(DocListForm); //載入多國語言
+ //InitialLanguage(PatchDlg); //載入多國語言
+ DocListForm.CheckBox1.Visible:=False;
+ for i := 1 to FORM_INF_List.Count - 1 do
+ begin
+ FormID := GetSQLData(FORM_INF_List,'T1.FORM_ID',i);
+ FormName := GetSQLData(FORM_INF_List,'T1.FORM_DESC',i);
+ DocNo := GetSQLData(FORM_INF_List,'T1.DOC_NO',i)+GetSQLData(FORM_INF_List,'T1.DOC_VERSION',i);
+ if not FormIDAppear(FormID) then Continue; //20170816 先秀全部
+
+ //Showmessage(FORM_INF_List.Text);
+ //showmessage(inttostr(FORM_INF_List.Count)+#13+inttostr(self.Doc_Inf_List.Count));
+ if (FormID <> FileName2FormCode(DisplayISB.FileName)) and FormIDExists(FormID,False,i) then
+ begin
+ DocListForm.FormIDList.Add(FormID+'#@#'+FormName);
+ With DocListForm.DocLV.Items.Add do
+ begin
+ Caption := FormID;
+ SubItems.Add(FormName);
+ end;
+ end;
+ end;
+ if DocListForm.ShowModal = mrOk then
+ begin
+ for i := 0 to ComponentCount -1 do
+ begin
+ if (Components[i] is TShape) and (copy(Components[i].Name,1,2)='SP') then
+ begin
+ iISBName := ShapeName2PreViewISBName(TShape(Components[i]));
+ iISB := TImageScrollBox(FindComponent(iISBName));
+ OldName := ExtractFileName(iISB.FileName);
+ Ext := ExtractFileExt(OldName);
+
+ if DocListForm.CheckBox1.Checked then
+ begin
+ FormID := DocListForm.Edit1.Text;
+ DocNo := GetNewCustomDocNo(DisplayPath,FormID);
+ end
+ else
+ begin
+ FormID := DocListForm.DocLV.Selected.Caption;
+ DocNo := FormCode2DocNo(FormID);
+ end;
+
+
+ if DocNoDir2DocNo(Path2DocDir(ExtractFilePath(iISB.FileName),NowCaseno)) = DocNo then
+ DocDir := Path2DocDir(ExtractFilePath(iISB.FileName),NowCaseNo)
+ Else
+ DocDir := FindLastestDocDir(NowCaseno,DocNo);
+
+//ShowMessage('DocNoNeedDiv(DocNo)='+BoolToStr(DocNoNeedDiv(DocNo),true));
+//ShowMessage('DocDir='+DocDir);
+
+ if DocNoNeedDiv(DocNo) then //要分份數
+ begin
+ if ((FormCode2Page(FormID) = '01') and (GetDocDir_Page(NowCaseno,DocDir)>0)) or (DocDir = '') then
+ begin
+ DocDir := DocNo2DocNoDir(ImageSavePath + NowCaseno+'\',DocNo);
+ end
+ else
+ begin //20171016 真對補件影響 所加的判斷
+ ST1.Clear;
+ if FileExists(ImageSavePath + NowCaseno+'\'+DocDir+'\Context.dat') then
+ begin
+ ST1.LoadFromFile(ImageSavePath + NowCaseno+'\'+DocDir+'\Context.dat');
+ if (ST1.Count > 0) and ISExistImg(ImageSavePath + NowCaseno+'\'+DocDir+'\'+ST1.Strings[0]) then //20181210 多增加判斷ST1>0 否則會有機會出現List out of bound Hong
+ begin
+ DocDir := DocNo2DocNoDir(ImageSavePath + NowCaseno+'\',DocNo);
+ end;
+ end;
+ end;
+ end
+ Else //不分份數
+ begin
+ if DocNo <> '' then
+ DocDir := DocNo
+ else //Attach 附件
+ DocDir := DocNo2DocNoDir(ImageSavePath + NowCaseno+'\',DocNo);
+ end;
+ if (not DirectoryExists(ImageSavePath + NowCaseno+'\'+DocDir+'\')) and (DocDir <> AttName) then
+ SetDocNoList('A',-1,NowCaseno,DocDir,'1');
+
+ {if DocDir = '' then
+ begin
+ DocDir := DocNo;
+ if DocNoNeedDiv(DocNo) then
+ DocDir:=DocNo2DocNoDir(ImageSavePath+NowCaseno+'\',DocNo);
+ SetDocNoList('A',-1,NowCaseno,DocDir);
+ end; }
+LogFile1.LogToFile(logTimeString+'縮圖 FormID='+FormID);
+ if Not DirectoryExists(ImageSavePath+NowCaseno+'\'+DocDir) then
+ Mkdir(ImageSavePath+NowCaseno+'\'+DocDir);
+ ContextList.Clear;
+ if FileExists(ImageSavePath+NowCaseno+'\'+DocDir+'\Context.dat') then
+ ContextList.LoadFromFile(ImageSavePath+NowCaseno+'\'+DocDir+'\Context.dat');
+ NewName := Add_Zoo(ContextList.Count+1,3)+'_'+FormID+Ext;
+ CopyFile(PWideChar(iISB.FileName),PwideChar(ImageSavePath+NowCaseno+'\'+DocDir+'\'+NewName),False);
+ {ContextList.Add(NewName);
+ ContextList.SaveToFile(ImageSavePath+NowCaseno+'\'+DocDir+'\Context.dat'); }
+ SetContextList('A',-1,NowCaseNo,DocDir,NewName);
+ DeleteImageFile(ExtractFilePath(iISB.FileName),ExtractFileName(iISB.FileName),NowCaseNo);
+ //RenameFile(iISB.FileName,ImageSavePath+NowCaseno+'\'+DocDir+'\'+NewName);
+ //ReNameContext(iISB.FileName,OldName,NewName);
+ end;
+ end;
+//ShowMessage('KKKK');
+ ReSortFileName(ExtractFilePath(iISB.FileName));
+ DrawDocItem2(MytreeNode1,NowCaseno);
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+
+ if GoAtt then
+ begin
+ GotoAttach(AttLv);
+ end;
+ TreeView1click(self);
+
+ end;
+ finally
+ DataLoading(False,False);
+ DocListForm.Free;
+ ST1.Free;
+ end;
+
+end;
+
+procedure TCB_IMGPSScanX.PM602Click(Sender: TObject);
+var
+ FileList:TStringlist;
+ SavePath : String;
+ DocDir : String;
+ CustomDocName : String;
+ CustomDocNo : String;
+ i : Integer;
+ OldName,NewName,Ext : String;
+ FormID,FormName,DocNo : String;
+ PreNode2Name : String;
+ iFormID : String;
+ iISBName : String;
+ iISB : TImageScrollBox;
+ GoAtt : Boolean;
+ AttLv : Integer;
+begin
+ GoAtt := False;
+ if (MytreeNode2 <> nil) and (Pos('Attach',MyTreeNode2.Text)>0) then
+ begin
+ AttLv := TreeView1.Selected.Level;
+ GoAtt := True;
+ end;
+
+ if InputQuery('輸入其他文件名稱','文件名稱',CustomDocName) then
+ begin
+ if FindCustomDocName(DisplayPath,CustomDocName) then
+ begin
+ Showmessage(Format('文件名稱:"%s"己存在',[CustomDocName]));
+ Exit;
+ end;
+ CustomDocNo := GetNewCustomDocNo(DisplayPath,CustomDocName);
+ end;
+ if CustomDocNo = '' then Exit;
+ DocDir := CustomDocNo;
+LogFile1.LogToFile(logTimeString+'縮圖 歸類自訂文件 DocDir='+DocDir);
+ SavePath := ImageSavePath+NowCaseNo+'\'+DocDir+'\';
+ Str2Dir(SavePath);
+ SetDocNoList('A',-1,NowCaseNo,DocDir,'1');
+ FileList := TStringlist.Create;
+ try
+ FileList.Clear;
+ if FileExists(SavePath+'Context.dat') then
+ FileList.LoadFromFile(SavePath+'Context.dat');
+
+ for i := 0 to ComponentCount -1 do
+ begin
+ if (Components[i] is TShape) and (copy(Components[i].Name,1,2)='SP') then
+ begin
+ iISBName := ShapeName2PreViewISBName(TShape(Components[i]));
+ iISB := TImageScrollBox(FindComponent(iISBName));
+ OldName := ExtractFileName(iISB.FileName);
+ Ext := ExtractFileExt(OldName);
+ NewName := Add_Zoo(FileList.Count+1,3)+'_'+GetCustomFormID(ImageSavePath+NowCaseNo+'\',CustomDocNo)+ext;
+
+ //Showmessage(iISB.FileName+#13+ImageSavePath+NowCaseno+'\'+DocDir+'\'+NewName);
+ CopyFile(PWideChar(iISB.FileName),PwideChar(ImageSavePath+NowCaseno+'\'+DocDir+'\'+NewName),False);
+ SetContextList('A',-1,NowCaseno,DocDir,NewName);
+ FileList.Add(NewName);
+ {FileList.Add(NewName);
+ FileList.SaveToFile(ImageSavePath+NowCaseno+'\'+DocDir+'\Context.dat');}
+ DeleteImageFile(ExtractFilePath(iISB.FileName),ExtractFileName(iISB.FileName),NowCaseNo);
+ end;
+ end;
+ finally
+ FileList.Free;
+ end;
+ ReSortFileName(ExtractFilePath(iISB.FileName));
+ DrawDocItem2(MytreeNode1,NowCaseno);
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+
+ if GoAtt then
+ begin
+ GotoAttach(AttLv);
+ end;
+ TreeView1click(self);
+ MyTreeNode1.Expand(True);
+end;
+
+procedure TCB_IMGPSScanX.PM604Click(Sender: TObject);
+var
+ i : Integer;
+ iISBName : String;
+ iISB : TImageScrollBox;
+begin
+ //Showmessage(inttostr(ComponentCount));
+ for i := 0 to ComponentCount -1 do
+ begin
+ if (Components[i] is TShape) and (copy(Components[i].Name,1,2)='SP') then
+ begin
+ //Showmessage(Components[i].Name);
+ iISBName := ShapeName2PreViewISBName(TShape(Components[i]));
+ iISB := TImageScrollBox(FindComponent(iISBName));
+ DeskewImg(iISB.Graphic);
+ iISB.Redraw(True);
+ iISB.SaveToFile(iISB.FileName);
+ DisplayISB.LoadFromFile(DisplayISB.FileName,1);
+ end;
+ end;
+ //TreeView1Click(nil);
+end;
+
+procedure TCB_IMGPSScanX.PM605Click(Sender: TObject);
+var
+ i : Integer;
+ iISBName,OldName : String;
+ iISB : TImageScrollBox;
+begin
+ if MessageDlg('是否確定刪除??',mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
+
+ for i := 0 to ComponentCount -1 do
+ begin
+ if (Components[i] is TShape) and (copy(Components[i].Name,1,2)='SP') then
+ begin
+ //Showmessage(Components[i].Name);
+ iISBName := ShapeName2PreViewISBName(TShape(Components[i]));
+ iISB := TImageScrollBox(FindComponent(iISBName));
+//ShowMessage('iISB.FileName='+iISB.FileName);
+//ShowMessage(ExtractFilePath(iISB.FileName)+','+ExtractFileName(iISB.FileName)+','+NowCaseNo);
+// if (FMode = 'ESCAN') and (FModeName<>'異動件') then
+// begin
+// if ISExistImg(iISB.FileName) then
+// begin
+// ShowMessage(_Msg('此圖為非當次掃瞄,不可刪除'));
+// Exit;
+// end;
+// end;
+LogFile1.LogToFile(logTimeString+'縮圖刪除 iISB.FileName='+iISB.FileName);
+ DeleteImageFile(ExtractFilePath(iISB.FileName),ExtractFileName(iISB.FileName),NowCaseNo);
+ end;
+ end;
+//ShowMessage('iISB.FileName='+iISB.FileName);
+ ReSortFileName(ExtractFilePath(iISB.FileName));
+ DrawDocItem2(MytreeNode1,NowCaseno);
+ MyTreeNode1.Text := Format('%s-%d'+_Msg('頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
+ NewTreeNodeRefresh;
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+ TreeView1click(self);
+end;
+
+procedure TCB_IMGPSScanX.N1Click(Sender: TObject);
+var
+ mp:string;
+begin
+ mp := InputBox('移動頁數','請輸入移入頁碼','');
+ if (mp <> '') then
+ begin
+ MoveImage(DisplayPath+NowDocDir+'\',strtoint(mp));
+ end;
+end;
+
+procedure TCB_IMGPSScanX.N51Click(Sender: TObject);
+begin
+ VMode := 4;
+ GoViewMode;
+ ScrollBar1Change(Self);
+end;
+
+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;
+
+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;
+
+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;
+
+procedure TCB_IMGPSScanX.PageLVClick(Sender: TObject);
+begin
+ IF PageLV.Selected = nil Then Exit;
+ PageLVclear := False;
+ ScrollBar1.Position := PageLV.Selected.Index+1;
+ PageLVclear := True;
+end;
+
+procedure TCB_IMGPSScanX.PageLVKeyUp(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+begin
+ IF PageLV.Selected = nil Then Exit;
+ ScrollBar1.Position := PageLV.Selected.Index+1;
+end;
+
+procedure TCB_IMGPSScanX.PageLVMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+begin
+ IF Button = TMouseButton(MbRight) Then
+ begin
+ If PageLV.GetItemAt(X,Y) = nil then Exit;
+ PageLV.Selected := PageLV.GetItemAt(X,Y);
+ PageLVClick(self);
+ PageLV.PopupMenu.Popup(Mouse.CursorPos.X ,Mouse.CursorPos.Y);
+ end;
+end;
+
+procedure TCB_IMGPSScanX.Panel11DblClick(Sender: TObject);
+begin
+ // Button3.Visible := not Button3.Visible;
+ //Button4.Visible := not Button4.Visible;
+ //self.FCustDocYN := 'N';
+end;
+
+procedure TCB_IMGPSScanX.Panel1DblClick(Sender: TObject);
+begin
+ Button1.Visible := not Button1.Visible;
+ Button2.Visible := not Button2.Visible;
+end;
+
+procedure TCB_IMGPSScanX.Panel9Resize(Sender: TObject);
+begin
+ GoViewMode;
+end;
+
+procedure TCB_IMGPSScanX.PM101Click(Sender: TObject);
+var
+ P,v,v1,v2,ln,i : Integer;
+ iDocDir,iDocNo : String;
+begin
+LogFile1.LogToFile(logTimeString+'Tree 按下刪除');
+ if TreeView1.Selected = NewTreeNode then //全刪 //新掃描件
+ begin
+LogFile1.LogToFile(logTimeString+'Tree 全部刪除');
+ If Messagedlg(_Msg('是否刪除所有案件?'),mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
+ clearView(1);
+ Application.ProcessMessages;
+ _DelTree(ImageSavePath);
+ if (FMode = 'ESCAN') then
+ begin
+ MkDir(ImageSavePath+FCaseID);
+ CreateEmptyCase(ImageSavePath,FCaseID);
+ end;
+ LoadImgFile;
+ Showmessage(_Msg('刪除完成'));
+ end
+ Else if TreeView1.Selected = MyTreeNode1 then //案件編號
+ begin
+LogFile1.LogToFile(logTimeString+'Tree 案件編號刪除 NowCaseno='+NowCaseno);
+ If Messagedlg(Format(_Msg('編號(%s)是否刪除?'),[NowCaseno]),mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
+ clearView(1);
+ Application.ProcessMessages;
+ if (FMode = 'ESCAN') then
+ begin
+ for i := 0 to MyTreeNode1.Count - 1 do
+ begin
+ MyTreenode2 := MyTreeNode1.Item[i];
+ v := Posend('{',MyTreenode2.Text);
+ v1 := Posend('}',MyTreenode2.Text);
+ v2 := posend('-',MyTreenode2.Text);
+ ln := length(MyTreenode2.Text);
+ iDocDir := Copy(MyTreeNode2.Text,v+1,v1-v-1);
+ iDocNo := DocNoDir2DocNo(iDocDir);
+ _DelTree(ImageSavePath+NowCaseno+'\'+iDocDir);
+ SetUseCase('D',ImageSavePath+NowCaseno+'\',iDocDir,'','');
+ SetDocNoList('D',-1,NowCaseNo,iDocDir,'');
+ if (Copy(iDocNo,1,5)='ZZZZZ') then //20140703 刪除自定文件時要刪ini檔資料
+ DeleteCustomDocDir(ImageSavePath+NowCaseno+'\',iDocDir);
+
+ end
+ end
+ Else
+ begin
+ _DelTree(DisplayPath);
+ SetCaseList('D',NewTreeNode.IndexOf(MyTreeNode1),'');
+ end;
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+
+ if (FMode = 'ESCAN') then
+ begin
+ if not DirectoryExists(ImageSavePath+FCaseID) then
+ begin
+ MkDir(ImageSavePath+FCaseID);
+ CreateEmptyCase(ImageSavePath,FCaseID);
+ end;
+ end;
+ LoadImgFile;
+ end
+ Else if TreeView1.Selected = MyTreeNode2 then //文件層
+ begin
+ If Messagedlg(Format(_Msg('文件(%s)是否刪除?'),[DocNo2DocName(NowCaseno,NowDocNo)]),mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
+ ClearView(1);
+ Application.ProcessMessages;
+//ShowMessage(NowDocDir);
+LogFile1.LogToFile(logTimeString+'Tree 文件層號刪除 NowDocDir='+NowDocDir);
+ if (Length(NowDocDir)=8) or (NowDocDir=AttName) then
+ begin
+//ShowMessage('DeleteDocNoFileForESCAN');
+ DeleteDocNoFileForESCAN(ImageSavePath+NowCaseno+'\'+NowDocDir,NowDocDir);
+ end
+ else
+ begin
+ _DelTree(ImageSavePath+NowCaseno+'\'+NowDocDir);
+ SetDocNoList('D',-1,NowCaseNo,NowDocDir,'');
+ end;
+ SetUseCase('D',ImageSavePath+NowCaseno+'\',NowDocDir,'','');
+
+ if (Copy(NowDocNo,1,5)='ZZZZZ') then //20140703 刪除自定文件時要刪ini檔資料
+ DeleteCustomDocDir(ImageSavePath+NowCaseno+'\',NowDocDir);
+
+ DrawDocItem2(MytreeNode1,NowCaseno);
+ MytreeNode1.Text := Format(_Msg('%s-%d頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+ NewTreeNodeRefresh;
+
+ end
+ Else if TreeView1.Selected = MyTreeNode3 then //FormID層
+ begin
+ If Messagedlg(Format(_Msg('文件(%s)是否刪除?'),[NowFormName]),mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
+LogFile1.LogToFile(logTimeString+'Tree FormID層號刪除 NowFormCode='+NowFormCode);
+ DeleteFormCodeFile(NowCaseNo,NowDocDir,NowFormCode);
+ SetRecordEditedDocDir('A',NowCaseNo,NowDocDir);
+ DrawDocItem2(MytreeNode1,NowCaseno);
+ MytreeNode1.Text := Format(_Msg('%s-%d頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+ NewTreeNodeRefresh;
+
+ end;
+end;
+
+function TCB_IMGPSScanX.DocNoIsExistImg(DocNopath:String):boolean;
+var
+ i:integer;
+ ST:TStringList;
+begin
+ Result:=False;
+ ST:=TStringList.Create;
+ if FileExists(DocNopath+'\Context.dat') then /////20190319 Hong 當有空的Docno目錄時會掛掉,增加這行
+ ST.loadFromfile(DocNopath+'\Context.dat');
+ for I := 0 to ST.Count - 1 do
+ begin
+ if ISExistImg(DocNopath+ST.Strings[i]) then
+ begin
+
+ Result:=False;
+ Exit;
+ Break;
+ end;
+ end;
+ Result:=True;
+
+
+end;
+
+procedure TCB_IMGPSScanX._DelTreeForExistImg(ASourceDir:String);
+var
+ i:integer;
+ ST:TStringList;
+begin
+
+end;
+
+procedure TCB_IMGPSScanX.PM102Click(Sender: TObject);
+var
+ NewCaseID,ShowNewCaseID,ShowNowCaseID : String;
+ i,P,v : Integer;
+ InputOk : Boolean;
+begin
+ VMode := 0;
+ GoViewMode;
+ ISB1.ZoomMode := zmFitWidth;
+
+ NewCaseID := InputBox(_Msg('修改案件編號'),_Msg('新案件編號'),'');
+ ShowNewCaseID := NewCaseID;
+ ShowNowCaseID := NowCaseno;
+
+ if NewCaseID = '' then Exit;
+
+ IF Length(NewCaseID)<>CaseIDLength Then
+ begin
+ Showmessage(_Msg('輸入格式錯誤'));
+ Exit;
+ end;
+
+ if DirectoryExists(ImageSavePath+NewCaseID) then
+ begin
+ Showmessage(NewCaseID+_Msg('己存在,無法修改'));
+ Exit;
+ end;
+
+ if Messagedlg(Format(_Msg('是否將%s改為%s'),[ShowNowCaseID,ShowNewCaseID]),Mtconfirmation,[mbyes,mbcancel],0) = mrcancel then
+ Exit;
+ ClearView(1);
+ RenameFile(ImageSavePath+NowCaseno,ImageSavePath+NewCaseID);
+ SetCaseList('E',NewTreeNode.IndexOf(MyTreeNode1),NewCaseID);
+
+ //P := ContextList.Count;
+ MytreeNode1.Text := Format(_Msg('%s-%d頁'),[NewCaseID,GetCasePage(ImageSavePath,NewCaseID)]);
+ //DrawDocItem(MyTreeNode1,FORM_INF_List,NewCaseID);
+ DrawDocItem2(MytreeNode1,NewCaseID);
+ Showmessage(_Msg('修改完成'));
+end;
+
+procedure TCB_IMGPSScanX.PM103Click(Sender: TObject);
+begin
+ if TreeView1.Selected = nil then Exit;
+
+ {if Treeview1.Selected = NewTreeNode then
+ begin
+ ShowMessage('AAAAA');
+ end;
+ if Treeview1.Selected = MyTreeNode1 then
+ begin
+ ShowMessage('BBBBB');
+ end;
+
+ if Treeview1.Selected = MyTreeNode2 then
+ begin
+ ShowMessage('CCCCC');
+ end;
+
+ if Treeview1.Selected = MyTreeNode3 then
+ begin
+ ShowMessage('DDDDD');
+ end;
+ }
+ if (Treeview1.Selected = NewTreeNode) {or (Treeview1.Selected = MyTreeNode1)} then
+ begin
+//ShowMessage('NewScanBtnClick');
+LogFile1.LogToFile(logTimeString+'Tree NewScanBtnClick');
+ NewScanBtnClick(self)
+ end
+ Else
+ begin
+//ShowMessage('AddScanBtnclick');
+LogFile1.LogToFile(logTimeString+'Tree AddScanBtnclick');
+ AddScanBtnclick(self);
+ end;
+end;
+
+
+Procedure TCB_IMGPSScanX.PM104Click(Sender: TObject);
+Var
+ i, n, m, ii, P, v, v1, page, imageCount: Integer;
+ FName: String;
+ CaseID, DocNo, FormID: String;
+ DocDir: String;
+ SavePath, SaveFilename: String;
+ ISB: TImageScrollBox;
+ FileRec: TSearchrec;
+
+ iGraphic, iGraphic_First, iGraphic_sec: TTiffGraphic;
+ iRect : TRect;
+ JpgGr : TJpegGraphic;
+ SaveStream : TFileStream;
+ SaveStreamA:TFileStream;
+ SaveStreamB:TFileStream;
+ cooom:integer;
+Begin
+ OpenDialog1.Filter := 'Image files|*.TIF;*.JPG';
+ If OpenDialog1.Execute Then
+ Begin
+ ISB := TImageScrollBox.Create(self);
+try
+ ShowText := _Msg('檔案加入中,請稍候');
+LogFile1.LogToFile(logTimeString+'檔案加入中開始');
+ DataLoading(True, True);
+ If TreeView1.Selected = Nil Then
+ Exit;
+ FName := OpenDialog1.FileName;
+
+ FindFirst(FName, faAnyfile, FileRec);
+
+ If FFileSizeLimit = 0 Then
+ Begin
+ FFileSizeLimit := 5 * 1024;
+ End;
+//FFileSizeLimit:=20*5*1024;
+//ShowMessage(IntToStr(FileRec.Size)+','+IntToStr(FFileSizeLimit * 1024));
+ If FileRec.Size > FFileSizeLimit * 1024 Then // 檢查檔案大小
+ Begin
+ ShowMessage(Format('目前檔案大小為 %.3f MB', [FileRec.Size / (1024*1024)]) +
+ ',已超過單一檔案匯入限制'+Format('%.1f',[FFileSizeLimit/1024])+'MB');
+ FindClose(FileRec);
+ DataLoading(false, false);
+ Exit;
+ End;
+ //MessageDlg()
+ //cooom:=StrToInt(InputBox('輸入百分比','輸入百分比',''));
+ cooom:=FJpgCompression;//20171211彩色tif採jpg壓縮的比例
+
+ FindClose(FileRec);
+ CaseID := NowCaseno;
+ imageCount := 0;
+ P := ISB.ImageCountFromFile(OpenDialog1.FileName);
+ For i := 1 To P Do
+ Begin
+ ShowText := _Msg('檔案加入中,請稍候(' + inttostr(i) + '/' + inttostr(P) + ')');
+ DataLoading(True, True);
+ ISB.LoadFromFile(FName, i);
+ DeskewImg(ISB.Graphic);
+
+
+ ISB_BW.Graphic.Assign(ISB.Graphic); //20180104
+ If ISB.Graphic.ImageFormat <> ifBlackWhite Then //20180104
+ begin
+ ConvertToBW(ISB_BW.Graphic);
+ end;
+ ///ISB_BW.SaveToFile('KKKKKKKK.tif');
+
+ iGraphic_First := TTiffGraphic.Create;
+ iGraphic_sec := TTiffGraphic.Create;
+
+
+ //ShowMessage(IntToStr(iGraphic_First.Palette.palNumEntries)); //彩色 會為0 黑白 為2
+
+ MpsGetBarcode(ISB_BW.Graphic, MpsBarcodeinf); //判斷A3 有用FormID 所以要先辨條碼
+ For n := 1 To MpsBarcodeinf.Count Do
+ Begin
+ If (MpsBarcodeinf.r180[n] <> 0) and (Length(MpsBarcodeinf.Text[n])=FormIDLength) Then // 依條碼角度轉影像
+ Begin
+ Rotate(ISB.Graphic, MpsBarcodeinf.r180[n]);
+ //MpsGetBarcode(iGraphic_First, MpsBarcodeinf);
+ Break;
+ End;
+ End;
+
+ iGraphic_First.Assign(ISB.Graphic);
+ //有必要的話先把影像轉正 再開始切圖
+ If CheckNeedCrop(iGraphic_First) Then
+ Begin
+ // 先取右邊的影像
+ iRect.Left := ISB.Graphic.Width Div 2;
+ iRect.Right := ISB.Graphic.Width;
+ iRect.Top := 0;
+ iRect.Bottom := ISB.Graphic.Height;
+ CropImg(iGraphic_First, iRect);
+
+ iGraphic_sec.Assign(ISB.Graphic);
+ // 再取左邊的影像
+ iRect.Left := 0;
+ iRect.Right := ISB.Graphic.Width Div 2;
+ iRect.Top := 0;
+ iRect.Bottom := ISB.Graphic.Height;
+ CropImg(iGraphic_sec, iRect);
+ End;
+
+ iGraphic := iGraphic_First;
+
+ While Not iGraphic.IsEmpty Do
+ Begin
+ If (TreeView1.Selected = NewTreeNode) Or
+ (TreeView1.Selected = MyTreeNode1) Then
+ Begin
+ SaveFilename := '';
+ ISB_BW.Graphic.Assign(iGraphic); //20180104
+ If iGraphic.ImageFormat <> ifBlackWhite Then //20180104
+ begin
+ ConvertToBW(ISB_BW.Graphic);
+ end;
+ MpsGetBarcode(ISB_BW.Graphic, MpsBarcodeinf);
+//ShowMessage(IntToStr(MpsBarcodeinf.Count));
+ For n := 1 To MpsBarcodeinf.Count Do
+ Begin
+ If (MpsBarcodeinf.r180[n] <> 0) and (Length(MpsBarcodeinf.Text[n])=FormIDLength) Then // 依條碼角度轉影像
+ Begin
+ Rotate(iGraphic, MpsBarcodeinf.r180[n]);
+ MpsGetBarcode(ISB_BW.Graphic, MpsBarcodeinf);
+ Break;
+ End;
+ End;
+//ShowMessage('XXX '+IntToStr(MpsBarcodeinf.Count));
+ FormID := BarCode2FormID;
+//ShowMessage('FormID='+FormID);
+ // 取出FormID
+ SaveFilename := FormID;
+ If (TreeView1.Selected = NewTreeNode) Then
+ Begin
+ If FindDivFormCode(FormID) Then // 只找分案頁上的案件條碼
+ Begin
+ imageCount := 0;
+ ClearView(1);
+ ContextList.Clear;
+ CaseID := BarCode2CaseID;
+ If DirectoryExists(ImageSavePath + CaseID + '\') Then
+ Begin
+ _DelTree(ImageSavePath + CaseID + '\');
+ SetCaseList('D', -1, CaseID);
+ End;
+ End;
+ If CaseID = '' Then
+ Begin
+ CaseID := GetNoNameCase(ImageSavePath);
+ ContextList.Clear;
+ End;
+ End;
+ SavePath := ImageSavePath + CaseID + '\';
+ Str2Dir(SavePath);
+
+ DocNo := FormCode2DocNo(FormID);
+ DocDir := FindLastestDocDir(CaseID, DocNo);
+ if (FMode='ESCAN') and (FModeName='補件掃描') then
+ begin
+ DocDir := FindLastestDocDirForPage(CaseID, DocNo,FormID);
+//ShowMessage('DocDir='+DocDir);
+ end;
+
+ If DocNoNeedDiv(DocNo) Then // 要分份數
+ Begin
+ If ((FormCode2Page(FormID) = '01') And
+ (GetDocDir_Page(CaseID, DocDir) > 0)) Or (DocDir = '') Then
+ begin
+ DocDir := DocNo2DocNoDir(ImageSavePath + CaseID + '\', DocNo);
+ end;
+ End
+ Else // 不分份數
+ Begin
+ If DocNo <> '' Then
+ DocDir := DocNo
+ Else // Attach 附件
+ DocDir := DocNo2DocNoDir(ImageSavePath + CaseID + '\', DocNo);
+ End;
+
+ If (Not DirectoryExists(ImageSavePath + CaseID + '\' + DocDir + '\'))
+ And (DocDir <> AttName) Then
+ SetDocNoList('A', -1, CaseID, DocDir, '1');
+ SavePath := ImageSavePath + CaseID + '\' + DocDir + '\';
+ Str2Dir(SavePath);
+ ContextList.Clear;
+ If FileExists(SavePath + 'Context.dat') Then
+ ContextList.LoadFromFile(SavePath + 'Context.dat');
+
+ WriteCaseIndex(ImageSavePath + CaseID + '\');
+ // 寫入案件索引
+ If SaveFilename = '' Then // 附件
+ SaveFilename := Add_Zoo(ContextList.Count + 1, 3) + ext
+ Else
+ SaveFilename := Add_Zoo(ContextList.Count + 1, 3) + '_' +
+ SaveFilename + ext;
+
+ For n := 1 To MpsBarcodeinf.Count Do
+ Begin
+ If (MpsBarcodeinf.r180[n] <> 0) and (Length(MpsBarcodeinf.Text[n])=FormIDLength) Then // 依條碼角度轉影像
+ Begin
+ Rotate(iGraphic, MpsBarcodeinf.r180[n]);
+ MpsGetBarcode(ISB_BW.Graphic, MpsBarcodeinf);
+ Break;
+ End;
+ End;
+//ShowMessage(IntToStr(iGraphic.Palette.palNumEntries));
+ if iGraphic.ImageFormat = ifBlackWhite then //20200806 出現無法匯入,是因color256無法壓JPEG,待報會後再開啟
+ begin
+ iGraphic.Compression:=tcGroup4;
+ end
+ else if iGraphic.ImageFormat= ifColor256 then
+ begin
+ ConverttoGray(iGraphic);
+ iGraphic.Compression:=tcJPEG;
+ iGraphic.JpegQuality:=cooom;
+ end
+ else if (iGraphic.ImageFormat = ifTrueColor) or (iGraphic.ImageFormat = ifGray256) then
+ begin
+ iGraphic.Compression:=tcJPEG;
+ iGraphic.JpegQuality:=cooom;
+ end
+ else
+ begin
+ iGraphic.Compression:=tcLZW;
+ end;
+
+ {if (iGraphic.Palette.palNumEntries = 0) or (iGraphic.Palette.palNumEntries = 256) then //20171130 彩色 會為0 黑白 為2 灰階256 //20200806拿掉
+ begin
+ iGraphic.Compression:=tcJPEG;
+ iGraphic.JpegQuality:=cooom;
+ end;}
+
+ If LowerCase(ExtractFileExt(SavePath + SaveFilename)) = '.tif' Then
+ Begin
+ If FileExists(SavePath + SaveFilename) Then
+ SaveStream := TFileStream.Create(SavePath + SaveFilename, fmOpenReadWrite)
+ Else
+ SaveStream := TFileStream.Create(SavePath + SaveFilename, fmCreate);
+ Try
+ SaveStream.Seek(0, soFromBeginning);
+ iGraphic.AppendToStream(SaveStream);
+ Finally
+ SaveStream.Free;
+ End;
+ End
+ Else If LowerCase(ExtractFileExt(SavePath + SaveFilename))
+ = '.jpg' Then
+ Begin
+ If FileExists(SavePath + SaveFilename) Then
+ DeleteFile(SavePath + SaveFilename);
+ // SaveStream := TFileStream.Create( PEFileName ,fmCreate );
+ JpgGr := TJpegGraphic.Create;
+ Try
+ JpgGr.Assign(iGraphic);
+ JpgGr.SaveQuality := 30;
+ // JpgGr.AppendToStream(SaveStream);
+ JpgGr.SaveToFile(SavePath + SaveFilename);
+ Finally
+ JpgGr.Free;
+ // SaveStream.Free;
+ End;
+ End;
+
+ SetContextList('A', -1, CaseID, DocDir, SaveFilename);
+ If (TreeView1.Selected = NewTreeNode) Then
+ Begin
+ If imageCount = 0 Then
+ Begin
+ SetCaseList('A', -1, CaseID);
+ MyTreeNode1 := TreeView1.Items.AddChild(NewTreeNode, CaseID);
+ MyTreeNode1.ImageIndex := 2;
+ MyTreeNode1.SelectedIndex := 2;
+ Application.ProcessMessages;
+ End;
+ End;
+ inc(imageCount);
+ // DrawDocItem1(MytreeNode1,Doc_Inf_List,CaseID);
+ // DrawDocItem(MyTreeNode1,FORM_INF_List,CaseID);
+ End
+ Else If TreeView1.Selected = MyTreeNode3 Then
+ Begin
+ SavePath := ImageSavePath + CaseID + '\' + NowDocDir + '\';
+ ContextList.Clear;
+ If FileExists(ImageSavePath + CaseID + '\' + NowDocDir +
+ '\Context.dat') Then
+ ContextList.LoadFromFile(ImageSavePath + CaseID + '\' + NowDocDir +
+ '\Context.dat');
+ If NowFormCode <> '' Then
+ SaveFilename := Add_Zoo(ContextList.Count + 1, 3) + '_' +
+ NowFormCode + ext
+ Else
+ SaveFilename := Add_Zoo(ContextList.Count + 1, 3) + ext;
+
+ For n := 1 To MpsBarcodeinf.Count Do
+ Begin
+ If MpsBarcodeinf.r180[n] <> 0 Then // 依條碼角度轉影像
+ Begin
+ Rotate(iGraphic, MpsBarcodeinf.r180[n]);
+ MpsGetBarcode(iGraphic, MpsBarcodeinf);
+ Break;
+ End;
+ End;
+
+ if (iGraphic.Palette.palNumEntries = 0) or (iGraphic.Palette.palNumEntries = 256) then //20171130 彩色 會為0 黑白 為2
+ begin
+ iGraphic.Compression:=tcJPEG;
+ iGraphic.JpegQuality:=cooom;
+ end;
+
+ If LowerCase(ExtractFileExt(SavePath + SaveFilename)) = '.tif' Then
+ Begin
+ If FileExists(SavePath + SaveFilename) Then
+ SaveStream := TFileStream.Create(SavePath + SaveFilename,
+ fmOpenReadWrite)
+ Else
+ SaveStream := TFileStream.Create(SavePath + SaveFilename,
+ fmCreate);
+ Try
+ SaveStream.Seek(0, soFromBeginning);
+ iGraphic.AppendToStream(SaveStream);
+ Finally
+ SaveStream.Free;
+ End;
+ End
+
+ Else
+ Begin
+ If LowerCase(ExtractFileExt(SavePath + SaveFilename)) = '.jpg' Then
+ Begin
+ If FileExists(SavePath + SaveFilename) Then
+ DeleteFile(SavePath + SaveFilename);
+ // SaveStream := TFileStream.Create( PEFileName ,fmCreate );
+ JpgGr := TJpegGraphic.Create;
+ Try
+ JpgGr.Assign(iGraphic);
+ JpgGr.SaveQuality := 30;
+ // JpgGr.AppendToStream(SaveStream);
+ JpgGr.SaveToFile(SavePath + SaveFilename);
+ Finally
+ JpgGr.Free;
+ // SaveStream.Free;
+ End;
+ End;
+
+ End;
+ // ISB.SaveToFile(SavePath+SaveFilename);
+ ContextList.Add(SaveFilename);
+ ContextList.SaveToFile(SavePath + 'Context.dat');
+ End;
+
+ if iGraphic = iGraphic_First then
+ iGraphic := iGraphic_Sec
+ else
+ iGraphic.Assign(nil);
+
+ End //While 結束
+
+ End;
+ ClearErrini(CaseID, MyTreeNode1);
+ // 清掉檢核記錄
+ If (TreeView1.Selected = MyTreeNode1) Or
+ (TreeView1.Selected = NewTreeNode) Then
+ Begin
+ LoadImgFile;
+ End
+ Else
+ Begin
+ DrawDocItem2(MyTreeNode1, CaseID);
+ // 長出文件名稱的樹並傳回是否有申請書的影像
+ page := GetCasePage(ImageSavePath, CaseID);
+ // ShowMessage('page='+IntToStr(page));
+ MyTreeNode1.Text := Format(_Msg('%s-%d頁'), [CaseID, page]);
+ End;
+ // ShowMessage('AAAA');
+ NewTreeNodeRefresh;
+ Application.ProcessMessages;
+ DataLoading(false, false);
+
+
+finally
+ISB.Free;
+end;
+
+
+ End;
+End;
+
+
+
+procedure TCB_IMGPSScanX.PM106Click(Sender: TObject);
+var
+ i,n,x,v,v1 : Integer;
+ CopyFormID,Copy2Caseno,CopyFileName : String;
+ S : TStringlist;
+begin
+ ShowText := _Msg('複製文件中,請稍候');
+ DataLoading(True,True);
+ DocCopyForm := TDocCopyForm.Create(Self);
+ S := TStringlist.Create;
+ try
+ InitialLanguage(DocCopyForm); //載入多國語言
+ DocCopyForm.CopyFromGB.Caption := NowCaseno+DocCopyForm.CopyFromGB.Caption;
+ IF NewTreenode.Count = 1 Then
+ begin
+ Showmessage(_Msg('沒有其他可複製的文件'));
+ Exit;
+ end;
+ For i := 0 to MyTreeNode1.Count -1 do
+ begin
+ v := Pos('-',MyTreeNode1.Item[i].Text);
+ v1 := pos('{',MyTreeNode1.Item[i].Text);
+ if V1 > 0 then
+ begin
+ CopyFormID := Copy(MyTreeNode1.Item[i].Text,1,v-1);
+ DocCopyForm.CheckListBox1.Items.Add(CopyFormID);
+ end;
+ end;
+ For i := 0 to NewTreenode.Count -1 do
+ begin
+ v := Posend('-',NewTreeNode.Item[i].Text);
+ Copy2Caseno := Copy(NewTreeNode.Item[i].Text,1,v-1);
+ IF Copy2Caseno <> NowCaseno Then
+ begin
+ DocCopyForm.CheckListBox2.Items.Add(Copy2Caseno);
+ end;
+ end;
+
+ if DocCopyForm.ShowModal = mrok then
+ begin
+ If MessageDlg(_Msg('是否確定要將勾選的文件複製到勾選的編號裡?'),MtConfirmation,[Mbyes,mbcancel],0) = mrCancel Then
+ Exit;
+ ShowText := _Msg('複製中,請稍候');
+ DataLoading(True,True);
+ For i := 0 to DocCopyForm.CheckListBox2.Count -1 do
+ begin
+ IF DocCopyForm.CheckListBox2.Checked[i] Then
+ begin
+ S.Clear;
+ Copy2Caseno := DocCopyForm.CheckListBox2.Items.Strings[i];
+ ClearErrini(Copy2Caseno,MyTreeNode1); //清掉檢核記錄
+ S.LoadFromFile(ImageSavePath + Copy2Caseno +'\Context.dat');
+ For n := 0 to DocCopyForm.CheckListBox1.Count -1 do //文件
+ begin
+ If DocCopyForm.CheckListBox1.Checked[n] Then
+ begin
+ //v:= Posend('{',DocCopyForm.CheckContextList.Strings[n]);
+ //v1 := Posend('}',DocCopyForm.CheckContextList.Strings[n]);
+ //CopyFormID := Copy(DocCopyForm.CheckContextList.Strings[n],1,v-1);
+ CopyFormID := DocCopyForm.CheckListBox1.Items.Strings[n];
+ IF v = 0 Then
+ CopyFormID := '';
+ For x := 0 to ContextList.Count -1 do
+ begin
+ //Showmessage(CopyFormCode);
+ //IF CopyFormID <> '' then //有文件代號
+ // begin
+ if FileName2FormCode(ContextList.Strings[x])=CopyFormID then
+ begin
+ //CopyFileName := Add_Zoo(S.Count+1,3)+ Copy(ContextList.Strings[x],4,length(ContextList.Strings[x])-3);
+ CopyFileName := Add_Zoo(S.Count+1,3)+ FileName2NoQuene_Filename(ContextList.Strings[x]);
+ CopyFile(PWideChar(DisplayPath+ContextList.Strings[x]),PWidechar(ImageSavePath + Copy2Caseno+'\'+CopyFileName),False);
+ S.Add(CopyFileName);
+ S.SaveToFile(ImageSavePath + Copy2Caseno +'\Context.dat');
+ end;
+ // end
+
+ end;
+ end;
+ end;
+
+ end;
+ end;
+ DataLoading(False,False);
+ Showmessage(_Msg('複製完成!!'));
+ LoadImgFile;
+ end;
+ finally
+ DocCopyForm.Free;
+ DataLoading(False,False);
+ S.Free;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.PM107Click(Sender: TObject);
+begin
+ WNoteBtnClick(nil);
+end;
+
+procedure TCB_IMGPSScanX.PM108Click(Sender: TObject);
+var
+ i : Integer;
+ DocListForm : TDocListForm;
+ OldName,NewName,Ext : String;
+ NewFormID,NewFormName,CustomDocNo : String;
+begin
+ DocListForm := TDocListForm.Create(self);
+ try
+LogFile1.LogToFile(logTimeString+'Tree 歸類開始');
+ InitialLanguage(DocListForm); //載入多國語言
+ DocListForm.CheckBox1.Visible:=True;
+ for i := 1 to FORM_INF_List.Count - 1 do
+ begin
+ NewFormID := GetSQLData(FORM_INF_List,'T1.FORM_ID',i);
+ NewFormName := GetSQLData(FORM_INF_List,'T1.FORM_DESC',i);
+ if not FormIDAppear(NewFormID) then Continue; //20170816 先秀全部的
+ if (NewFormID <> FileName2FormCode(DisplayISB.FileName)) and FormIDExists(NewFormID,False,i) then
+ begin
+ DocListForm.FormIDList.Add(NewFormID+'#@#'+NewFormName);
+ With DocListForm.DocLV.Items.Add do
+ begin
+ Caption := NewFormID;
+ SubItems.Add(GetSQLData(FORM_INF_List,'T1.FORM_DESC',i));
+ end;
+ end;
+ end;
+ if DocListForm.ShowModal = mrOk then
+ begin
+ if not (DocListForm.DocLV.Selected=nil) then
+ NewFormID := DocListForm.DocLV.Selected.Caption;
+ if DocListForm.CheckBox1.Checked then
+ begin
+ //歸類到自訂文件
+ NewFormID:=DocListForm.Edit1.Text;
+
+ if Trim(DocListForm.Edit1.Text)='' then
+ begin
+ Showmessage('未輸入文件名稱');
+ Exit;
+ end;
+ if FindCustomDocName(DisplayPath,NewFormID) then
+ begin
+ Showmessage(Format('文件名稱:"%s"己存在',[NewFormID]));
+ Exit;
+ end;
+ if NowFormCode <> AttName then
+ begin
+ If Messagedlg(Format(_Msg('是否將"%s"的所有影像歸類成"%s"'),[FormCode2FormName(NowCaseNo,NowFormCode),NewFormID]),MtConfirmation,[mbyes,mbcancel],0) = mrcancel Then
+ Exit;
+ end
+ Else
+ begin
+ If Messagedlg(Format(_Msg('是否將"%s"的所有影像歸類成"%s"'),[_Msg('附件')+MyTreeNode3.Text,FormCode2FormName(NowCaseNo,NewFormID)]),MtConfirmation,[mbyes,mbcancel],0) = mrcancel Then
+ Exit;
+ end;
+ CustomDocNo := GetNewCustomDocNo(DisplayPath,NewFormID);
+//ShowMessage('CustomDocNo='+CustomDocNo);
+LogFile1.LogToFile(logTimeString+'Tree 歸類到自訂文件 CustomDocNo='+CustomDocNo);
+ ShowText := _Msg('歸類中,請稍侯');
+ DataLoading(True,True);
+ FormIDReplace(NowCaseNo,NowDocDir,NowFormCode,CustomDocNo+'010101A');
+ end
+ else
+ begin
+ //歸類到既有文件
+ if NowFormCode <> AttName then
+ begin
+ If Messagedlg(Format(_Msg('是否將"%s"的所有影像歸類成"%s"'),[FormCode2FormName(NowCaseNo,NowFormCode),FormCode2FormName(NowCaseNo,NewFormID)]),MtConfirmation,[mbyes,mbcancel],0) = mrcancel Then
+ Exit;
+ end
+ Else
+ begin
+ If Messagedlg(Format(_Msg('是否將"%s"的所有影像歸類成"%s"'),[_Msg('附件')+MyTreeNode3.Text,FormCode2FormName(NowCaseNo,NewFormID)]),MtConfirmation,[mbyes,mbcancel],0) = mrcancel Then
+ Exit;
+ end;
+ ShowText := _Msg('歸類中,請稍侯');
+ DataLoading(True,True);
+//ShowMessage('NowDocDir='+NowDocDir);
+LogFile1.LogToFile(logTimeString+'Tree 歸類到既有文件 NewFormID='+NewFormID);
+ FormIDReplace(NowCaseNo,NowDocDir,NowFormCode,NewFormID);
+
+ end;
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+ DrawDocItem2(MytreeNode1,NowCaseno);
+ DataLoading(False,False);
+ TreeView1.Selected := MyTreeNode1;
+ TreeView1Click(self);
+ end;
+
+ finally
+ DocListForm.Free;
+ end;
+
+end;
+
+procedure TCB_IMGPSScanX.PM109Click(Sender: TObject);
+var
+ S : TStringlist;
+ CaseID : String;
+begin
+ //if TreeView1.Selected = nil then Exit;
+ //if TreeView1.Selected = NewTreeNode then Exit;
+ CaseID := NowCaseno;
+ S := TStringlist.Create;
+ try
+ ClearView(1);
+ ShowText := CaseID+_Msg('檢核中,請稍候');
+ DataLoading(True,True);
+ ShowText := CaseID+_Msg('檢核中,請稍候');
+ DataLoading(True,True);
+ If OMRCheckCase(CaseID) then //有成功
+ begin
+ S.Add('Y');
+ S.SaveToFile(ImageSavePath+CaseID+'\OMRCheckOk.dat');
+ end;
+ //MyTreeNode2ReFresh(CaseID);
+ LoadImgFile;
+ TreeView1Click(nil);
+ DataLoading(False,False);
+ finally
+ S.Free;
+ end;
+ Showmessage(_Msg('檢核完成'));
+end;
+
+procedure TCB_IMGPSScanX.PM110Click(Sender: TObject);
+var
+ CustomDocName : String;
+ CustomDocNo : String;
+ DocDir : String;
+ SavePath : String;
+ ST1:TStringList;
+begin
+ if InputQuery('輸入其他文件名稱','文件名稱',CustomDocName) then
+ begin
+ if CustomDocName <> '' then
+ begin
+ if FindCustomDocName(DisplayPath,CustomDocName) then
+ begin
+ Showmessage(Format('文件名稱:"%s"己存在',[CustomDocName]));
+ Exit;
+ end;
+ ST1:=TStringList.Create;
+ CustomDocNo := GetNewCustomDocNo(DisplayPath,CustomDocName);
+ DocDir := CustomDocNo;
+ SavePath := ImageSavePath+NowCaseNo+'\'+DocDir+'\';
+ Str2Dir(SavePath);
+ SetDocNoList('A',-1,NowCaseNo,DocDir,'1');
+ DrawDocItem2(MytreeNode1,NowCaseno);
+ MyTreeNode1.Expand(True);
+ end;
+ end;
+
+end;
+
+procedure TCB_IMGPSScanX.PM111Click(Sender: TObject);
+var
+ oldCopies,NewCopies : Integer;
+ copies : String;
+begin
+ oldCopies := GetDocDirCopies(NowCaseno,NowDocDir);
+ try
+ NewCopies := Strtoint(inputBox('修改份數','請輸入修改後的份數',inttostr(oldCopies)));
+ except
+ Showmessage('輸入錯誤');
+ Exit;
+ end;
+ if (NewCopies <= 0) and (NewCopies >= 10000) then
+ begin
+ Showmessage('輸入範圍錯誤');
+ Exit;
+ end;
+
+ if (oldCopies <> NewCopies) and (NewCopies > 0) and (NewCopies < 10000) then
+ begin
+ if DocNoNeedDiv(NowDocNo) and (NewCopies = 1) and (MessageDlg('修改至1份後此文件將無法再進行份數修改,是否確定??',mtConfirmation,[mbyes,mbcancel],0)= mrcancel) then
+ Exit;
+
+ SetDocDirCopies(NowCaseno,NowDocDir,NewCopies);
+ SetRecordEditedDocDir('A',NowCaseNo,NowDocDir);
+ DrawDocItem2(MytreeNode1,NowCaseno);
+ Showmessage('修改完成');
+ end;
+
+end;
+
+procedure TCB_IMGPSScanX.PM301Click(Sender: TObject);
+begin
+ ScanColor := ifBlackWhite;
+ ScanDpi := Def_ScanDpi;
+ Ext := '.tif';
+ PM301.Checked := True;
+end;
+
+procedure TCB_IMGPSScanX.PM302Click(Sender: TObject);
+begin
+ ScanColor := ifGray256;
+ Ext := '.jpg';
+ ScanDpi := 200;
+ //Ext := '.tif';
+ PM302.Checked := True;
+end;
+
+procedure TCB_IMGPSScanX.PM303Click(Sender: TObject);
+begin
+ ScanColor := ifTrueColor;
+ Ext := '.jpg'; //20130326 yuu說理賠改存jpg
+ ScanDpi := 200;
+ //Ext := '.tif';
+ PM303.Checked := True;
+end;
+
+procedure TCB_IMGPSScanX.PM501Click(Sender: TObject);
+begin
+ DisplayISB.ZoomMode := zmFitWidth;
+ DisplayISB.AntiAliased := True;
+ SetScrollData(DisplayISB,DisplayISB.HorzScrollBar.Position,DisplayISB.VertScrollBar.Position,DisplayISB.ZoomPercent);
+end;
+
+procedure TCB_IMGPSScanX.PM502Click(Sender: TObject);
+begin
+ DisplayISB.ZoomMode := zmFitHeight;
+ DisplayISB.AntiAliased := True;
+ SetScrollData(DisplayISB,DisplayISB.HorzScrollBar.Position,DisplayISB.VertScrollBar.Position,DisplayISB.ZoomPercent);
+end;
+
+procedure TCB_IMGPSScanX.PM503Click(Sender: TObject);
+begin
+ DisplayISB.ZoomMode := zmFittoPage;
+ DisplayISB.AntiAliased := True;
+ SetScrollData(DisplayISB,DisplayISB.HorzScrollBar.Position,DisplayISB.VertScrollBar.Position,DisplayISB.ZoomPercent);
+end;
+
+procedure TCB_IMGPSScanX.PM504Click(Sender: TObject);
+begin
+ DisplayISB.ZoomMode := zmOriginalSize;
+ DisplayISB.AntiAliased := True;
+ SetScrollData(DisplayISB,DisplayISB.HorzScrollBar.Position,DisplayISB.VertScrollBar.Position,DisplayISB.ZoomPercent);
+end;
+
+procedure TCB_IMGPSScanX.PM505Click(Sender: TObject);
+begin
+ if DisplayISB.FileName = '' then Exit;
+ Panel1.Enabled := False;
+ Panel2.Enabled := False;
+ ScanMode := smReplace;
+ ScanInfo.ImageCount := 0;
+ ScanPath := DisplayPath;
+ ScanCaseno := '';
+ ScanSaveFilename := ExtractFileName(DisplayISB.FileName);
+ Try
+ StatrTwainScan;
+ Except
+ Panel1.Enabled := True;
+ Panel2.Enabled := True;
+ end;
+ Panel1.Enabled := True;
+ Panel2.Enabled := True;
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+end;
+
+procedure TCB_IMGPSScanX.PM507Click(Sender: TObject);
+var
+ i : Integer;
+ DocListForm : TDocListForm;
+ OldName,NewName,Ext : String;
+ FormID,FormName,DocNo : String;
+ PreNode2Name : String;
+ iFormID : String;
+begin
+ PreNode2Name := '';
+ if TreeView1.Selected.Parent = MyTreeNode1 then
+ PreNode2Name:= GetNode2Name(MyTreeNode2);
+ ShowText := _Msg('文件歸類中,請稍候');
+ DataLoading(True,True);
+ DocListForm := TDocListForm.Create(self);
+ try
+ InitialLanguage(PatchDlg); //載入多國語言
+ for i := 1 to FORM_INF_List.Count - 1 do
+ begin
+ FormID := GetSQLData(FORM_INF_List,'T1.FORM_ID',i);
+ FormName := GetSQLData(FORM_INF_List,'T1.FORM_DESC',i);
+ DocNo := GetSQLData(FORM_INF_List,'T1.DOC_NO',i)+GetSQLData(FORM_INF_List,'T1.DOC_VERSION',i);
+ //Showmessage(FORM_INF_List.Text);
+ //showmessage(inttostr(FORM_INF_List.Count)+#13+inttostr(self.Doc_Inf_List.Count));
+ if (FormID <> FileName2FormCode(DisplayISB.FileName)) and FormIDExists(FormID,False,i) then
+ begin
+ DocListForm.FormIDList.Add(FormID+'#@#'+FormName);
+ With DocListForm.DocLV.Items.Add do
+ begin
+ Caption := FormID;
+ SubItems.Add(FormName);
+ end;
+ end;
+ end;
+ if DocListForm.ShowModal = mrOk then
+ begin
+ OldName := ExtractFileName(DisplayISB.FileName);
+ Ext := ExtractFileExt(OldName);
+ //NewName := Copy(OldName,1,3)+'_'+TransRealFormID(DocListForm.DocLV.Selected.Caption)+Ext;
+ NewName := Add_Zoo(FileName2ScanPage(OldName),3)+'_'+DocListForm.DocLV.Selected.Caption+Ext;
+ RenameFile(DisplayPath+OldName,DisplayPath+NewName);
+ ReNameContext(DisplayPath,OldName,NewName);
+ //DrawDocItem1(MytreeNode1,Doc_Inf_List,NowCaseno); //201408280改
+ DrawDocItem2(MytreeNode1,NowCaseno);
+ //DrawDocItem(MytreeNode1,FORM_INF_List,NowCaseno);
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+ if PreNode2Name <> '' then // 回到原本點選的文件節點上
+ begin
+ for i := 0 to MyTreeNode1.Count - 1 do
+ begin
+ if GetNode2Name(MyTreeNode1.Item[i]) = PreNode2Name then
+ begin
+ TreeView1.Selected := MyTreeNode1.Item[i];
+ Break;
+ end;
+ end;
+ end;
+ TreeView1click(self);
+ //Showmessage(_Msg('歸類完成')); //20101103 User要求拿掉
+ end;
+ finally
+ DataLoading(False,False);
+ DocListForm.Free;
+ end;
+
+end;
+
+
+procedure TCB_IMGPSScanX.PM508Click(Sender: TObject);
+var
+ P : Integer;
+ inx:Integer;
+begin
+ if DisplayISB.FileName = '' then Exit;
+ if (ContextList.Count = 1) and ((FMode = 'NSCAN') or (FMode = 'ASCAN') or (FMode = 'DSCAN') or (FMode = 'ISCAN') or (FMode = 'SSCAN') or (FMode = 'MSCAN') or (FMode = 'RI_SCAN')) then
+ begin
+ if Messagedlg(_Msg('刪除後(%s)案件無影像,將刪除此案件,是否確定刪除?'),mtconfirmation,[mbyes,mbcancel],0) = mrCancel then Exit;
+ _DelTree(DisplayPath);
+ SetCaseList('D',NewTreeNode.IndexOf(MyTreeNode1),'');
+ LoadImgFile;
+ end
+ Else
+ begin
+ if Messagedlg(_Msg('是否確定刪除?'),mtconfirmation,[mbyes,mbcancel],0) = mrCancel then Exit;
+ inx := ContextList.IndexOf(ExtractFileName(DisplayISB.FileName));
+ ContextList.Delete(inx);
+ ContextList.SaveToFile(ImageSavePath + NowCaseno+'\Context.dat');
+ Context_DocnoList.Delete(inx);
+ Context_DocnoList.SaveToFile(ImageSavePath + NowCaseno+'\Context_DocNo.dat');
+ DeleteFile(DisplayISB.FileName);
+ ReSortFileName(DisplayPath);
+ ContextList.LoadFromFile(ImageSavePath + NowCaseno+'\Context.dat');
+ Context_DocnoList.LoadFromFile(ImageSavePath + NowCaseno+'\Context_DocNo.dat');
+ if FileExists(ImageSavePath + NowCaseno+'\CustomDocNo.dat') then
+ Cust_DocNoList.LoadFromFile(ImageSavePath + NowCaseno+'\CustomDocNo.dat');
+ //DrawDocItem1(MytreeNode1,Doc_Inf_List,NowCaseno); //201408280改
+ DrawDocItem2(MytreeNode1,NowCaseno);
+
+ //DrawDocItem(MytreeNode1,FORM_INF_List,NowCaseno);
+ P := ContextList.Count;
+ MytreeNode1.Text := Format(_Msg('%s-%d頁'),[NowCaseno,p]);
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+ NewTreeNodeRefresh;
+ TreeView1Click(self);
+
+ end;
+ //Showmessage(_Msg('刪除完成')); //20101101 User要求拿掉
+end;
+
+procedure TCB_IMGPSScanX.PM509Click(Sender: TObject);
+begin
+ PM401Click(nil);
+end;
+
+procedure TCB_IMGPSScanX.PM510Click(Sender: TObject);
+begin
+ DeskewImg(DisplayISB.Graphic);
+ DisplayISB.SaveToFile(DisplayISB.FileName);
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+end;
+
+procedure TCB_IMGPSScanX.PopupMenu1Popup(Sender: TObject);
+begin
+ PM101.Visible := False; //刪除
+ PM102.Visible := False; //修改案件編號
+ PM103.Visible := False; //掃瞄器加入影像
+ PM104.Visible := False; //檔案加入影像
+ PM106.Visible := False; //複製文件至其他編號
+ PM107.Visible := False; //寫備註
+ PM108.Visible := False; //歸類
+ PM109.Visible := False; //檢核此筆
+ PM110.Visible := False; //新增自訂文件
+ PM111.Visible := False; //修改份數
+
+ if (FMode = 'SAMPLESCAN') then Exit;
+
+ if TreeView1.Selected = nil then Exit;
+ if TreeView1.Selected = NewTreeNode then //新掃瞄件
+ begin
+ if (FMode = 'NSCAN') then
+ begin
+//ShowMessage('AAAA');
+ PM101.Visible := True; //刪除
+ PM103.Visible := True; //掃瞄器加入影像
+ PM104.Visible := True; //檔案加入影像
+ end;
+
+ if FModeName='異動件' then
+ begin
+ PM101.Visible := True;
+ end;
+// if FMode='ESCAN' then
+// begin
+// PM101.Visible := True;
+// end;
+ end
+ Else if TreeView1.Selected = MyTreeNode1 then //案件層
+ begin
+ PM101.Visible := True; //刪除
+
+ if FImgDelete='Y' then
+ begin
+ PM101.Visible:=True;
+ end;
+ if FImgDelete='N' then
+ begin
+ PM101.Visible:=false;
+ end;
+
+ if FMode='ESCAN' then
+ PM101.Visible:=false;
+
+ if FModeName='異動件' then
+ begin
+ PM101.Visible := True;
+ end;
+
+ if not CaseDelete_Enable(NowCaseno) then //
+ PM101.Enabled := False
+ else
+ PM101.Enabled := True;
+ PM103.Visible := True; //掃瞄器加入影像
+ //PM107.Visible := True; //寫備註
+ //PM109.Visible := True; //檢核此筆
+// if FCustDocYN <> 'N' Then
+// PM110.Visible := True; //新增自訂文件 20170914 先不在tree 中做自訂文件 讓user在縮圖做
+ PM104.Visible := True; //檔案加入影像
+ if (FMode = 'NSCAN') then
+ begin
+ PM102.Visible := True; //修改案件編號
+ end;
+// if FMode='ESCAN' then
+// begin
+// PM101.Visible := True;
+// end;
+ end
+ Else if TreeView1.Selected = MyTreeNode2 then //文件層
+ begin
+ PM101.Visible := True; //刪除
+ //PM107.Visible := True; //寫備註
+ //PM109.Visible := True; //檢核此筆
+// if FCustDocYN <> 'N' Then
+// PM110.Visible := True; //新增自訂文件
+ if FImgDelete='Y' then
+ begin
+ PM101.Visible:=True;
+ end;
+ if FImgDelete='N' then
+ begin
+ PM101.Visible:=false;
+ end;
+
+ if FModeName='異動件' then
+ begin
+ PM101.Visible := True;
+ end;
+
+ if GetUseCase('T',DisplayPath,NowDocDir) <> '' then //沒有被引用走的
+ PM101.Enabled := False //刪除
+ Else
+ PM101.Enabled := True; //刪除
+ if ((GetDocDirCopies(NowCaseno,NowDocDir) > 1) or (not DocNoNeedDiv(NowDocNo)) or (Copy(NowDocNo,1,5)='ZZZZZ')) and (NowDocNo<> 'Attach') and (NowDocNo<> 'S_Attach') then
+ PM111.Visible := True; //修改份數
+ if (FMode = 'NSCAN') then
+ PM102.Visible := True; //修改案件編號
+// if FMode='ESCAN' then
+// begin
+// PM101.Visible := True;
+// end;
+ end
+ Else if TreeView1.Selected = MyTreeNode3 then //表單層
+ begin
+ PM101.Visible := True; //刪除
+ PM104.Visible := True; //檔案加入影像
+ PM108.Visible := True; //歸類
+ PM103.Visible := True; //掃瞄器加入影像
+// if FCustDocYN <> 'N' Then
+// PM110.Visible := True; //新增自訂文件
+ if GetFormIDPage(ContextList,NowFormCode) < 1 Then
+ begin
+ PM108.Visible := False; //歸類
+ end;
+ if FImgDelete='Y' then
+ begin
+ PM101.Visible:=True;
+ end;
+ if FImgDelete='N' then
+ begin
+ PM101.Visible:=false;
+ end;
+
+ if FModeName='異動件' then
+ begin
+ PM101.Visible := True;
+ end;
+
+ if GetUseCase('T',DisplayPath,NowDocDir) <> '' then //被引用走的
+ begin
+ PM101.Enabled := False; //刪除
+ PM104.Enabled := False; //檔案加入影像
+ PM108.Enabled := False; //歸類
+ end
+ Else
+ begin
+ PM101.Enabled := True; //刪除
+ PM104.Enabled := True; //檔案加入影像
+ PM108.Enabled := True; //歸類
+ end;
+
+ if (FMode = 'NSCAN') then
+ begin
+ PM102.Visible := True; //修改案件編號
+ end;
+ end;
+
+
+
+end;
+
+procedure TCB_IMGPSScanX.PopupMenu4Popup(Sender: TObject);
+begin
+ PM401.Visible := False;
+ PM402.Visible := False;
+ PM403.Visible := False;
+ PM404.Visible := False;
+ if FMode = 'SAMPLESCAN' then Exit;
+ if (TreeView1.Selected.Level =2) or (TreeView1.Selected.Level =3) then
+ begin
+ PM402.Visible := True;
+ PM403.Visible := True;
+ PM404.Visible := True;
+ end;
+ PM401.Visible := True;
+ if (TreeView1.Selected <> MyTreeNode2) or (FMode = 'RSCAN') then
+ PM401.Visible := False;
+end;
+
+procedure TCB_IMGPSScanX.PopupMenu5Popup(Sender: TObject);
+begin
+ PM501.Visible := False;
+ PM502.Visible := False;
+ PM503.Visible := False;
+ PM504.Visible := False;
+ PM505.Visible := False;
+ PM506.Visible := False;
+ PM507.Visible := False;
+ PM508.Visible := False;
+ PM509.Visible := False;
+ PM510.Visible := False;
+ if FMode = 'SAMPLESCAN' then Exit;
+ if (DisplayISB.FileName <> '') then
+ begin
+ PM501.Visible := True;
+ PM502.Visible := True;
+ PM503.Visible := True;
+ PM504.Visible := True;
+ //PM505.Visible := True;
+ //PM506.Visible := True;
+ //PM507.Visible := True;
+ //PM508.Visible := True;
+ //PM509.Visible := True;
+ //PM510.Visible := True;
+ end;
+ if (TreeView1.Selected <> MyTreeNode2) or (FMode = 'RSCAN') or (FMode = 'ESCAN') then
+ PM509.Visible := False;
+end;
+
+procedure TCB_IMGPSScanX.PopupMenu6Popup(Sender: TObject);
+begin
+ PM601.Visible := True; //歸類
+ PM602.Visible := True; //自行定義文件名稱
+ PM603.Visible := False; //掃描替換此頁
+ PM604.Visible := False; //歪斜矯正
+ PM605.Visible := True; //刪除
+
+// if FMode='ESCAN' then
+// begin
+// PM601.Visible := False; //歸類
+// PM602.Visible := False; //自行定義文件名稱
+// PM603.Visible := False; //掃描替換此頁
+// PM604.Visible := False; //歪斜矯正
+// PM605.Visible := False; //刪除
+// end;
+
+ if ((NowDocNo = 'Attach') or (NowDocNo = 'S_Attach')) and (FCustDocYN <> 'N') then
+ begin
+ PM602.Visible := True; //自行定義文件名稱
+ //PM603.Visible := True; //掃描替換此頁
+ PM604.Visible := True; //歪斜矯正
+ PM601.Visible := True; //歸類
+ PM605.Visible := True; //刪除
+ end;
+
+ if FModeName<>'異動件' then
+ begin
+ if (FImgDelete='Y') then
+ begin
+ PM605.Enabled:=True;
+ end;
+ if FImgDelete='N' then
+ begin
+ PM605.Enabled:=false;
+ end;
+ end;
+
+
+
+
+ if CheckSelectImg_UseCase(DisplayPath,NowCaseNo) then //選擇的影像不可有引用的
+ begin
+ PM601.Enabled := False; //歸類
+ PM605.Enabled := False; //刪除
+ end;
+
+
+end;
+
+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;
+
+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+'已有範本,是否取代?',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;
+
+procedure TCB_IMGPSScanX.ScrollBar1Change(Sender: TObject);
+begin
+ Exit;
+ If (TreeView1.Selected = MyTreenode1) or (TreeView1.Selected.ImageIndex = 6) Then
+ begin
+ view_image_FormCode(DisplayPath,'ShowAll',ScrollBar1.Position,1);
+ end
+ Else IF (TreeView1.Selected = MyTreenode2) then
+ begin
+ view_image_FormCode(DisplayPath,NowDocNo,ScrollBar1.Position,1);
+ end
+ Else if (TreeView1.Selected = MyTreenode3) then
+ begin
+ view_image_FormCode(DisplayPath,NowFormCode,ScrollBar1.Position,1);
+ end;
+
+end;
+
+procedure TCB_IMGPSScanX.ScrollBox1MouseEnter(Sender: TObject);
+begin
+ScrollBox1.SetFocus;
+end;
+
+procedure TCB_IMGPSScanX.SelectScanBtnClick(Sender: TObject);
+begin
+ Panel1.Enabled := False;
+ Panel2.Enabled := False;
+ scanner.SelectScanner;
+ Panel1.Enabled := True;
+ Panel2.Enabled := True;
+end;
+
+procedure TCB_IMGPSScanX.StatusBar1DblClick(Sender: TObject);
+begin
+ Button3.Visible := not Button3.Visible;
+ Button4.Visible := not Button4.Visible;
+ if (GetKeyState(VK_CONTROL) < 0) Then
+ begin
+ ExportBt.Visible := not ExportBt.Visible;
+ ImportBt.Visible := not ImportBt.Visible;
+ end
+ Else
+ begin
+ Memo1.Visible := not Memo1.Visible;
+ Display1.Visible := not Display1.Visible;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.ActiveFormCreate(Sender: TObject);
+var IScrollBox : TImageScrollBox;
+ i :integer;
+begin
+ {HotKeyId1 := GlobalAddAtom('MyHotKey1')-$C000;
+ HotKeyId2 := GlobalAddAtom('MyHotKey2')-$C000;
+ HotKeyId3 := GlobalAddAtom('MyHotKey3')-$C000;
+ HotKeyId4 := GlobalAddAtom('MyHotKey4')-$C000;
+ RegisterHotKey(handle,HotKeyId1,0,VK_UP); //printscreen
+ RegisterHotKey(handle,HotKeyId1,0,VK_Down); //printscreen }
+ PostMessage(Handle,WM_ACTIVATE,WA_CLICKACTIVE,0);
+ vmode := 1;
+ DesableImage;
+ For i:= 1 to 8 do begin
+ IScrollBox := TImageScrollBox( FindComponent('ISB'+IntToStr(i)));
+ IScrollBox.MouseMode := mmUser;
+ iScrollBox.ZoomMode := zmFullPage;
+ end;
+ Sleep(500);
+ Timer1.Enabled := True;
+end;
+
+procedure TCB_IMGPSScanX.ActiveFormKeyUp(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+begin
+ if Edit1.Focused then
+ begin
+ if selectISB = nil then Exit;
+
+ if (Key =VK_UP) then
+ begin
+ 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;
+ if (Key =VK_Down) then
+ begin
+ 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);
+ //scrollBox1.VertScrollBar.ScrollPos := SelectISB.Parent.Top+SelectISB.Parent.Height;
+ //ISBClick(TImageScrollBox(FindComponent(ISBName+'2')));
+ end;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.AddAttFileLBClick(Sender: TObject);
+var
+ i : Integer;
+ Addfile : String;
+begin
+ OpenDialog1.Filter := 'PDF files|*.pdf';
+ OpenDialog1.Options := [ofAllowMultiSelect];
+ if OpenDialog1.Execute then
+ begin
+ ShowText :=_Msg('檔案加入中,請稍候');
+ DataLoading(True,True);
+ for i := 0 to OpenDialog1.Files.Count - 1 do
+ begin
+ AddFile := HTTPEncode(UTF8Encode(ExtractFileName(OpenDialog1.Files.Strings[i])));
+ if FileExists(ImageSavePath+NowCaseno+'\'+AddFile) then
+ begin
+ if Messagedlg(Format(_msg('%s己存在,是否覆蓋??'),[Addfile]),mtconfirmation,[mbyes,mbcancel],0) = mrcancel Then
+ Continue;
+ SetAttContextList('D',-1,NowCaseno,AddFile);
+ end;
+ // AttFileGB.Visible := True; //附加電子檔窗 //20120207楊玉說不在這加電子檔先拿掉
+ // Splitter2.Visible := True;
+ CopyFile(Pchar(OpenDialog1.Files.Strings[i]),Pchar(ImageSavePath+NowCaseno+'\'+AddFile),False);
+ SetAttContextList('A',-1,NowCaseno,AddFile);
+ LoadAttFile(NowCaseno);
+ end;
+ end;
+ DataLoading(False,False);
+end;
+
+procedure TCB_IMGPSScanX.AddCredit1RGClick(Sender: TObject);
+begin
+ if DisplayPath <> '' then
+ begin
+ Case AddCredit1RG.ItemIndex of
+ -1:Case_loandoc := '';
+ 0:Case_loandoc := 'Y';
+ 1:Case_loandoc := 'N';
+ end;
+ WriteCaseIndex(DisplayPath);
+ end;
+end;
+
+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;
+
+procedure TCB_IMGPSScanX.AttListBoxClick(Sender: TObject);
+begin
+ DelAttFileLB.Enabled := False;
+ if AttListBox.ItemIndex >= 0 then
+ DelAttFileLB.Enabled := True;
+end;
+
+procedure TCB_IMGPSScanX.AttListBoxDblClick(Sender: TObject);
+var
+ AttFile : String;
+begin
+ if AttListBox.ItemIndex < 0 then Exit;
+
+ AttFile := HTTPEncode(UTF8Encode(AttListBox.Items.Strings[AttListBox.ItemIndex]));
+ if FileExists(DisplayPath+AttFile) then
+ ShellExecute(Application.Handle,'open',PChar(DisplayPath+AttFile),nil,nil,SW_SHOW)
+ else
+ Showmessage(Format(_Msg('找不到檔案:%s'),[AttFile]));
+end;
+
+procedure TCB_IMGPSScanX.BtnMouseEnter(Sender: TObject);
+begin
+ AddToolTip(TBitBtn(Sender).Handle,nil,0,Pchar(TBitBtn(Sender).Hint),nil,0,0);
+end;
+
+procedure TCB_IMGPSScanX.Button3Click(Sender: TObject);
+begin
+ //Showmessage(CreateDocNo_Info(NowCaseNo)+#13+'******'+#13+CreateCustDocNo_Info(NowCaseNo));
+ //Showmessage(NowSelectFileList.Text);
+ //SetIn_WH_DocNo;
+ //CreateIn_WH(self.NowCaseno);
+ //Create_Cust_DocDir(NowCaseNo);
+ //Showmessage(self.GetDocNoDir(self.DisplayPath,'111'));
+ //Case2upload(NowCaseNo);
+ //mkdir(DisplayPath+'Test\');
+ //Download2Case(DisplayPath+'Upload\',DisplayPath+'Test\');
+ //CreateFormID_FormName(DisplayPath); //產生FormID_FormName.dat
+ //CreateDocNo_DocName(DisplayPath); //產生DocNo_Name.dat
+ //Showmessage(CreateDocNo_Info(DisplayPath)); //產生 Docno,份數,頁數;Docno,份數,頁數 的回傳字串
+ //lb1.Caption:='AAAAAAAAAAA';
+ //Showmessage(CreateDocnoFrom_Info(NowCaseno));
+ //Showmessage(self.CreateCustDocNoFrom_Info(NowCaseno));
+ //ShowMessage('FMaxUploadSize='+FMaxUploadSize);
+ //initkscan;
+ showmessage('FUrl='+FUrl+#10#13+
+ 'FCaseID='+FCaseID+#10#13+
+ 'FMode='+FMode+#10#13+
+ 'FModeName='+FModeName+#10#13+
+ 'FWork_no='+FWork_no+#10#13+
+ 'FUserID='+FUserID+#10#13+
+ 'FUserName='+FUserName+#10#13+
+ 'FUserUnit='+FUserUnit+#10#13+
+ 'FData='+FData+#10#13+
+ 'FVerify='+FVerify+#10#13+
+ 'FReWrite='+FReWrite+#10#13+
+ 'FLanguage='+FLanguage+#10#13+
+ 'FLoanDoc_Value='+FLoanDoc_Value+#10#13+
+ 'FLoanDoc_Enable='+FLoanDoc_Enable+#10#13+
+ 'FUseProxy='+FUseProxy+#10#13+
+ 'FC_DocNoList='+FC_DocNoList+#10#13+
+ 'FC_DocNameList='+FC_DocNameList+#10#13+
+ 'FFixFileList='+FFixFileList+#10#13+
+ 'FIs_In_Wh='+FIs_In_Wh+#10#13+
+ 'FOldCaseInfo='+FOldCaseInfo+#10#13+
+ 'FPrintyn='+FPrintyn+#10#13+
+ 'FIs_OldCase='+FIs_OldCase+#10#13+
+ 'FCustDocYN='+FCustDocYN);
+ ShowMessage('FImgDPI='+IntToStr(FImgDPI)+#10#13+
+ 'FScanColor='+ IntToStr(FScanColor)+#10#13+
+ 'FFileSizeLimit='+ IntToStr(FFileSizeLimit) +#10#13+
+ 'FCaseNoLength='+ IntToStr(FCaseNoLength) +#10#13+
+ 'FImgDelete='+ FImgDelete+#10#13+
+ 'FIsExternal='+ FIsExternal+#10#13+
+ 'FWH_category='+FWH_category+
+ 'FCheck_main_form='+ FCheck_main_form+#10#13+
+ 'FMaxUploadSize='+FMaxUploadSize);
+ //FImgDelete:='Y';
+ LoadImgFile;
+ { ShowMessage('UpLPoint='+IntToStr(UpLPoint.X)+','+IntToStr(UpLPoint.Y)+#10#13+
+ 'UpRPoint='+IntToStr(UpRPoint.X)+','+IntToStr(UpRPoint.Y)+#10#13+
+ 'DownLPoint='+IntToStr(DownLPoint.X)+','+IntToStr(DownLPoint.Y)+#10#13+
+ 'DownRPoint='+IntToStr(DownRPoint.X)+','+IntToStr(DownRPoint.Y));
+ }
+end;
+
+procedure TCB_IMGPSScanX.Button4Click(Sender: TObject);
+var
+ i:integer;
+ str:String;
+begin
+ //Showmessage(self.Doc_Inf_List.Text);
+ //LoadImgFile;
+ //LoadImgFile1;
+ //ISB1.MouseMode:=mmAmplifier;
+
+ str:='';
+ for I := 1 to 11 do // 看 OMRErrInfo 的內容
+ begin
+ str:=str+BoolToStr(OMRErrInfo[i].Display,true)+','
+ +BoolToStr(OMRErrInfo[i].Ignore,true)+','+OMRErrInfo[i].Info+','
+ +OMRErrInfo[i].Mode+#10#13;
+ end;
+ ShowMessage('OMRErrInfo='+str);
+ ShowMessage('Doc_Inf_List='+Doc_Inf_List.Text);
+ ShowMessage('DM_FORM_INF_List='+DM_FORM_INF_List.Text) ;
+ ShowMessage('FORM_INF_List='+FORM_INF_List.Text) ;
+ ShowMessage('CHECK_RULE_INF_List='+CHECK_RULE_INF_List.Text) ;
+ ShowMessage('MEMO_INF_List='+MEMO_INF_List.Text) ;
+ ShowMessage('WORK_INF_List='+WORK_INF_List.Text) ;
+ ShowMessage('LASTEST_FORM_INF_List='+LASTEST_FORM_INF_List.Text) ;
+ ShowMessage('SampleFormIDList='+SampleFormIDList.Text);
+ ShowMessage('ExistImgList='+ExistImgList.Text);
+ ShowMessage('LastInitFormidList='+LastInitFormidList.Text);
+ ShowMessage('IN_WH_DocNoList='+IN_WH_DocNoList.Text);
+
+// SampleFormIDList.Add('31A00101011706A');
+// SampleFormIDList.Add('31A00101021706A');
+// SampleFormIDList.Add('31A00101031706A');
+end;
+
+procedure TCB_IMGPSScanX.StatrTwainScan;
+var ScanInfo : TScanInfo;
+ i : Integer;
+begin
+ if not Scanner.IsConfigured then
+ begin
+ ShowMessage(_Msg('TWAIN 掃瞄驅動尚未安裝'));
+ Exit;
+ end;
+ FillChar(ScanInfo, SizeOf(ScanInfo), 0);
+ ScanInfo.MultiPage := True;
+ ScanInfo.ImageCount := 0;
+ ScanInfo.Graphic := TTiffGraphic.Create;
+ try
+ ISB := nil; //規零
+//ShowMessage(IntToStr(ScanDpi));
+ Scanner.RequestedXDpi := ScanDpi;
+ Scanner.RequestedYDpi := ScanDpi;
+ Scanner.RequestedImageFormat := ScanColor;
+ Scanner.ShowUI := TwainShowUI;
+
+ Try
+ Scanner.OpenSource;
+ Scanner.Duplex := ScanDuplex; //雙面
+
+ if FMode='SAMPLESCAN' then
+ Scanner.Duplex:=False;
+
+ //Scanner.FEEDERENABLED := not ScanFlatCB.Checked; // 先拿掉平台
+ If ScanImgSetUse Then
+ begin
+ Scanner.ScanBrightness := ScanBright;
+ Scanner.ScanContrast := ScanContrast;
+ end;
+ except
+ Showmessage(_Msg('掃瞄器發生錯誤!!'));
+ Scanner.CloseSource;
+ Exit;
+ end;
+ try
+ Try
+ Scanner.AcquireWithSourceOpen( OnAcquire, LongInt(@ScanInfo));
+ Except
+ Scanner.CloseSource;
+ end;
+ finally
+ Scanner.CloseSource;
+ end;
+ finally
+ Scanner.CloseSource;
+ ScanInfo.Graphic.Free;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.OnAcquire( const DibHandle : THandle;
+ const XDpi : Word;
+ const YDpi : Word;
+ const CallBackData : LongInt );
+var
+ pScanInfo : TpScanInfo;
+ SaveFileName : String;
+ SaveStream : TFileStream;
+ strResults : TBarcodeStringResult;
+ DeleteStm : TMemoryStream;
+ isDelete : Boolean;
+ iGraphic,iGraphic_First,iGraphic_sec : TTiffGraphic;
+ iRect : TRect;
+ JpgGr : TJpegGraphic;
+ i : Integer;
+ TagTxt : String;
+ function Deletepage(Graphic:TDibGraphic;BlankSize:Integer):Boolean;
+ begin
+ DeleteStm := TMemoryStream.Create;
+ DeleteStm.Seek(0,soFromBeginning);
+ Graphic.AppendToStream(DeleteStm);
+
+ //DeleteStm.LoadFromFile(Path+'temp.tif');
+ //Isb1.Graphic.SaveToStream(DeleteStm);
+ //Isb1.Graphic.AppendToStream(DeleteStm);
+ if DeleteStm.Size < BlankSize Then
+ Result:= True
+ Else
+ Result := False;
+
+ DeleteStm.Free;
+ //DeleteFile(Path+'temp.tif');
+ end;
+begin
+ pScanInfo := TpScanInfo(CallBackData);
+ isDelete := False;
+
+ if pScanInfo^.MultiPage then
+ begin
+ pScanInfo^.Graphic.AssignFromDibHandle(DibHandle);
+ pScanInfo^.Graphic.XDotsPerInch := XDpi;
+ pScanInfo^.Graphic.YDotsPerInch := YDpi;
+ TagTxt := 'height:'+inttostr(pScanInfo^.Graphic.Height)+',width:'+inttostr(pScanInfo^.Graphic.Width);
+ if pScanInfo^.Graphic.ImageFormat = ifBlackWhite then
+ begin
+ ImageScrollBox1.Graphic.Assign(pScanInfo^.Graphic);
+ ImageScrollBox1NewGraphic(ImageScrollBox1.Graphic);
+
+ pScanInfo^.Graphic.Compression := tcGroup4;
+ MpsGetBarcode(pScanInfo^.Graphic,MpsBarcodeinf);
+ For i := 1 to MpsBarcodeinf.count do
+ begin
+ If (MpsBarcodeinf.r180[i] <> 0) and (Length(MpsBarcodeinf.Text[i])=FormIDLength) Then
+ begin
+ Rotate(pScanInfo^.Graphic,MpsBarcodeinf.r180[i]);
+ MpsGetBarcode(pScanInfo^.Graphic,MpsBarcodeinf); //旋轉後再重取一次條碼資訊
+ Break;
+ end;
+ end;
+
+ //影像反向
+ IF ScannerReverse then
+ NegativeImg(pScanInfo^.Graphic);
+ //傾斜矯正
+ IF ScanDeskew Then
+ DeskewImg(pScanInfo^.Graphic);
+ //清黑邊
+ IF BoardClear then
+ CleanupBorder(pScanInfo^.Graphic);
+ end
+ else if pScanInfo^.Graphic.ImageFormat = ifTrueColor then
+ begin
+ //Ext := '.jpg';
+ ImageScrollBox1.Graphic.Assign(pScanInfo^.Graphic);
+ //ImageScrollBox1NewGraphic(ImageScrollBox1.Graphic);
+ MpsGetBarcode(ISB_BW.Graphic,MpsBarcodeinf);
+ For i := 1 to MpsBarcodeinf.count do
+ begin
+ If (MpsBarcodeinf.r180[i] <> 0) and (Length(MpsBarcodeinf.Text[i])=FormIDLength) Then
+ begin
+ Rotate(ISB_BW.Graphic,MpsBarcodeinf.r180[i]);
+ MpsGetBarcode(ISB_BW.Graphic,MpsBarcodeinf); //旋轉後再重取一次條碼資訊
+ Break;
+ end;
+ end;
+ pScanInfo^.Graphic.Compression := tcJpeg;
+ pScanInfo^.Graphic.JpegQuality := FJpgCompression;
+ end
+ else if pScanInfo^.Graphic.ImageFormat = ifColor256 Then
+ begin
+ //Ext := '.jpg';
+ ConvertToGray(pScanInfo^.Graphic);
+ pScanInfo^.Graphic.Compression := tcJpeg;
+ pScanInfo^.Graphic.JpegQuality := FJpgCompression;
+ end
+ else if pScanInfo^.Graphic.ImageFormat = ifGray256 Then
+ begin
+ //Ext := '.jpg';
+ ImageScrollBox1.Graphic.Assign(pScanInfo^.Graphic);
+ ImageScrollBox1NewGraphic(ImageScrollBox1.Graphic);
+ MpsGetBarcode(ISB_BW.Graphic,MpsBarcodeinf);
+ For i := 1 to MpsBarcodeinf.count do
+ begin
+ If (MpsBarcodeinf.r180[i] <> 0) and (Length(MpsBarcodeinf.Text[i])=FormIDLength) Then
+ begin
+ Rotate(ISB_BW.Graphic,MpsBarcodeinf.r180[i]);
+ MpsGetBarcode(ISB_BW.Graphic,MpsBarcodeinf); //旋轉後再重取一次條碼資訊
+ Break;
+ end;
+ end;
+ pScanInfo^.Graphic.Compression := tcJpeg;
+ pScanInfo^.Graphic.JpegQuality := FJpgCompression;
+//ShowMessage(IntToStr(pScanInfo^.Graphic.JpegQuality));
+//if pScanInfo^.Graphic.Compression = tcJpeg then
+//begin
+//ShowMessage('jpg');
+//end;
+
+ end
+ else
+ begin
+ //Ext := '.tif';
+ pScanInfo^.Graphic.Compression := tcPackBits;
+ end;
+
+ end;
+ //Application.ProcessMessages;
+ iGraphic_First := TTiffGraphic.Create;
+ iGraphic_sec := TTiffGraphic.Create;
+ //iGraphic := TTiffGraphic.Create;
+ try
+ iGraphic_First.Assign(pScanInfo^.Graphic);
+ //Application.ProcessMessages;
+ if CheckNeedCrop(iGraphic_First) Then
+ begin
+ iRect.Left := pScanInfo^.Graphic.Width div 2; //先取左邊的影像
+ iRect.Top := 0;
+ iRect.Right := pScanInfo^.Graphic.Width;
+ iRect.Bottom := pScanInfo^.Graphic.Height;
+ CropImg(iGraphic_First,iRect);
+
+ iGraphic_Sec.Assign(pScanInfo^.Graphic); //再取右邊的影像
+ iRect.Left := 0;
+ iRect.Top := 0;
+ iRect.Right := pScanInfo^.Graphic.Width div 2;
+ iRect.Bottom := pScanInfo^.Graphic.Height;
+ CropImg(iGraphic_Sec,iRect);
+ end;
+ //iGraphic.Assign(iGraphic_First);
+ iGraphic := iGraphic_First;
+
+ if iGraphic.ImageFormat=ifGray256 then //20180104
+ begin
+ iGraphic.Compression:=tcJPEG;
+ iGraphic.JpegQuality:=FJpgCompression;
+ end;
+ if iGraphic.ImageFormat=ifTrueColor then //20180104
+ begin
+ iGraphic.Compression:=tcJPEG;
+ iGraphic.JpegQuality:=FJpgCompression;
+ end;
+
+//ShowMessage('WTF');
+ while not iGraphic.IsEmpty do
+ begin
+ //Application.ProcessMessages;
+ IF (not DeviceDelete) or (not Deletepage(iGraphic,DeviceDeleteSize)) Then
+ begin
+ ImageScrollBox1.Graphic.Assign(iGraphic);
+ ImageScrollBox1NewGraphic(ImageScrollBox1.Graphic);
+
+ MpsGetBarcode(ISB_BW.Graphic,MpsBarcodeinf);
+ For i := 1 To MpsBarcodeinf.Count Do
+ Begin
+ If MpsBarcodeinf.r180[i] <> 0 Then // 依條碼角度轉影像
+ Begin
+ Rotate(iGraphic, MpsBarcodeinf.r180[i]);
+ Break;
+ End;
+ End;
+
+ if iGraphic.ImageFormat=ifGray256 then //20180104 因此旋轉後變為回packbits 所以要改為jpeg
+ begin
+ iGraphic.Compression:=tcJPEG;
+ iGraphic.JpegQuality:=FJpgCompression;
+ end;
+ if iGraphic.ImageFormat=ifTrueColor then
+ begin
+ iGraphic.Compression:=tcJPEG;
+ iGraphic.JpegQuality:=FJpgCompression;
+ end;
+ PageEnd;
+ IF PEFileName <> '' Then
+ begin
+ IF LowerCase(ExtractFileExt(PEFileName)) = '.tif' Then
+ begin
+ if FileExists( PEFileName ) then
+ SaveStream := TFileStream.Create( PEFileName ,fmOpenReadWrite)
+ Else
+ SaveStream := TFileStream.Create( PEFileName ,fmCreate );
+ try
+ SaveStream.Seek(0, soFromBeginning);
+ iGraphic.AppendToStream(SaveStream);
+ finally
+ SaveStream.Free;
+ end;
+ end
+ Else IF LowerCase(ExtractFileExt(PEFileName)) = '.jpg' Then
+ begin
+ if FileExists( PEFileName ) then
+ DeleteFile(PEFileName);
+ //SaveStream := TFileStream.Create( PEFileName ,fmCreate );
+ JpgGr := TJpegGraphic.Create;
+ try
+ JpgGr.Assign(iGraphic);
+ JpgGr.SaveQuality := FJpgCompression;
+ //JpgGr.AppendToStream(SaveStream);
+ JpgGr.SaveToFile(PEFileName);
+ finally
+ JpgGr.Free;
+ //SaveStream.Free;
+ end;
+ end;
+ PageDone;
+ end;
+ end;
+ if iGraphic = iGraphic_First then
+ iGraphic := iGraphic_Sec
+ else
+ iGraphic.Assign(nil);
+ //iGraphic.Assign(iGraphic_Sec);
+ end;
+ finally
+ //iGraphic.Free;
+ iGraphic_First.Free;
+ iGraphic_Sec.Free;
+ end;
+
+end;
+
+procedure TCB_IMGPSScanX.PageDone;
+Var
+ ISB,NowISB : TImageScrollBox;
+begin
+ inc(Scaninfo.ImageCount);
+ case ScanMode of
+ smNew:
+ begin
+ if ScanImgShowMode = 0 then //清楚顯示
+ begin
+ ISB := FindISB2View(VMode);
+ ISB.AntiAliased := True;
+ ISB.ZoomMode := zmFittopage;
+ ISB.LoadFromFile(PEFileName,1);
+ end
+ Else if ScanImgShowMode = 1 then //模糊顯示
+ begin
+ ISB := FindISB2View(VMode);
+ ISB.AntiAliased := False;
+ ISB.ZoomMode := zmFittopage;
+ ISB.LoadFromFile(PEFileName,1);
+ end
+ Else if ScanImgShowMode = 1 then //不顯示
+ begin
+
+ end
+ end;
+ smReplace:
+ begin
+ DisplayISB.LoadFromFile(PEFileName,1);
+ end;
+ smInsert:
+ begin
+ ISB := FindISB2View(VMode);
+ ISB.ZoomMode := zmFittopage;
+ ISB.LoadFromFile(PEFileName,1);
+ end;
+ smSample:
+ begin
+ ISB := FindISB2View(VMode);
+ ISB.ZoomMode := zmFittopage;
+ ISB.LoadFromFile(PEFileName,1);
+ end;
+ smRTS:
+ begin
+
+ end;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.PageEnd;
+Var
+ i,n : Integer;
+ SampleFormID : String;
+ DocNo,FormID,FormVersion : String;
+ BarStr : String;
+begin
+ case ScanMode of
+ smNew:
+ begin
+ ScanSaveFilename := '';
+ DocNo:='';
+ FormID:='';
+ FormVersion:='';
+ PEFileName := '';
+ //if not FindNoSaveBarCode then //沒有不儲存影像的條碼
+ //begin
+ if FormID = '' then
+ begin
+ FormID := BarCode2FormID; //取出FormID
+ end;
+
+ if (FormID <> '') and ISDivPageFormID(FormID) then
+ begin
+ NowDivPageFormID := FormID;
+ end;
+
+ if (FormID <> '') and ISGuideFormID(FormID) then
+ begin
+ NowGuideFormID := FormID;
+ end;
+//ShowMessage('NowGuideFormID='+NowGuideFormID);
+ if (not (FindDivFormCode(FormID))) and (NowGuideFormID <> '') {and (FormID = '')} then
+ FormID := NowGuideFormID;
+ DocNo := FormCode2DocNo(FormID);
+//ShowMessage('FormID='+FormID);
+//ShowMessage('ISDivPageFormID(FormID)='+BoolToStr(ISDivPageFormID(FormID),true));
+//ShowMessage('FindDivFormCode(FormID)='+BoolToStr(FindDivFormCode(FormID),true));
+//ShowMessage('A NowDivPageFormID='+NowDivPageFormID+#10#13+'FormID='+FormID+#10#13+'ScanCaseno='+ScanCaseno);
+ if (FormID <>'') and FindDivFormCode(FormID) and (NowDivPageFormID <> '') Then //只找分案頁上的案件條碼
+ begin
+
+ ScanInfo.ImageCount := 0;
+ ClearView(1);
+ ContextList.Clear;
+ Context_DocnoList.Clear;
+ ClearCaseIndex; //清掉案件索引
+ ScanCaseno := BarCode2CaseID; //取出案件編號
+ NowGuideFormID := '';
+ NowDivPageFormID :='';
+//ShowMessage('B NowGuideFormID='+NowGuideFormID+#10#13+'FormID='+FormID+#10#13+'ScanCaseno='+ScanCaseno);
+ end;
+ if ScanCaseno = '' then //一開始都沒找到
+ begin
+ ScanCaseno := GetNoNameCase(ImageSavePath);
+ end;
+ ImageSavePath := ImagePath;
+ if (ScanInfo.ImageCount = 0) then
+ begin
+ if DirectoryExists(ImageSavePath + ScanCaseno+'\') then
+ begin
+ _DelTree(ImageSavePath + ScanCaseno+'\');
+ SetCaseList('D',-1,ScanCaseno);
+ end;
+ end;
+
+ ScanPath := ImageSavePath+ScanCaseno+'\';
+ Str2Dir(ScanPath);
+
+ ScanDocDir := FindLastestDocDir(ScanCaseno,DocNo);
+//ShowMessage('AA ScanDocDir='+ScanDocDir);
+
+//ShowMessage('BB ScanDocDir='+ScanDocDir);
+ if DocNoNeedDiv(DocNo)then //要分份數
+ begin
+ //Showmessage(DocNo+#13+FormCode2Page(FormID)+#13+inttostr(GetDocDir_Page(ScanCaseno,ScanDocDir))+#13+ScanDocDir);
+ if ((FormCode2Page(FormID) = '01') and (GetDocDir_Page(ScanCaseno,ScanDocDir)>0)) or (ScanDocDir = '') then
+ begin
+ //ScanInfo.ImageCount := 0;
+ ScanDocDir := DocNo2DocNoDir(ImageSavePath + ScanCaseno+'\',DocNo);
+ end;
+ end
+ Else //不分份數
+ begin
+ if DocNo <> '' then
+ ScanDocDir := DocNo
+ else //Attach 附件
+ ScanDocDir := DocNo2DocNoDir(ImageSavePath + ScanCaseno+'\',DocNo);
+ end;
+ //ScanDocDir := GetDocNoDir(ImageSavePath+ScanCaseno+'\',DocNo);
+ if FirstDocDir = '' then
+ FirstDocDir := ScanDocDir;
+
+ ScanPath := ImageSavePath+ScanCaseno+'\'+ScanDocdir+'\';
+ //Showmessage(ScanPath);
+ if (not DirectoryExists(ScanPath)) and (ScanDocdir <> AttName) then
+ begin
+ //Showmessage('ADD:'+ScanCaseno+','+ScanDocdir);
+ SetDocNoList('A',-1,ScanCaseno,ScanDocdir,'1');
+ end;
+ Str2Dir(ScanPath);
+
+
+ ScanSaveFilename := FormID;
+
+ Str2Dir(ScanPath);
+ if ScanSaveFilename = '' then //附件
+ ScanSaveFilename:= Add_Zoo(GetDocDir_Page(ScanCaseNo,ScanDocDir)+1,3)+ext
+ //ScanSaveFilename:= Add_Zoo(ScanInfo.ImageCount+1,3)+ext
+ Else
+ ScanSaveFilename := Add_Zoo(GetDocDir_Page(ScanCaseNo,ScanDocDir)+1,3)+'_'+ScanSaveFilename+ext;
+ if not FindNoSaveBarCode then //沒有不儲存影像的條碼
+ begin
+ if ScanInfo.ImageCount = 0 then
+ begin
+ SetCaseList('A',-1,ScanCaseno);
+ WriteCaseIndex(ImageSavePath + ScanCaseno+'\'); //寫入案件索引
+ MyTreeNode1 := TreeView1.Items.AddChild(NewTreenode,ScanCaseno);
+ MyTreenode1.ImageIndex := 2;
+ MyTreenode1.SelectedIndex := 2;
+ Application.ProcessMessages;
+ end;
+
+ SetContextList('A',-1,ScanCaseno,ScanDocDir,ScanSaveFilename);
+ //ContextList.Add(ScanSaveFilename);
+ //ContextList.SaveToFile(ScanPath+'Context.dat');
+
+ PEFileName := ScanPath+ScanSaveFilename;
+ end;
+ end;
+ smReplace:
+ begin
+ if ScanInfo.ImageCount = 0 then
+ begin
+ DeleteFile(ScanPath+ScanSaveFilename);
+ PEFileName := ScanPath+ScanSaveFilename;
+ end;
+ end;
+ smInsert:
+ begin
+ ScanSaveFilename := '';
+ FormID := BarCode2FormID; //取出FormID
+ if (FormID <> '') and ISGuideFormID(FormID) then //20170510 註解 因為DSCAN 會全擠在導引頁下
+ NowGuideFormID := FormID;
+ if (NowGuideFormID <> '') {and (FormID = '')} then //20170510 註解 因為DSCAN 會全擠在導引頁下
+ FormID := NowGuideFormID;
+ DocNo := FormCode2DocNo(FormID);
+ ScanDocDir := FindLastestDocDir(ScanCaseno,DocNo);
+
+ if (FMode='ESCAN') and (FModeName='補件掃描') then //20180207 加入的特殊邏輯
+ begin
+ ScanDocDir := FindLastestDocDirForPage(ScanCaseno, DocNo,FormID);
+ end;
+
+ if (DocNoNeedDiv(DocNo)) then //要分份數
+ begin
+ if TreeView1.Selected = MyTreeNode1 then //20170421 掃瞄插頁時選則在案號上才要分份數 選在FormID上就不分份數
+ begin
+ if ((FormCode2Page(FormID) = '01') and (GetDocDir_Page(ScanCaseno,ScanDocDir)>0)) or (ScanDocDir = '') then
+ begin
+ ScanInfo.ImageCount := 0;
+ ScanDocDir := DocNo2DocNoDir(ImageSavePath + ScanCaseno+'\',DocNo);
+ end;
+ end;
+ end
+ Else //不分份數
+ begin
+ if DocNo <> '' then
+ ScanDocDir := DocNo
+ else //Attach 附件
+ ScanDocDir := DocNo2DocNoDir(ImageSavePath + ScanCaseno+'\',DocNo);
+ end;
+ if FirstDocDir = '' Then
+ FirstDocDir := ScanDocDir;
+
+ ScanPath := ImageSavePath+ScanCaseno+'\'+ScanDocdir+'\';
+ if (not DirectoryExists(ScanPath)) and (ScanDocdir <> 'Attach') and (ScanDocdir <> 'S_Attach') then
+ SetDocNoList('A',-1,ScanCaseno,ScanDocdir,'1');
+
+
+ ScanSaveFilename := FormID;
+ Str2Dir(ScanPath);
+ if ScanSaveFilename = '' then //附件
+ ScanSaveFilename:= Add_Zoo(GetDocDir_Page(ScanCaseno,ScanDocdir)+1,3)+ext
+ Else
+ ScanSaveFilename := Add_Zoo(GetDocDir_Page(ScanCaseno,ScanDocdir)+1,3)+'_'+ScanSaveFilename+ext;
+ //ContextList.Add(ScanSaveFilename);
+ //ContextList.SaveToFile(ScanPath+'Context.dat');
+ SetContextList('A',-1,ScanCaseno,ScanDocDir,ScanSaveFilename);
+ //Showmessage(ScanPath+ScanSaveFilename);
+ //Showmessage('Stop');
+ PEFileName := ScanPath+ScanSaveFilename;
+ end;
+ smSample:
+ begin
+ if ScanInfo.ImageCount = 0 then
+ begin
+ DeleteFile(ScanPath+ScanSaveFilename);
+ PEFileName := ScanPath+ScanSaveFilename;
+ BarStr := '';
+ for i := 1 to MpsBarCodeinf.Count do
+ begin
+ BarStr := BarStr + MpsBarCodeinf.Text[i];
+ end;
+ Showmessage(_Msg('辨識到的BarCode:')+#13+BarStr);
+ end;
+ end;
+ smRTS:
+ begin
+
+ end;
+ end;
+ Application.ProcessMessages;
+
+end;
+
+
+procedure TCB_IMGPSScanX.ExportBtClick(Sender: TObject);
+var
+ SendData : String;
+ EnCodeDateTime : String;
+ S : TStringlist;
+ SFileName,VFileName : String;
+begin
+ SFileName := En_DecryptionStr_Base64('E','MPSLIC_SCAN.lic','9338430');
+ VFileName := En_DecryptionStr_Base64('E','MPSLIC_VIEW.lic','9338430');
+ IIS_File2Web.S_LicEnName := SFileName;
+ IIS_File2Web.V_LicEnName := VFileName;
+
+ /////下載MPSLIC_SCAN.lic //////
+ EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+
+
+ //SendData := 'checktime='+EnCodeDateTime+'&workno=CW&formid=MPSLIC_SCAN.lic'+'&mode=sample';
+ //if not dnFile(HTTPSClient,Furl,'servlet/CWC03',SendData,LngPath+SFileName,FReWrite,Memo1,False,DownImgStatus) then
+ SendData:='data='+HTTPEncode(UTF8Encode(FData))+'&verify='+FVerify+'&work_no=PLN&file=MPSLIC_SCAN.lic';
+ if not dnFile_Get(HTTPSClient,Furl,'service/imgpsc/IMGPSC04/sample',SendData,LngPath+SFileName,FReWrite,Memo1,False,DownImgStatus) then
+ begin
+ Showmessage(_Msg('檢查註冊檔案時,網路發生錯誤!!')+_Msg('錯誤代碼:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
+ Exit;
+ end;
+ /////下載MPSLIC_SCAN.lic /////
+
+ /////下載MPSLIC_VIEW.lic //////
+ EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+ //SendData := 'checktime='+EnCodeDateTime+'&workno=CW&formid=MPSLIC_VIEW.lic'+'&mode=sample'; //這裡改成必傳CW 20121212
+ //if not dnFile(HTTPSClient,Furl,'service/slic/SLIC04/sample',SendData,LngPath+VFileName,FReWrite,Memo1,False,DownImgStatus) then
+ SendData:='data='+HTTPEncode(UTF8Encode(FData))+'&verify='+FVerify+'&work_no=PLN&file=MPSLIC_VIEW.lic';
+ if not dnFile_Get(HTTPSClient,Furl,'service/imgpsc/IMGPSC04/sample',SendData,LngPath+VFileName,FReWrite,Memo1,False,DownImgStatus) then
+ begin
+ Showmessage(_Msg('檢查註冊檔案時,網路發生錯誤!!')+_Msg('錯誤代碼:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
+ Exit;
+ end;
+ /////下載MPSLIC_VIEW.lic /////
+
+ ////壓zip/////
+ S := TStringlist.Create;
+ try
+ S.Add(En_DecryptionStr_Base64('E',GetDate,'9338430'));
+ S.Add(SFileName);
+ S.Add(VFileName);
+ S.SaveToFile(LngPath+'mps.dat');
+ S.Clear;
+ S.Add(LngPath+'mps.dat');
+ S.Add(LngPath+SFileName);
+ S.Add(LngPath+VFileName);
+ if FileExists(LngPath+'mps.zip') then
+ DeleteFile(LngPath+'mps.zip');
+ ExecuteZip_Pwd(LngPath+'mps.zip',LngPath,S,False,False,'9338430');
+
+ finally
+ S.Free;
+ DeleteFile(LngPath+SFileName);
+ DeleteFile(LngPath+VFileName);
+ DeleteFile(LngPath+'mps.dat');
+ end;
+ ////壓zip//////
+ Showmessage('匯出完成,匯出檔案:'+LngPath+'mps.zip');
+end;
+
+procedure TCB_IMGPSScanX.ImportBtClick(Sender: TObject);
+var
+ SendData : String;
+ EnCodeDateTime : String;
+ S : TStringlist;
+ SFileName,VFileName : String;
+ OpenDialog1 : TOpenDialog;
+ ZipPath : String;
+ ZipFile,ZipName : String;
+ LicName : String;
+ i : Integer;
+begin
+ OpenDialog1 := TOpenDialog.Create(self);
+ S := TStringlist.Create;
+ try
+ OpenDialog1.Filter := 'Zip files (*.zip)|*.ZIP';
+ if OpenDialog1.Execute then
+ begin
+ ZipFile:= ExtractFileName(OpenDialog1.FileName);
+ ZipName := Copy(ZipFile,1,length(ZipFile)-length(ExtractFileExt(OpenDialog1.FileName)));
+ ZipPath := LngPath+ZipName+'\';
+
+ str2dir(ZipPath);
+ if not ExecuteUnZip_Pwd(OpenDialog1.FileName,ZipPath,False,'9338430') then
+ Showmessage('無法解壓縮');
+ if not FileExists(ZipPath+'mps.dat') then
+ begin
+ Showmessage('格式不符,無法匯入');
+ Exit;
+ end;
+ S.LoadFromFile(ZipPath+'mps.dat');
+ if (En_DecryptionStr_Base64('D',S.Strings[0],'9338430')<> ServerDate) then
+ begin
+ Showmessage('檔案過期,無法匯入');
+ Exit;
+ end;
+
+ for i := 1 to S.Count -1 do
+ begin
+ LicName := En_DecryptionStr_Base64('D',S.Strings[i],'9338430');
+ RenameFile(ZipPath+S.Strings[i],ZipPath+LicName);
+ if (LicName = 'MPSLIC_SCAN.lic') or (LicName = 'MPSLIC_VIEW.lic') then
+
+ /////上傳MPSLICXXXX.lic ////
+ //if not upFile(HTTPSClient,FUrl,'servlet/CWC04','formid='+LicName+'@workno=CW@mode=sample','file',ZipPath+LicName,FReWrite,Memo1,False) then
+ //begin
+ SendData := 'data='+HTTPEncode(UTF8Encode(FData))+'&verify='+FVerify+'&work_no=PLN&file_name='+LicName;
+ if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/sample',SendData,'file',ZipPath+LicName,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;
+ /////上傳MPSLICXXXX.lic /////
+ end;
+ end;
+ Finally
+ OpenDialog1.Free;
+ S.Free;
+ _DelTree(ZipPath);
+ end;
+ Showmessage('匯入完成');
+end;
+
+procedure TCB_IMGPSScanX.HotKeyDown (var Msg : TMessage);
+begin
+
+end;
+
+procedure TCB_IMGPSScanX.InitialLanguage(Sender: TObject);
+var
+ ini : Tmeminifile;
+ i,n : Integer;
+ FormName : String;
+ NowForm : TComponent;
+begin
+ if Sender is TActiveForm then
+ NowForm := TActiveForm(Sender);
+ if Sender is TForm then
+ NowForm := TForm(Sender);
+
+ FormName := NowForm.Name;
+ IISUnit.IIS_LngfileName := LngPath+'Language.Lng'; //給IISUnit 轉多國語言字串用
+ if FLanguage = '' then
+ FLanguage := 'zh_tw';
+ IISUnit.IIS_NowLng := FLanguage;
+ ini := TMeminifile.Create(LngPath+'Language.Lng');
+ try
+ IF NowForm is TForm Then
+ TForm(NowForm).Caption := ini.ReadString(FLanguage,FormName+'.FormTitle','');
+ for i := 0 to NowForm.ComponentCount - 1 do
+ begin
+//ShowMessage(NowForm.Components[i].Name);
+ if NowForm.Components[i] is TButton then
+ begin
+ TButton(NowForm.Components[i]).Caption := ini.ReadString(FLanguage,FormName+'.'+TButton(NowForm.Components[i]).Name,'');
+ //TBitBtn(NowForm.Components[i]).Caption := ini.ReadString(FormName,TBitBtn(NowForm.Components[i]).Name,'');
+ //TButton(NowForm.Components[i]).OnMouseEnter := BtnMouseEnter;
+ end
+ Else if NowForm.Components[i] is TBitBtn then
+ begin
+ TBitBtn(NowForm.Components[i]).Hint := ini.ReadString(FLanguage,FormName+'.'+TBitBtn(NowForm.Components[i]).Name,'');
+ //TBitBtn(NowForm.Components[i]).Caption := ini.ReadString(FormName,TBitBtn(NowForm.Components[i]).Name,'');
+ TBitBtn(NowForm.Components[i]).OnMouseEnter := BtnMouseEnter;
+ end
+ Else if NowForm.Components[i] is TMenuItem then
+ begin
+ if ini.ValueExists(FLanguage,FormName+'.'+TMenuItem(NowForm.Components[i]).Name) then
+ TMenuItem(NowForm.Components[i]).Caption := ini.ReadString(FLanguage,FormName+'.'+TMenuItem(NowForm.Components[i]).Name,'');
+ end
+ Else if NowForm.Components[i] is TCheckBox then
+ begin
+ TCheckBox(NowForm.Components[i]).Caption := ini.ReadString(FLanguage,FormName+'.'+TCheckBox(NowForm.Components[i]).Name,'');
+ end
+ Else if NowForm.Components[i] is TPJMenuSpeedButton then
+ begin
+ TPJMenuSpeedButton(NowForm.Components[i]).Hint := ini.ReadString(FLanguage,FormName+'.'+TPJMenuSpeedButton(NowForm.Components[i]).Name,'');
+ end
+ Else if NowForm.Components[i] is TLabel then
+ begin
+ TLabel(NowForm.Components[i]).Caption := ini.ReadString(FLanguage,FormName+'.'+TLabel(NowForm.Components[i]).Name,'');
+ end
+ Else if NowForm.Components[i] is TGroupBox then
+ begin
+ TGroupBox(NowForm.Components[i]).Caption := ini.ReadString(FLanguage,FormName+'.'+TGroupBox(NowForm.Components[i]).Name,'');
+ end
+ Else if NowForm.Components[i] is TListView then
+ begin
+ for n := 0 to TListView(NowForm.Components[i]).Columns.Count - 1 do
+ begin
+ TListView(NowForm.Components[i]).Columns.Items[n].Caption := ini.ReadString(FLanguage,FormName+'.'+TListView(NowForm.Components[i]).Name+'_'+inttostr(n),'');
+ end;
+ end
+ Else if NowForm.Components[i] is TRadioGroup then
+ begin
+ TRadioGroup(NowForm.Components[i]).Caption := ini.ReadString(FLanguage,FormName+'.'+TRadioGroup(NowForm.Components[i]).Name,'');
+ for n := 0 to TRadioGroup(NowForm.Components[i]).Items.Count - 1 do
+ begin
+ TRadioGroup(NowForm.Components[i]).Items.Strings[n] := ini.ReadString(FLanguage,FormName+'.'+TRadioGroup(NowForm.Components[i]).Name+'_'+inttostr(n),'');
+ end;
+ end;
+ end;
+ finally
+ ini.Free;
+ end;
+end;
+
+function TCB_IMGPSScanX.GetSiteOMR(FileName,Site:String;bt: Integer): Integer;
+var
+ OMRRect : TRect;
+ Xdpi,Ydpi : Integer;
+ W,H : Integer;
+begin
+ Result := 0;
+//ShowMessage('GetSiteOMR');
+
+ IF (ImageScrollBox1.FileName <> FileName) and (FileName <> '') then
+ begin
+//ShowMessage('11111'+ImageScrollBox1.FileName+#10#13+FileName);
+ ImageScrollBox1.LoadFromFile(FileName,1);
+{
+ShowMessage('UpLPoint='+IntToStr(UpLPoint.X)+','+IntToStr(UpLPoint.Y)+#10#13+
+'UpRPoint='+IntToStr(UpRPoint.X)+','+IntToStr(UpRPoint.Y)+#10#13+
+'DownLPoint='+IntToStr(DownLPoint.X)+','+IntToStr(DownLPoint.Y)+#10#13+
+'DownRPoint='+IntToStr(DownRPoint.X)+','+IntToStr(DownRPoint.Y));
+ FindPoint(ImageScrollBox1.Graphic,UpLPoint,UpRPoint,DownLPoint,'');
+ShowMessage('UpLPoint='+IntToStr(UpLPoint.X)+','+IntToStr(UpLPoint.Y)+#10#13+
+'UpRPoint='+IntToStr(UpRPoint.X)+','+IntToStr(UpRPoint.Y)+#10#13+
+'DownLPoint='+IntToStr(DownLPoint.X)+','+IntToStr(DownLPoint.Y)+#10#13+
+'DownRPoint='+IntToStr(DownRPoint.X)+','+IntToStr(DownRPoint.Y));
+}
+ ClearLine(ISB_BW.Graphic,bt);
+ ISB_BW.Redraw(True);
+ Application.ProcessMessages;
+ end;
+ If ImageScrollBox1.FileName <> '' Then
+ begin
+
+//ShowMessage('22222'+ImageScrollBox1.FileName);
+ Xdpi := ImagescrollBox1.Graphic.XDotsPerInch;
+ Ydpi := ImagescrollBox1.Graphic.YDotsPerInch;
+ H := ImageScrollBox1.Graphic.Height;
+ W := ImageScrollBox1.Graphic.Width;
+//ShowMessage('Xdpi='+IntToStr(Xdpi)+#10#13+'Ydpi='+IntToStr(Ydpi)+#10#13+'H='+IntToStr(H)+#10#13+'W='+IntToStr(W)+#10#13);
+//ShowMessage('Site='+Site);
+ OMRRect := CM_Str2Rect(Site,Xdpi,UpLPoint);
+Display1.Lines.Add('UpLPoint=('+IntToStr(UpLPoint.X)+','+IntToStr(UpLPoint.Y)+');'+Site+';'+IntToStr(OMRRect.Left)+','+IntToStr(OMRRect.top)+','+IntToStr(OMRRect.Right)+','+IntToStr(OMRRect.Bottom));
+ if OMRRect.Left < 0 then
+ OMRRect.Left := 0;
+ if OMRRect.Top < 0 then
+ OMRRect.Top := 0;
+ if OMRRect.Right > ImageScrollBox1.Graphic.Width then
+ OMRRect.Right := ImageScrollBox1.Graphic.Width;
+ if OMRRect.Bottom > ImageScrollBox1.Graphic.Height then
+ OMRRect.Bottom := ImageScrollBox1.Graphic.Height;
+
+ result := Get_OMR(ISB_BW.Graphic,OMRRect);
+//ShowMessage('result='+IntToStr(result));
+
+ end;
+end;
+
+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;
+
+Procedure TCB_IMGPSScanX.R_W_Scanini(Mode:Char); //'R'讀取;'W'寫入
+var
+ ini : Tinifile;
+begin
+ ini := Tinifile.Create(ScaniniPath+'FBScan.ini');
+ try
+ case Mode of
+ 'R':begin
+ DeviceDelete := ini.ReadBool('DeviceDelete','Mode',Def_DeviceDelete);
+ DeviceDeleteSize := ini.ReadInteger('DeviceDelete','Size_New',Def_DeviceDeleteSize);
+ ScannerReverse := ini.ReadBool('Scanner','Reverse',Def_ScannerReverse);
+ BoardClear := ini.ReadBool('Scanner','BoardClear',Def_BoardClear);
+ //ScanDpi := ini.ReadInteger('Scanner','Dpi',Def_ScanDpi);
+ //ScanDuplex := ini.ReadBool('Scanner','Duplex',Def_ScanDuplex);
+ ScanRotate := ini.ReadInteger('Scanner','ScanRotate',Def_ScanRotate);
+ ScanDeskew := ini.ReadBool('Scanner','ScanDeskew',Def_ScanDeskew);
+ ScanBright := ini.ReadInteger('Scanner','ScanBright',Def_ScanBright);
+ ScanContrast := ini.ReadInteger('Scanner','ScanContrast',Def_ScanContrast);
+ ScanImgShowMode := ini.ReadInteger('Scanner','ScanImgShowMode',Def_ScanImgShowMode);
+ ScanImgSetUse := ini.ReadBool('Scanner','ScanImgSetUse',Def_ScanImgSetUse); //20101110 BA說掃瞄器廠商有調設定要新增此選項是否啟動
+ end;
+ 'W':begin
+ ini.WriteBool('DeviceDelete','Mode',DeviceDelete);
+ ini.WriteInteger('DeviceDelete','Size_New',DeviceDeleteSize);
+ ini.WriteBool('Scanner','Reverse',ScannerReverse);
+ ini.WriteBool('Scanner','BoardClear',BoardClear);
+ //ini.ReadInteger('Scanner','Dpi',ScanDpi);
+ //ini.WriteBool('Scanner','Duplex',ScanDuplex);
+ ini.WriteInteger('Scanner','ScanRotate',ScanRotate);
+ ini.WriteBool('Scanner','ScanDeskew',ScanDeskew);
+ ini.WriteInteger('Scanner','ScanBright',ScanBright);
+ ini.WriteInteger('Scanner','ScanContrast',ScanContrast);
+ ini.WriteInteger('Scanner','ScanImgShowMode',ScanImgShowMode);
+ ini.WriteBool('Scanner','ScanImgSetUse',ScanImgSetUse); //20101110 BA說掃瞄器廠商有調設定要新增此選項是否啟動
+ end;
+ end;
+
+ finally
+ ini.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.GetDefScanIni; //取得掃瞄的預設值
+var
+ i : Integer;
+ PARA_NO,PARA_CONTENT: String;
+begin
+ Def_DeviceDelete := True;
+ Def_DeviceDeleteSize := 3072; //20120821 改成3000(出現)
+ Def_ScannerReverse := False;
+ Def_BoardClear := False;
+ Def_ScanDpi := 300;
+ Def_ScanDuplex := True;
+ Def_ScanRotate := 0;
+ Def_ScanDeskew := False;
+ Def_ScanImgSetUse := False;
+ Def_ScanBright := 0;
+ Def_ScanContrast := 0;
+ Def_ScanImgShowMode := 2;
+
+ for i := 0 to WORK_INF_List.Count - 1 do
+ begin
+ IF GetSQLData(WORK_INF_List,'PARA_NO',i) = 'SCAN_BLANKDEL_USE' Then //空白頁啟動
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ if UpperCase(PARA_CONTENT) ='Y' then
+ Def_DeviceDelete := True
+ Else
+ Def_DeviceDelete := False;
+ end
+ Else if GetSQLData(WORK_INF_List,'PARA_NO',i) = 'SCAN_BLANKDEL_SIZE' Then //空白頁Size
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ if PARA_CONTENT = '' then
+ Def_DeviceDeleteSize := 0
+ Else
+ Def_DeviceDeleteSize := Strtoint(PARA_CONTENT);
+
+ end
+ Else if GetSQLData(WORK_INF_List,'PARA_NO',i) = 'SCAN_REVERSE' Then //是否需反相
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ if UpperCase(PARA_CONTENT) ='Y' then
+ Def_ScannerReverse := True
+ Else
+ Def_ScannerReverse := False;
+ end
+ Else if GetSQLData(WORK_INF_List,'PARA_NO',i) = 'SCAN_BOARDCLEAR' Then //是否清黑邊
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ if UpperCase(PARA_CONTENT) ='Y' then
+ Def_BoardClear := True
+ Else
+ Def_BoardClear := False;
+ end
+ Else if GetSQLData(WORK_INF_List,'PARA_NO',i) = 'SCAN_DPI' Then //掃瞄DPI
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ if PARA_CONTENT = '' then
+ Def_ScanDpi := 300
+ else
+ Def_ScanDpi := Strtoint(PARA_CONTENT);
+ end
+ Else if GetSQLData(WORK_INF_List,'PARA_NO',i) = 'SCAN_DUPLEX' Then //是否雙面掃瞄
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ if UpperCase(PARA_CONTENT) ='Y' then
+ Def_ScanDuplex := True
+ Else
+ Def_ScanDuplex := False;
+
+ end
+ Else if GetSQLData(WORK_INF_List,'PARA_NO',i) = 'SCAN_ROTATE_MODE' Then //掃瞄時旋轉角度
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ if PARA_CONTENT = '0' then
+ Def_ScanRotate := 0
+ Else if PARA_CONTENT = '1' then
+ Def_ScanRotate := 270
+ Else if PARA_CONTENT = '2' then
+ Def_ScanRotate := 180
+ Else if PARA_CONTENT = '3' then
+ Def_ScanRotate := 90
+ Else
+ Def_ScanRotate := 0;
+ end
+ Else if GetSQLData(WORK_INF_List,'PARA_NO',i) = 'SCAN_DESKEW' Then //是否傾斜矯正
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ if UpperCase(PARA_CONTENT) ='Y' then
+ Def_ScanDeskew := True
+ Else
+ Def_ScanDeskew := False;
+ end
+ Else if GetSQLData(WORK_INF_List,'PARA_NO',i) = 'SCAN_IMGSET_USE' Then //是否使用亮度對比設定
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ if UpperCase(PARA_CONTENT) ='Y' then
+ Def_ScanImgSetUse := True
+ else
+ Def_ScanImgSetUse := False;
+ end
+ Else if GetSQLData(WORK_INF_List,'PARA_NO',i) = 'SCAN_BRIGHT' Then //亮度
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ if PARA_CONTENT ='' then
+ Def_ScanBright := 0
+ Else
+ Def_ScanBright := strtoint(PARA_CONTENT);
+ if (Def_ScanBright > 255) or (Def_ScanBright < -255) then
+ Def_ScanBright := 0;
+
+ end
+ Else if GetSQLData(WORK_INF_List,'PARA_NO',i) = 'SCAN_CONTRAST' Then //對比
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ if PARA_CONTENT ='' then
+ Def_ScanContrast := 0
+ Else
+ Def_ScanContrast := strtoint(PARA_CONTENT);
+ if (Def_ScanContrast > 255) or (Def_ScanContrast < -255) then
+ Def_ScanContrast := 0;
+ end
+ Else if GetSQLData(WORK_INF_List,'PARA_NO',i) = 'SCAN_SHOW_MODE' Then
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ if PARA_CONTENT = '0' then
+ Def_ScanImgShowMode := 0
+ Else if PARA_CONTENT = '1' then
+ Def_ScanImgShowMode := 1
+ Else if PARA_CONTENT = '2' then
+ Def_ScanImgShowMode := 2
+ Else
+ Def_ScanImgShowMode := 0;
+ end
+ Else if GetSQLData(WORK_INF_List,'PARA_NO',i) = 'CASE_IN_TIME' Then //取進件截止時間
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ ScanDenialTime := PARA_CONTENT;
+ end
+ Else if GetSQLData(WORK_INF_List,'PARA_NO',i) = 'SCAN_HINT' Then //掃描提示字串
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ ScanDenialHint := PARA_CONTENT;
+ end
+ Else if GetSQLData(WORK_INF_List,'PARA_NO',i) = 'NO_SAVE_FORM_ID' Then //掃描不存檔之表單代號
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ NoSaveBarCodeList.CommaText := PARA_CONTENT;
+ end
+ Else if GetSQLData(WORK_INF_List,'PARA_NO',i) = 'LOCAL_PATH' Then //本機端路徑
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ ImagePath:= PARA_CONTENT;
+ end
+ Else if UpperCase(GetSQLData(WORK_INF_List,'PARA_NO',i)) = 'GUIDEFORMID' Then //當導引頁的表單
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ GuideFormIDList.CommaText := PARA_CONTENT;
+ end
+ Else if UpperCase(GetSQLData(WORK_INF_List,'PARA_NO',i)) = 'DIVPAGEFORMID' Then //當分案頁的表單
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ DivPageFormIDList.CommaText := PARA_CONTENT;
+ end
+ Else if UpperCase(GetSQLData(WORK_INF_List,'PARA_NO',i)) = 'FILE_COMPRESSION' Then //20171211 jpg to tif 壓縮比
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ FJpgCompression := StrToInt(PARA_CONTENT);
+ end
+ Else if UpperCase(GetSQLData(WORK_INF_List,'PARA_NO',i)) = 'MAX_UPLOAD_SIZE' Then //取得 上傳大小的限制(MB)
+ begin
+ PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
+ FMaxUploadSize := PARA_CONTENT;
+ end;
+ end;
+ ScanDuplex := Def_ScanDuplex;
+end;
+
+procedure TCB_IMGPSScanX.HTTPSClientCertificateValidate(Sender: TObject;
+ X509Certificate: TElX509Certificate; var Validate: Boolean);
+begin
+ Validate := True;
+end;
+
+procedure TCB_IMGPSScanX.HTTPSClientRedirection(Sender: TObject;
+ const OldURL: string; var NewURL: string; var AllowRedirection: Boolean);
+begin
+ AllowRedirection := True;
+end;
+
+procedure TCB_IMGPSScanX.EnableImage(v:integer;Sender : TObject);
+var bmp : Tbitmap;
+begin
+ DesableImage;
+ bmp := TBitmap.Create;
+ try
+ ImageList3.GetBitmap(v,bmp);
+ TBitBtn(Sender).Glyph.Assign(bmp);
+ finally
+ bmp.Free;
+ end;
+ ViewMouseMode(v);
+end;
+
+procedure TCB_IMGPSScanX.DesableImage;
+var bmp : Tbitmap;
+ i : integer;
+begin
+ NowClick := -1;
+ bmp := Tbitmap.Create;
+ try
+ For i:= 0 to 6 do
+ begin
+ ImageList4.GetBitmap(i,bmp);
+ TBitBtn(FindComponent('FC'+IntToStr(i))).Glyph.Assign(bmp);
+ bmp.Width:=0;
+ bmp.Handle:=0;
+ end;
+ finally
+ bmp.Free;
+ end;
+ ViewMouseMode(NowClick);
+end;
+
+Procedure TCB_IMGPSScanX.ViewMouseMode(v:Integer);
+var
+ i : Integer;
+ Md : TMouseMode;
+ ISB : TImageScrollBox;
+begin
+//ShowMessage(IntToStr(v));
+ case v of
+ -1 : Md := TMouseMode(mmUser);
+ 0 : Md := TMouseMode(mmAmplifier);
+ 1 : Md := TMouseMode(mmZoom);
+ 2 : Md := TMouseMode(mmDrag);
+ 3 : Md := TMouseMode(mmR270);
+ 4 : Md := TMouseMode(mmR180);
+ 5 : Md := TMouseMode(mmR90);
+ 6 : Md := TMouseMode(mmDelete);
+ end;
+ for i := 1 to 8 do
+ begin
+ ISB := TImageScrollBox(FindComponent('ISB'+inttostr(i)));
+ ISB.MouseMode := TMouseMode(Md);
+ //Label3.Caption:='v='+IntToStr(v)+' time'+FormatDateTime('yyyy/mm/dd HH:MM:SS', now);
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.GoViewMode;
+begin
+ case VMode of
+ 0: DisplayMode(VMode,1,1,Panel9);
+ 1: DisplayMode(VMode,1,1,Panel9);
+ 2: DisplayMode(VMode,2,2,Panel9);
+ 3: DisplayMode(VMode,2,3,Panel9);
+ 4: DisplayMode(VMode,2,4,Panel9);
+ end;
+end;
+
+
+Procedure TCB_IMGPSScanX.DisplayMode(index,H_Count,W_Count:Integer;BasePanel:TPanel);
+Var
+ W,H,T,L:Integer;
+ i,n,Count: Integer;
+ Pl :TPanel;
+ bmp : TBitmap;
+begin
+ for i := 1 to 8 do
+ begin
+ TPanel(Findcomponent('imgp'+inttostr(i))).Visible := False;
+ end;
+ W := Round((BasePanel.Width - ((W_Count+1) * Seg)) / W_Count);
+ H := Round((BasePanel.Height -((H_Count+1) * Seg)) / H_Count);
+ Count := 1;
+ for i := 1 to H_Count do
+ begin
+ T := i * Seg + H * (i-1);
+ for n := 1 to W_Count do
+ begin
+ L := n * Seg + W * (n-1);
+ Pl := TPanel(Findcomponent('imgp'+inttostr(Count)));
+ Pl.Visible := True;
+ Pl.Left := L;
+ Pl.Top := T;
+ Pl.Width := W;
+ Pl.Height := H;
+ inc(Count);
+ end;
+ end;
+ Shape1.Width := W + (Seg * 2);
+ Shape1.Height := H + (Seg * 2);
+ Shape1.Visible := True;
+
+
+ bmp := Tbitmap.Create;
+ try
+ ImageList2.GetBitmap(index,bmp);
+ ViewModeBtn.Glyph.Assign(bmp);
+ finally
+ bmp.Free;
+ end;
+ ISB1Click(ISB1);
+end;
+
+Function TCB_IMGPSScanX.GetServerDate : Boolean;
+begin
+ Result := False; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+ If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/servertimeforocx','',FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ IF memo1.Lines.Strings[0] = '1' Then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+ Result := False;
+ Exit;
+ end
+ Else IF memo1.Lines.Strings[0] = '0' Then
+ begin
+ ServerDate := memo1.Lines.Strings[1];
+ ServerTime := Copy(ServerDate,9,6);
+ ServerDate := Copy(ServerDate,1,8);
+ Balance := GetBalance(ServerTime); //Server 跟Local的時間差
+ Result := True;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+ Result := False;
+ Exit;
+ end;
+
+end;
+
+Function TCB_IMGPSScanX.GetSampleInf : Boolean;
+var
+ str:String;
+begin
+ Result := False;
+ If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/serversampleforocx','work_no='+FWork_no,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ IF memo1.Lines.Strings[0] = '1' Then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+ Result := False;
+ Exit;
+ end
+ Else IF memo1.Lines.Strings[0] = '0' Then
+ begin
+ str := memo1.Lines.Strings[1];
+ SampleFormIDList.CommaText:=str;
+
+ Result := True;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+ Result := False;
+ Exit;
+ end;
+
+end;
+
+Function TCB_IMGPSScanX.GetSetInf1 : Boolean; //取系統設定資訊Mode1 DOC_INF
+Var
+ ColumeStr : String;
+ S : TStringlist;
+ EnCodeDateTime : String;
+begin
+ //SELECT %s FROM DOC_INF WHERE WORK_NO = '%s' ORDER BY DOC_TYPE, DOC_NO, DOC_VERSION"
+
+ Result := False; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+ EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+ ColumeStr := 'WORK_NO,DOC_NO,DOC_U_DESC,DOC_TYPE,DOC_VERSION,FORM_PAGES,START_DATE,STOP_DATE,IS_DOC_DIV,IS_IN_WH';
+ //If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=1&col='+Doc_Inf_Colume+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
+
+ If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=1&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+
+ IF memo1.Lines.Strings[0] = '1' Then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+ Result := False;
+ Exit;
+ end
+ Else IF memo1.Lines.Strings[0] = '0' Then
+ begin
+ S := TStringlist.Create;
+ S.Text := Memo1.Lines.Text;
+ SetSQLData(ColumeStr,S,Doc_Inf_List);
+ S.Free;
+ Result := True;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+ Result := False;
+ Exit;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetSetInf2 : Boolean; //取系統設定資訊Mode2 DM_FORM_INF
+var
+ ColumeStr : String;
+ S : TStringlist;
+ EnCodeDateTime : String;
+begin
+ //SELECT %s FROM DM_FORM_INF
+ Result := False; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+ EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+ ColumeStr := 'WORK_NO,MAIN_FORM_ID,DOC_VERSION,DEPE_FORM_ID,MUTEX_FORM_ID';
+ //If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=2&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
+ If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=2&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ IF memo1.Lines.Strings[0] = '1' Then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+ Result := False;
+ Exit;
+ end
+ Else IF memo1.Lines.Strings[0] = '0' Then
+ begin
+ S := TStringlist.Create;
+ S.Text := Memo1.Lines.Text;
+ SetSQLData(ColumeStr,S,DM_FORM_INF_List);
+ S.Free;
+ Result := True;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+ Result := False;
+ Exit;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetSetInf3 : Boolean; //取系統設定資訊mode3 FORM_INF
+var
+ ColumeStr : String;
+ S : TStringlist;
+ EnCodeDateTime : String;
+begin
+ //SELECT distinct %s FROM FORM_INF T1 LEFT JOIN DOC_INF T2 ON T2.DOC_NO = T1.DOC_NO AND T1.DOC_VERSION = T2.DOC_VERSION AND T1.WORK_NO = T2.WORK_NO WHERE T2.IS_USE = 'Y' AND T2.WORK_NO = %s
+ Result := False; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+ EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+ //ColumeStr := 'T1.WORK_NO,T1.FORM_ID,T1.DOC_KIND,T1.DOC_NO,T1.DOC_VERSION,T1.FORM_NAME,T1.FORM_DESC,T1.DIVISION,T1.ANCHOR,T1.MAX_PAGE,T1.FORM_HEIGHT,T1.FORM_WIDTH,T1.MERGE_IMAGE,T1.CC_FORM_ID,T1.CC_MERGE_FORMID,T2.DOC_TYPE'; {T1.CC_FORM_ID,T1.CC_MERGE_FORMID,}
+ ColumeStr := 'T1.WORK_NO,T1.FORM_ID,T1.DOC_NO,T1.DOC_VERSION,T1.FORM_NAME,T1.FORM_DESC,T1.DIVISION,T1.ANCHOR,T1.MAX_PAGE,T1.FORM_HEIGHT,T1.FORM_WIDTH,T1.IS_PRINT,T2.DOC_TYPE'; {T1.CC_FORM_ID,T1.CC_MERGE_FORMID,}
+ //If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=3&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
+ If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=3&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ IF memo1.Lines.Strings[0] = '1' Then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+ Result := False;
+ Exit;
+ end
+ Else IF memo1.Lines.Strings[0] = '0' Then
+ begin
+ S := TStringlist.Create;
+ S.Text := Memo1.Lines.Text;
+ SetSQLData(ColumeStr,S,FORM_INF_List);
+ S.Free;
+ Result := True;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+ Result := False;
+ Exit;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetSetInf4 : Boolean; //取系統設定資訊mode4 CHECK_RULE_INF
+var
+ ColumeStr : String;
+ S : TStringlist;
+ EnCodeDateTime : String;
+begin
+ //SELECT %s FROM CHECK_RULE_INF WHERE CHECK_TYPE = 'S'
+
+ Result := False; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+ EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+ ColumeStr := 'WORK_NO,CHECK_NO,CHECK_RULE_DESC,MESG_SHOW_TYPE,MESG_DISP_TYPE,CHECK_MESG,SCAN_MODE';
+ //If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=4&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
+ If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=4&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ IF memo1.Lines.Strings[0] = '1' Then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+ Result := False;
+ Exit;
+ end
+ Else IF memo1.Lines.Strings[0] = '0' Then
+ begin
+ S := TStringlist.Create;
+ S.Text := Memo1.Lines.Text;
+ SetSQLData(ColumeStr,S,CHECK_RULE_INF_List);
+ S.Free;
+ Result := True;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+ Result := False;
+ Exit;
+ end;
+ CheckRule2OMRErrInfo;
+end;
+
+Function TCB_IMGPSScanX.GetSetInf5 : Boolean; //取系統設定資訊mode5 MEMO_INF
+ var
+ ColumeStr : String;
+ S : TStringlist;
+ EnCodeDateTime : String;
+begin
+ //SELECT %s FROM MEMO_INF T1 LEFT JOIN MEMO_TYPE_INF T2 ON T2.MEMO_TYPE_NO = T1.MEMO_TYPE WHERE T1.MEMO_SOURCE = '01'
+ Result := False; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+ EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+ ColumeStr := 'T1.WORK_NO,T1.MEMO_TYPE,T1.MEMO_CONTENT,T2.MEMO_TYPE_NAME';
+ //If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=5&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
+ If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=5&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ IF memo1.Lines.Strings[0] = '1' Then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+ Result := False;
+ Exit;
+ end
+ Else IF memo1.Lines.Strings[0] = '0' Then
+ begin
+ S := TStringlist.Create;
+ S.Text := Memo1.Lines.Text;
+ SetSQLData(ColumeStr,S,MEMO_INF_List);
+ S.Free;
+ Result := True;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+ Result := False;
+ Exit;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetSetInf6 : Boolean; //取系統設定資訊mode5 WORK_INF
+var
+ ColumeStr : String;
+ S : TStringlist;
+ EnCodeDateTime : String;
+begin
+ //SELECT %s FROM WORK_INF
+
+ Result := False; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+ EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+ ColumeStr := 'WORK_NO,PARA_NO,PARA_CONTENT';
+ //If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=5&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
+ If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=6&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ IF memo1.Lines.Strings[0] = '1' Then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+ Result := False;
+ Exit;
+ end
+ Else IF memo1.Lines.Strings[0] = '0' Then
+ begin
+ S := TStringlist.Create;
+ S.Text := Memo1.Lines.Text;
+ SetSQLData(ColumeStr,S,WORK_INF_List);
+ S.Free;
+ Result := True;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+ Result := False;
+ Exit;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetSetInf7 : Boolean; //取系統設定資訊mode5 LASTEST_FORM_INF
+var
+ ColumeStr : String;
+ S : TStringlist;
+ EnCodeDateTime : String;
+begin
+ //SELECT FORM_ID,DOC_NO,DOC_VERSION FROM FORM_INF WHERE (DOC_NO,DOC_VERSION) in (SELECT DOC_NO, MAX(DOC_VERSION) FROM FORM_INF GROUP BY DOC_NO) ORDER BY DOC_NO
+
+ Result := False; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+ EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+ ColumeStr := 'FORM_ID,DOC_NO';
+ //If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=5&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
+ If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=7&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ IF memo1.Lines.Strings[0] = '1' Then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+ Result := False;
+ Exit;
+ end
+ Else IF memo1.Lines.Strings[0] = '0' Then
+ begin
+ S := TStringlist.Create;
+ S.Text := Memo1.Lines.Text;
+ SetSQLData(ColumeStr,S,LASTEST_FORM_INF_List);
+ S.Free;
+ Result := True;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+ Result := False;
+ Exit;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.SetFormID_DocNo; //將FormID及Docno抽出來另存入list裡 20130403增加
+var
+ i : Integer;
+begin
+ for i := 1 to FORM_INF_List.Count-1 do
+ begin
+ FormID_List.Add(GetSQLData(FORM_INF_List,'T1.FORM_ID',i));
+ DocNo_List.Add(GetSQLData(FORM_INF_List,'T1.DOC_NO',i));
+ end;
+
+end;
+
+Procedure TCB_IMGPSScanX.SetIn_WH_DocNo; //將要入庫的DocNo抽出來另存入list裡
+var
+ i : Integer;
+begin
+ for i := 1 to Doc_Inf_List.Count - 1 do
+ begin
+
+ if GetSQLData(Doc_Inf_List,'IS_IN_WH',i) = 'Y' then
+ IN_WH_DocNoList.Add(GetSQLData(Doc_Inf_List,'DOC_NO',i));
+ end;
+ {Showmessage(IN_WH_DocNoList.Text);
+ StringtoFile(IN_WH_DocNoList.Text,'D:\121.txt');}
+end;
+
+function TCB_IMGPSScanX.CheckRequiredColumnValues(workno, caseno:String): Boolean;
+begin
+//
+ Result:=False;
+ if (workno='HLN') and (caseno[9]='3') then
+ Result:=True;
+ if (workno='HLN') and (caseno[9]='4') then
+ Result:=True;
+end;
+
+Procedure TCB_IMGPSScanX.CheckRule2OMRErrInfo; //檢核規則填入OMRErrINFo Record
+var i : Integer;
+ CheckNo : String;
+begin
+ for I := 1 to 11 do
+ begin
+ CheckNo := Add_Zoo(i,3);
+
+ if FindSQLData(CHECK_RULE_INF_List,'MESG_SHOW_TYPE,MESG_DISP_TYPE,CHECK_MESG,SCAN_MODE','CHECK_NO',CheckNo,0,FindResult) then
+ begin
+ if GetFindResult('MESG_SHOW_TYPE') = '1' then
+ OMRErrInfo[i].Display := True //顯示
+ Else if GetFindResult('MESG_SHOW_TYPE') = '2' then
+ OMRErrInfo[i].Display := False; //不顯示
+
+ if GetFindResult('MESG_DISP_TYPE') = '1' then
+ OMRErrInfo[i].Ignore := True //可忽略
+ Else if GetFindResult('MESG_DISP_TYPE') = '2' then
+ OMRErrInfo[i].Ignore := False; //不可忽略
+
+ OMRErrInfo[i].Info := GetFindResult('CHECK_MESG');
+ OMRErrInfo[i].Mode := GetFindResult('SCAN_MODE');
+ end;
+ end;
+end;
+
+
+
+Procedure TCB_IMGPSScanX.ReNameContext(Path,OldName,NewName:String);
+var
+ i : Integer;
+begin
+ for i := 0 to ContextList.Count - 1 do
+ begin
+ if OldName = ContextList.Strings[i] then
+ begin
+ ContextList.Strings[i] := NewName;
+ ContextList.SaveToFile(Path+'Context.dat');
+ Context_DocnoList.Strings[i] := FormCode2DocNo(FileName2FormCode(NewName));
+ Context_DocnoList.SaveToFile(Path+'Context_DocNo.dat');
+ Break;
+ end;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.DeleteImageFile(Path,FileName,CaseID:String); // 刪除檔案 (無法得到DocDir用)
+var
+ i : Integer;
+ FileList:TStringlist;
+ DocDir : String;
+begin
+
+
+ DeleteFile(Path+FileName);
+ DocDir := Path2DocDir(Path,CaseID);
+//ShowMessage('DocDir='+DocDir);
+ SetContextList('D',-1,CaseID,DocDir,FileName);
+ {FileList:=TStringlist.Create;
+ try
+ if FileExists(Path+'Context.dat') then
+ FileList.LoadFromFile(Path+'Context.dat');
+ for i := 0 to FileList.Count - 1 do
+ begin
+ if FileName = FileList.Strings[i] then
+ begin
+ FileList.Delete(i);
+ FileList.SaveToFile(Path+'Context.dat');
+ Break;
+ end;
+ end;
+ if FileList.Count = 0 then
+ DeleteFile(Path+'Context.dat');
+ finally
+ FileList.Free;
+ end;}
+end;
+
+Procedure TCB_IMGPSScanX.DeleteFormCodeFile(CaseID,DocDir,FormID:String); //刪除指定FormID文件
+var
+ i: Integer;
+ FileList : TStringlist;
+begin
+ FileList := TStringlist.Create;
+ try
+ FileList.Clear;
+ if FileExists(ImageSavePath+CaseID+'\'+DocDir+'\Context.dat') then
+ FileList.LoadFromFile(ImageSavePath+CaseID+'\'+DocDir+'\Context.dat');
+
+ for i := FileList.Count - 1 downto 0 do
+ begin
+ if FileName2FormCode(FileList.Strings[i]) = FormID then
+ begin
+ if (FMode = 'ESCAN') and (FModeName<>'異動件') then
+ begin
+ if ISExistImg(ImageSavePath+CaseID+'\'+DocDir+'\'+FileList.Strings[i]) then
+ begin
+ //ShowMessage('有圖為非當次掃瞄,不可刪除');
+ Break;
+ end;
+ end;
+//ShowMessage(FileList.Strings[i]);
+ DeleteImageFile(ImageSavePath+CaseID+'\'+DocDir+'\',FileList.Strings[i],CaseID);
+ end;
+ end;
+ finally
+ FileList.Free;
+ end;
+ ReSortFileName(ImageSavePath+CaseID+'\'+DocDir+'\');
+ {for i := ContextList.Count - 1 downto 0 do
+ begin
+ FName := ContextList.Strings[i];
+ if FormID = 'Err' then //刪未註冊文件
+ begin
+ If not FormIDExists(FileName2FormCode(FName),False,0) Then
+ begin
+ DeleteFile(Path+FName);
+ ContextList.Delete(i);
+ end;
+ end
+ Else
+ begin
+ If FormID = FileName2FormCode(FName) then
+ begin
+ DeleteFile(Path+FName);
+ ContextList.Delete(i);
+ end;
+ end;
+ end;
+ ContextList.SaveToFile(Path+'Context.dat');
+ ReSortFileName(Path); }
+end;
+
+Function TCB_IMGPSScanX.DeleteDocNoFile(Path,DocNo:String):Boolean; //刪除指定DocNo文件
+var
+ i: Integer;
+ FName : String;
+begin
+ Result := False;
+ for i := ContextList.Count - 1 downto 0 do
+ begin
+ FName := ContextList.Strings[i];
+ If DocNo = FormCode2DocNo(FileName2FormCode(FName)) then
+ begin
+ DeleteFile(Path+FName);
+ ContextList.Delete(i);
+ Context_DocnoList.Delete(i);
+ Result := True; //有刪到指定文件
+ end;
+ end;
+ ContextList.SaveToFile(Path+'Context.dat');
+ Context_DocnoList.SaveToFile(Path+'Context_DocNo.dat');
+ ReSortFileName(Path);
+ ContextList.LoadFromFile(Path+'Context.dat');
+ Context_DocnoList.LoadFromFile(Path+'Context_DocNo.dat');
+ if FileExists(Path+'CustomDocNo.dat') then
+ Cust_DocNoList.LoadFromFile(Path+'CustomDocNo.dat');
+end;
+
+Function TCB_IMGPSScanX.DeleteDocNoFileForESCAN(Path,DocNo:String):Boolean; //刪除指定DocNo文件
+var
+ i,j,k: Integer;
+ FName : String;
+ ST1,ST2,ST3:TStringList;
+
+begin
+
+ Result := False;
+//ShowMessage(DocNo);
+ for i := ContextList.Count - 1 downto 0 do
+ begin
+ FName := ContextList.Strings[i];
+ If (DocNo = FormCode2DocNo(FileName2FormCode(FName))) or (DocNo=AttName) then
+ begin
+ if not ISExistImg(Path+'\'+FName) then
+ begin
+ DeleteFile(Path+'\'+FName);
+ ContextList.Delete(i);
+ end;
+ Result := True; //有刪到指定文件
+ end;
+ end;
+ ContextList.SaveToFile(Path+'\Context.dat');
+ ContextList.LoadFromFile(Path+'\Context.dat');
+
+ if ContextList.Count=0 then
+ begin
+ _DelTree(Path);
+ SetDocNoList('D',-1,NowCaseNo,NowDocDir,'');
+ end;
+
+end;
+
+Procedure TCB_IMGPSScanX.DeleteShowFile(Path:String); //刪除顯示中的影像
+var
+ i : Integer;
+ DelFile : String;
+begin
+ for i := 0 to NowShowFileList.Count - 1 do
+ begin
+ DelFile := NowShowFileList.Strings[i];
+ DeleteFile(Path+DelFile);
+ SetContextList('D',-1,NowCaseno,NowDocNo,DelFile);
+ end;
+
+end;
+
+Function TCB_IMGPSScanX.GetDataDocNoPage(MainDocNo,MainVersion:String):Integer; //取記錄的文件_版本頁數
+var
+ P : String;
+begin
+ Result := 0;
+ If FindSQLData(Doc_Inf_List,'FORM_PAGES','DOC_NO,DOC_VERSION',MainDocNo+','+MainVersion,0,FindResult) Then
+ begin
+ P := GetFindResult('FORM_PAGES');
+ if P <> '' then
+ Result := strtoint(P)
+ else
+ Result := 0;
+ end;
+end;
+
+Function TCB_IMGPSScanX.CheckCaseDocNoPage(CaseID,DocNo,Version:String;Pages:Integer):Integer; //取案件裡的文件_版本頁數
+var
+ i,n,Count : integer;
+ S, S2 : TStringlist;
+ FormCode,iPage : String;
+ docInt,tempInt:integer;
+ v,v2:integer;
+begin
+ Count := 0;
+ docInt:=0;
+ tempInt:=0;
+ S := TStringlist.Create;
+ S2 := TStringlist.Create;
+//ShowMessage('page='+IntToStr(Pages));
+ try
+ S.LoadFromFile(ImageSavePath+CaseID+'\upload\Context.dat');
+ S2.LoadFromFile(ImageSavePath+CaseID+'\upload\DocDir.dat'); //2017 1220 改成只承認第一份的
+
+ for I := 1 to pages do //從0到pages-1 改成 1到pages 20170316 這樣可以修改檢核的頁數問題
+ begin
+ iPage := Add_Zoo(i,2);
+ for n := 0 to S.Count - 1 do
+ begin
+ if (FWH_category='N') and (FIs_In_Wh='Y') then
+ begin
+ if ISExistImg(ImageSavePath+CaseID+'\upload\'+S.Strings[n]) then
+ begin
+ Continue;
+ end;
+ end;
+
+ if (Length(S2.Strings[n])>8) and (Pos(DocNo,S2.Strings[n])<>0) then //2017 1220 改成只承認第一份的
+ begin
+//LogFile1.LogToFile(logTimeString+'有進'+docno+','+S2.Strings[n]+IntToStr(Pos(DocNo,S2.Strings[n])));
+ v:=Pos('(',S2.Strings[n]);
+ v2:=Pos(')',S2.Strings[n]);
+ tempInt:=StrToInt(Copy(S2.Strings[n],v+1,v2-v-1));
+
+ if docInt=0 then
+ begin
+ docInt:=tempInt;
+ end;
+ if docInt<>tempInt then
+ begin
+//LogFile1.LogToFile(logTimeString+'docInt='+IntToStr(docInt)+',tempInt='+IntToStr(tempInt));
+ Result := Count;
+ Break;
+ end;
+ end;
+
+ FormCode := FileName2FormCode(S.Strings[n]);
+//LogFile1.LogToFile(logTimeString+'S.Strings[n]='+S.Strings[n]);
+//Showmessage('1:'+version+','+FormCode2Version(FormCode)+','+DocNo+','+FormCode2DocNo(FormCode)+','+iPage+','+FormCode2Page(FormCode));
+//LogFile1.LogToFile(logTimeString+'FormCode='+FormCode);
+LogFile1.LogToFile(logTimeString+'CheckCaseDocNoPage caseno='+CaseID+','+version+','+FormCode2Version(FormCode)+','+DocNo+','+FormCode2DocNo(FormCode)+','+iPage+','+FormCode2Page(FormCode));
+//ShowMessage(DocNo+','+IntToStr(docInt)+','+IntToStr(tempInt));
+//LogFile1.LogToFile(logTimeString+'FormCode='+FormCode);
+ if (version = FormCode2Version(FormCode)) and (DocNo = FormCode2DocNo(FormCode)) and (ipage = FormCode2Page(FormCode)) then
+ begin
+LogFile1.LogToFile(logTimeString+'CheckCaseDocNoPage caseno='+CaseID+','+version+','+FormCode2Version(FormCode)+','+DocNo+','+FormCode2DocNo(FormCode)+','+iPage+','+FormCode2Page(FormCode));
+//Showmessage(version+','+DocNo+',iPage='+iPage);
+//Showmessage(inttostr(Count+1));
+ Inc(Count);
+ Break; //找到了...離開
+ end;
+ end;
+ end;
+ finally
+ S.Free;
+ S2.free;
+ end;
+ Result := Count;
+end;
+
+Function TCB_IMGPSScanX.FindFormCodePages(CaseID,FormCode:String):Integer; //計算案件裡FormID的頁數
+var
+ i,Count : integer;
+ S : TStringlist;
+ iFormCode : String;
+begin
+ Count := 0;
+ S := TStringlist.Create;
+ try
+ S.LoadFromFile(ImageSavePath+CaseID+'\upload\Context.dat');
+ for i := 0 to S.Count - 1 do
+ begin
+ if FWH_category='N' then
+ begin
+ if ISExistImg(ImageSavePath+CaseID+'\upload\'+S.Strings[i]) then
+ begin
+ Continue;
+ end;
+ end;
+ iFormCode := FileName2FormCode(S.Strings[i]);
+ if FormCode = iFormCode then
+ begin
+ Inc(Count);
+ end;
+ end;
+ finally
+ S.Free;
+ end;
+ Result := Count;
+end;
+
+Function TCB_IMGPSScanX.GetDataFormCodePages(FormCode:String):Integer; //取記錄的FormcID的頁數
+begin
+ If FindSQLData(FORM_INF_List,'T1.MAX_PAGE','T1.FORM_ID',FormCode,0,FindResult) Then
+ begin
+ IF GetFindResult('T1.MAX_PAGE') = '' Then
+ Result := 9999
+ Else
+ Result := Strtoint(GetFindResult('T1.MAX_PAGE'));
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.CaseReSize(CaseID:String); //案件的影像縮放
+var
+ S : TStringlist;
+ FileName : String;
+ i : Integer;
+begin
+ {if FileExists(ImageSavePath+CaseID+'\ReSize.dat') then
+ DeleteFile(ImageSavePath+CaseID+'\ReSize.dat');}
+ if FileExists(ImageSavePath+CaseID+'\Upload\AnchorError.dat') then
+ DeleteFile(ImageSavePath+CaseID+'\Upload\AnchorError.dat');
+ S := TStringlist.Create;
+ try
+ S.LoadFromFile(ImageSavePath+CaseID+'\Upload\Context.dat');
+ For i := 0 to S.Count -1 do
+ begin
+ FileName := S.Strings[i];
+ ImageReSize_FormID(CaseID,FileName); //依十字定位點做縮放
+ end;
+ finally
+ S.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.ImageReSize_FormID(CaseID,FileName:String); //依十字定位點做縮放
+var
+ FormID : String;
+ DH,DW : String;
+ NowW,NowH : Integer;
+ ANCHOR : String; //是否有十字線
+ SizeStr : String;
+ S : TStringlist;
+ v,v1:Integer;
+ IsRecordMD5:Boolean;
+begin
+ IsRecordMD5:=False;
+ FormID := FileName2FormCode(FileName);
+ if FormID = '' then Exit;
+
+ IF FindSQLData(FORM_INF_List,'T1.FORM_HEIGHT,T1.FORM_WIDTH,T1.ANCHOR','T1.FORM_ID',FormID,0,FindResult) then
+ begin
+ DH := GetFindResult('T1.FORM_HEIGHT');
+ DW := GetFindResult('T1.FORM_WIDTH');
+ ANCHOR := UpperCase(GetFindResult('T1.ANCHOR'));
+ ANCHOR := Index2Anchor(ANCHOR);
+Display1.Lines.Add(FormID+','+DH+','+DW);
+//ShowMessage('AAAAAAAAA');
+ if ((ANCHOR = 'ANCHOR') or (ANCHOR = 'FRAME')) and (DH <> '') and (DW <> '') then //有十字定位點
+ begin
+//ShowMessage('BBBBBBB');
+ ImageScrollBox1.LoadFromFile(ImageSavePath+CaseID+'\Upload\'+FileName,1);
+
+ if (FWH_category='N') and ISExistImg(ImageSavePath+CaseID+'\Upload\'+FileName) then
+ begin
+ Exit;//20171103 補件 原有的圖不作resize
+ end;
+
+ //FindPoint(ImageScrollBox1.Graphic,UpLPoint,UpRPoint,DownLPoint,NowW,NowH);
+ FindPoint(ISB_BW.Graphic,UpLPoint,UpRPoint,DownLPoint,NowW,NowH,ANCHOR);
+
+ SizeStr := CheckSize(ISB_BW,UpLPoint,UpRPoint,DownLPoint,DW,DH);
+ ImageResize(ImageScrollBox1.Graphic,ISB_BW.Graphic.Width,ISB_BW.Graphic.Height);
+
+ FindPoint(ISB_BW.Graphic,UpLPoint,UpRPoint,DownLPoint,NowW,NowH,ANCHOR);
+ v := 5;
+ v1 := length(SizeStr);
+ IF (SizeStr <> '') and (Copy(SizeStr,1,v) <> 'ERROR') then
+ begin
+//ShowMessage('CCCCC');
+ if (ISExistImg(ImageSavePath+CaseID+'\Upload\'+FileName)) and (reSizeExistImgList.IndexOf(LoadFileGetMD5(ImageSavePath+CaseID+'\Upload\'+FileName))=-1) then
+ begin
+ IsRecordMD5:=True;
+ end;
+ ImageScrollBox1.SaveToFile(ImageSavePath+CaseID+'\Upload\'+FileName);
+ if IsRecordMD5 then
+ begin
+ reSizeExistImgList.add(LoadFileGetMD5(ImageSavePath+CaseID+'\Upload\'+FileName));
+ end;
+//showmessage(ImageSavePath+CaseID+'\Upload\'+FileName);
+ S := TStringlist.Create; ///20110422拿掉 換成上傳才做
+ if FileExists(ImageSavePath+CaseID+'\Upload\ReSize.dat') then
+ S.LoadFromFile(ImageSavePath+CaseID+'\Upload\ReSize.dat');
+ //S.Add(FormCode2FormName(FormID)+' '+SizeStr);
+ S.Add(FileName+','+SizeStr+#8+DateTimetoStr(Now));
+ S.SaveToFile(ImageSavePath+CaseID+'\Upload\ReSize.dat');
+ S.Free;
+ end;
+ if (Copy(SizeStr,1,v) = 'ERROR') then //未找到三個定位點
+ begin
+ S := TStringlist.Create;
+ if FileExists(ImageSavePath+CaseID+'\Upload\AnchorError.dat') then
+ S.LoadFromFile(ImageSavePath+CaseID+'\Upload\AnchorError.dat');
+ S.Add(FileName+'-->'+Copy(SizeStr,V+1,V1-v));
+ S.SaveToFile(ImageSavePath+CaseID+'\Upload\AnchorError.dat');
+ S.Free;
+ end;
+
+ ImageScrollBox1.FileName := '';
+ end;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.ImageReSize_tmp(FormID,FileName:String); //依十字定位點做縮放(暫存檔)
+var
+ DH,DW : String;
+ ANCHOR : String; //是否有十字線
+ SizeStr : String;
+ S : TStringlist;
+begin
+ IF FindSQLData(FORM_INF_List,'T1.FORM_HEIGHT,T1.FORM_WIDTH,T1.ANCHOR','T1.FORM_ID',FormID,0,FindResult) then
+ begin
+ DH := GetFindResult('T1.FORM_HEIGHT');
+ DW := GetFindResult('T1.FORM_WIDTH');
+ ANCHOR := UpperCase(GetFindResult('T1.ANCHOR'));
+ ANCHOR := Index2Anchor(ANCHOR);
+ if ((ANCHOR = 'ANCHOR') or (ANCHOR = 'FRAME')) and (DH <> '') and (DW <> '') then //有十字定位點
+ begin
+ ImageScrollBox1.LoadFromFile(FileName,1);
+ SizeStr := CheckSize(ImageScrollBox1,UpLPoint,UpRPoint,DownLPoint,DW,DH);
+ IF SizeStr <> '' then
+ begin
+ ImageScrollBox1.SaveToFile(FileName);
+ end;
+ ImageScrollBox1.FileName := '';
+ end;
+ end;
+end;
+
+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;
+
+Function TCB_IMGPSScanX.TransCaseID(Path,CaseID:String;MainCase:Boolean):Boolean; //傳送案件
+Var
+ i,n,v: Integer;
+ ZipFileList : TStringlist;
+ UpFormID:String;
+ pages : Integer;
+ TransName : String;
+ MaskPath : String;
+ HaveMask : Boolean;
+ S : String;
+ SendData:String;
+ Doc_Data,Doc_Data1 : String;
+ In_Doc1,In_Doc2 : String;
+ AttachYN : String; //是否有附件 Y:有 N:沒有
+
+ ST1,ST2:TStringList;
+ str1,str2:String;
+ must_formidStr :string;
+ last_add_formidstr :string;
+ casepath:String;
+ filesizeInt:integer;
+ case_page:string;
+ Fname:String;
+ FileRec:TSearchrec;
+begin
+ Result := True;
+ TransName := CaseID;
+ MaskPath := Path+'MaskImg\';
+ if fileExists(Path+'Context.dat') then
+ begin
+ ContextList.LoadFromFile(Path+'Context.dat');
+ Context_DocnoList.LoadFromFile(Path+'Context_DocNo.dat');
+ end;
+
+ if FileExists(Path+'CustomDocNo.dat') then
+ Cust_DocNoList.LoadFromFile(Path+'CustomDocNo.dat');
+
+ Pages := ContextList.Count;
+ case_page:=IntToStr(pages);
+ if (FMode = 'NSCAN') or (FMode = 'ESCAN') or (FMode = 'ASCAN') or (FMode = 'DSCAN') or (FMode = 'SSCAN') or (FMode = 'MSCAN') or (FMode = 'RI_SCAN') or (FMode = 'RSCAN') then
+ begin
+ //Showmessage('1');
+ UpformID := GetCaseFormID(Path);
+ {if UpformID = '' then //20131213 yuu說不管主form
+ begin
+ Showmessage(_msg('取不到主FormID!!'));
+ Result := False;
+ DataLoading(False,False);
+ Exit;
+ end;}
+ end;
+
+ CaseResort2Scanlist(Path); //檔名照設定排序產生scanlist.dat
+ //CaseResort(Path); //檔名照設定排序
+ CreateFormID_FormName(Path,CaseID); //產生FormID_FormName.dat
+ CreateDocNo_DocName(Path,CaseID); //產生DocNo_Name.dat
+//ShowMessage('EEEEEEEEEE');
+ Doc_Data := CreateDocNo_Info(CaseID); //產生保管袋文件 Docno,份數,頁數;Docno,份數,頁數 的回傳字串
+//ShowMessage('1111111111');
+ Doc_Data1 := CreateCustDocNo_Info(CaseID); //產生自定文件 Docname,份數,頁數;Docno,份數,頁數 的回傳字串
+//ShowMessage('2222222222');
+ In_Doc1 := CreateDocnoFrom_Info(CaseID); //產生被引進的保管袋文件資訊 Docno[tab]份數[tab]案件編號#13#10Docno[tab]份數[tab]案件編號
+//ShowMessage('333333333333333333');
+ In_Doc2 := CreateCustDocNoFrom_Info(CaseID); //產生被引進的自定文件資訊 Docno[tab]份數[tab]案件編號#13#10Docno[tab]份數[tab]案件編號
+//ShowMessage('4444444444444');
+ AttachYN := CreateAttach_Info(CaseID); //是否還有附件 Y:有 N:沒有
+ //self.ReadCaseIndex()
+//ShowMessage('555555555555');
+ ReadCaseIndex(Path);
+//ShowMessage('DDDDDDDDDD');
+ //LoanDoc := 'Y';
+ //產生遮罩影像
+// if FWork_No = 'CW' then
+// HaveMask := Case2Mask(Path,MaskPath);
+ //產生遮罩影像
+ // S := S +#13+'5-->'+ Timetostr(now);
+
+ ///////必要formid 20170315 start //////////////////////////////
+ must_formidStr:='';
+ last_add_formidstr:='';
+ ST1:=TStringList.Create;
+ ST1.LoadFromFile(path+'FormCode_Name.dat');
+//ShowMessage(ST1.Text);
+//ShowMessage(LastInitFormidList.Text);
+ ST2:=TStringList.Create;
+
+ for I := 0 to ST1.Count - 1 do
+ begin
+ if (Pos('_',St1.Strings[i])<>1) and (Pos('_',St1.Strings[i])<>-1) then
+ begin
+ str1:=Copy(ST1.Strings[i],1,Pos('_',St1.Strings[i])-1);
+ ST2.Add(str1);
+ must_formidStr:= must_formidStr+str1+'@#,';
+ end;
+ end;
+ must_formidStr:=Copy(must_formidStr,1,Length(must_formidStr)-3) ;
+//ShowMessage('must_formidStr='+must_formidStr);
+//ShowMessage('AST2='+ST2.Text);
+ for I := 0 to LastInitFormidList.Count - 1 do
+ begin
+ if ST2.IndexOf(LastInitFormidList.Strings[i]) <> -1 then
+ begin
+ ST2.Delete(ST2.IndexOf(LastInitFormidList.Strings[i]));
+ end;
+ end;
+//ShowMessage('BST2='+ST2.Text);
+ for I := 0 to ST2.Count - 1 do
+ begin
+ last_add_formidstr:=last_add_formidstr+ST2.Strings[i]+'@#,';
+ end;
+ last_add_formidstr:=Copy(last_add_formidstr,1,Length(last_add_formidstr)-3) ;
+ ST1.Free;
+ ST2.Free;
+//ShowMessage('last_add_formidstr='+last_add_formidstr);
+ ///////必要formid 20170315 end //////////////////////////
+
+ ///保留外部影像 start///////////////////////////////
+ casepath:= Copy(Path,1,pos('Upload',path)-1);
+//ShowMessage('casepath='+casepath);
+//FIsExternal:='Y';
+ if (FMode='ESCAN') and (FIsExternal='Y') then
+ begin
+ if FileExists(casepath+'Download\FirstImg.zip') then
+ begin
+ CopyFile(PWChar(casepath+'Download\FirstImg.zip'),PWChar(path+'FirstImg.zip'),false);
+ end
+ else
+ begin
+ CopyFile(PWChar(casepath+'Download\'+CaseID+'.zip'),PWChar(path+'FirstImg.zip'),false);
+ end;
+ end;
+ ///保留外部影像 end///////////////////////////////
+
+ //file_size 計算 就先不做 20170316
+ filesizeInt:=0;
+
+
+ //////壓檔/////
+ ZipMainFile(Path,Path,'Img.zip');
+ if HaveMask then
+ ZipMaskFile(Path,MaskPath,Path,'MaskImg.zip'); //有遮罩設定的才產生
+ /////壓檔////
+ ///檢查上傳的zip大小////
+ FName :=Path+ 'Img.zip';
+
+ FindFirst(FName, faAnyfile, FileRec);
+
+ //FMaxUploadSize
+//ShowMessage(IntToStr(FileRec.Size));
+//Result:=False;
+//exit; //目前上傳檔案大小為xxMB,已超過50MB,無法上傳 %.3f ,[FileRec.Size / 1048576]
+ If FileRec.Size > StrtoInt(FMaxUploadSize) * 1048576 Then // 檢查檔案大小
+ Begin
+ ShowMessage(Format('%s目前上傳檔案大小為%.3fMB,已超過'+FMaxUploadSize+'MB,無法上傳',[caseid,FileRec.Size / 1048576]) );
+ FindClose(FileRec);
+ Result := False;
+ Exit;
+ End;
+ FindClose(FileRec);
+ ///檢查上傳的zip大小////
+//ShowMessage('last_add_formidstr='+last_add_formidstr);
+ ////上傳/////
+ SendData:='data='+HTTPEncode(UTF8Encode(FData))
+ +'&verify='+FVerify
+ +'&form_id='+UpformID
+ +'&loan_doc='+Case_loandoc
+ +'&case_no='+TransName
+ +'&doc_data='+HTTPEncode(UTF8Encode(Doc_Data))
+ +'&doc_data1='+HTTPEncode(UTF8Encode(Doc_Data1))
+ +'&attach='+AttachYN
+ +'&case_page='+case_page
+ +'&file_size='+IntToStr(filesizeInt)
+ +'&must_formid='+must_formidStr //擁有的 formid
+ +'&last_add_formid='+last_add_formidstr //當次新加的 formid
+ +'&in_doc1='+HTTPEncode(UTF8Encode(In_Doc1))
+ +'&in_doc2='+HTTPEncode(UTF8Encode(In_Doc2));
+//ShowMessage('SendData='+SendData);
+//ShowMessage(FData+#10#13+Doc_Data);
+ //Showmessage('Wait');
+
+ if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/caseupload',SendData,'file',Path+'Img.zip',FReWrite,Memo1,False) then
+ begin
+ Showmessage(Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason+'.');
+ Result := False;
+ Exit;
+ end;
+ if memo1.Lines.Strings[0] = '1' then
+ begin
+ Showmessage(Format(_Msg('')+_Msg(''),[CaseID])+memo1.Lines.Strings[1]+'。');
+ Result := False;
+ Exit;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/IMGPS00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ Showmessage(Format(_Msg('')+_Msg('')+_Msg('閒置過久或被登出,請重新登入'),[CaseID]));
+ Result := False;
+ Exit;
+ end;
+ ////上傳////
+ if FMode = 'ESCAN' then //上傳舊件引入檔案 //20140616 原本先搬舊件再搬新件,改為先搬新件再搬舊件
+ begin
+ if not TransOldCaseFile(ImageSavePath+CaseID+'\') then
+ begin
+ Result := False;
+ Exit;
+ end;
+ end;
+ // 呼叫Server完成 /////
+ {If not CaseComplete(Path,CaseID,MainCase) Then
+ begin
+ Showmessage(_Msg('通知案件傳送完成時,網路發生錯誤!!')+HttpErrStr);
+ DataLoading(False,False);
+ Result := False;
+ Exit;
+ end; }
+ /// 呼叫Server完成////
+
+ ////刪檔////
+ //_DelTree(Path); //會只刪TransPath
+//ShowMessage('STOP');
+ _DelTree(ImageSavePath+CaseID);
+ SetCaseList('D',-1,CaseID);
+ ////刪檔////
+end;
+
+Procedure TCB_IMGPSScanX.NewTreeNodeRefresh;
+var
+ v : Integer;
+begin
+ //v := Pos('-',NewTreeNode.Text);
+ //NewTreeNode.Text := Copy(NewTreeNode.Text,1,v-1)+'-共'+inttostr(NewTreeNode.Count)+'筆';
+ GetCase_PageCount(CaseCount,PageCount);
+ v := Pos('-',NewTreeNode.Text);
+ NewTreeNode.Text := Format(_Msg('%s-共%d筆共%d頁'),[Copy(NewTreeNode.Text,1,v-1),CaseCount,PageCount]);
+end;
+
+Procedure TCB_IMGPSScanX.MyTreeNode1Refresh;
+var
+ v : Integer;
+begin
+ v := Pos('-',MyTreeNode1.Text);
+ MyTreeNode1.Text := Format(_Msg('%s-%d筆'),[Copy(MyTreeNode1.Text,1,v-1),MyTreeNode1.Count]);
+end;
+
+Procedure TCB_IMGPSScanX.MyTreeNode2ReFresh(CaseID:String);
+var
+ P : Integer;
+begin
+ //p:= ContextList.Count;
+ //MytreeNode1.Text := Format(_Msg('%s-%d頁'),[CaseID,p]);
+ DrawDocItem2(MytreeNode1,CaseID);
+ //DrawDocItem(MytreeNode1,FORM_INF_List,CaseID);
+end;
+
+Procedure TCB_IMGPSScanX.MyTreeNode3ReFresh(CaseID:String);
+begin
+
+ //DrawDocItem1(MytreeNode1,Doc_Inf_List,CaseID); //201408280改
+ DrawDocItem2(MytreeNode1,CaseID);
+ //DrawDocItem(MytreeNode1,FORM_INF_List,CaseID);
+end;
+
+Function TCB_IMGPSScanX.Node2DocNo(Node2:TTreeNode):String; //MyTreeNode2取DocNo出來
+var
+ v,v1,v2 : Integer;
+begin
+ v := Posend('{',Node2.Text);
+ v1 := Posend('}',Node2.Text);
+ v2 := Posend('-',Node2.Text);
+ Result := Copy(Node2.Text,v+1,v1-v-1);
+ IF v1 = 0 Then
+ begin
+ Result := '';
+ end;
+end;
+
+Function TCB_IMGPSScanX.Node3DocNo(Node3:TTreeNode):String; //MyTreeNode3取DocNo出來
+var
+ v,v1,v2 : Integer;
+begin
+ v := Posend('{',Node3.Parent.Text);
+ v1 := Posend('}',Node3.Parent.Text);
+ v2 := Posend('-',Node3.Parent.Text);
+ Result := Copy(Node3.Parent.Text,v+1,v1-v-1);
+ IF v1 = 0 Then
+ begin
+ Result := '';
+ end;
+end;
+
+Function TCB_IMGPSScanX.Node3FormID(Node3:TTreeNode):String; //MyTreeNode3取FormCode出來
+var
+ v,v1,v2 : Integer;
+begin
+ v := Pos('{',Node3.Text);
+ v1 := Pos('}',Node3.Text);
+ v2 := Posend('-',Node3.Text);
+ Result := Copy(Node3.Text,v+1,v1-v-1);
+ IF v1 = 0 Then
+ begin
+ Result := '';
+ end;
+end;
+
+
+Function TCB_IMGPSScanX.GetNode2Name(Node2:TTreeNode):String; //取MyTreeNode2的識別字出來(記之前點選用)
+var
+ v : Integer;
+begin
+ v := Posend('-',Node2.Text);
+ Result := Copy(Node2.Text,1,v-1);
+end;
+
+{Function TCB_IMGPSScanX.Down_Replace_Img(SPath,DPath,CaseID:String):Boolean;
+var
+ EnCodeDateTime : String;
+ DownUrl : String;
+ SC,Main_C : TStringlist;
+ i,n : Integer;
+ FormID,DocNo,Version : String;
+ OldFName,NewMainFName,NewSubFName : String;
+ AttPath : String;
+begin
+ SC := TStringlist.Create;
+ Main_C := TStringlist.Create;
+ try
+ Result := True;
+ HaveAppDoc := False;
+ EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+ DownUrl := FUrl+CaseID+'&checktime='+EnCodeDateTime;
+ if not dnFile(HTTPSClient,DownUrl,'','',DPath+CaseID+'.zip',FReWrite,Memo1,False,DownImgStatus) then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ if Memo1.Lines.Strings[0] = '1' then
+ begin
+ HttpErrStr :=_Msg('錯誤原因:')+memo1.Lines.Strings[1];
+ Result := False;
+ Exit;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+ Result := False;
+ Exit;
+ end;
+ AttPath := DPath + 'AttFile\';
+ if FileExists(DPath+CaseID+'.zip') then
+ begin
+ ExecuteUnZip(DPath+CaseID+'.zip',DPath,True);
+ if FileExists(DPath+'img.zip') then
+ begin
+ ExecuteUnZip(DPath+'img.zip',DPath,False);
+ end;
+ if FileExists(DPath+'att.zip') then
+ begin
+ Str2Dir(AttPath);
+ ExecuteUnZip(DPath+'att.zip',AttPath,False);
+ end;
+ end
+ Else
+ begin
+ if ((FMode = 'FSCAN') or (FMode = 'ISCAN')) and (Memo1.Lines.Strings[0] ='NO_FILE') then //FGIS前台匯入件沒有影像是對的
+ begin
+ SC.Clear;
+ SC.SaveToFile(DPath+'Context.dat');
+ end
+ Else
+ begin
+ HttpErrStr := _Msg('找不到影像');
+ Result := False;
+ Exit;
+ end;
+ end;
+
+
+ if FileExists(SPath+'Context.dat') then
+ SC.LoadFromFile(SPath+'Context.dat');
+ for I := 0 to SC.Count - 1 do
+ begin
+ FormID := FileName2FormCode(SC.Strings[i]);
+ DocNo := FormCode2DocNo(FormID);
+ Version := FormCode2Version(FormID);
+ If FindSQLData(Doc_Inf_List,'ADD_SCAN_RULE','DOC_NO,DOC_VERSION',DocNo+','+Version,0,FindResult) Then
+ begin
+ if GetFindResult('ADD_SCAN_RULE') = 'R' then //替換的先刪再加 20101026 User由刪FormCode改刪DocNo
+ begin
+ //DeleteFormCodeFile(DPath,FormID);
+ ContextList.LoadFromFile(DPath+'Context.dat');
+ DeleteDocNoFile(DPath,DocNo);
+ end;
+ end;
+ end;
+ for I := 0 to SC.Count - 1 do //複製補充進來的影像
+ begin
+ OldFName := SC.Strings[i];
+ Main_C.LoadFromFile(DPath+'Context.dat');
+ //NewMainFName:= Add_Zoo(Main_C.Count+1,3)+Copy(OldFName,4,length(OldFName)-3);
+ NewMainFName:= Add_Zoo(Main_C.Count+1,3)+FileName2NoQuene_Filename(OldFName);
+ FormID := FileName2FormCode(OldFName);
+ DocNo := FormCode2DocNo(FormID);
+ Version := FormCode2Version(FormID);
+ If FindSQLData(Doc_Inf_List,'ADD_SCAN_RULE','DOC_NO,DOC_VERSION',DocNo+','+Version,0,FindResult) Then
+ begin
+ CopyFile(PWideChar(SPath+OldFName),PWideChar(DPath+NewMainFName),False);
+ end;
+ if FormID = '' then //附件
+ begin
+ CopyFile(PWideChar(SPath+OldFName),PWideChar(DPath+NewMainFName),False);
+ end;
+ Main_C.Add(NewMainFName);
+ Main_C.SaveToFile(DPath+'Context.dat');
+ end;
+ finally
+ SC.Free;
+ Main_C.Free;
+ end;
+ ///加入的電子檔匯入案件裡
+ if DirectoryExists(SPath+'AttFile\') then
+ AttFile_Arrange(SPath+'AttFile\',DPath+'AttFile\');
+end;}
+
+Function TCB_IMGPSScanX.Down_Img(Path,CaseID:String):Boolean;
+var
+ EnCodeDateTime : String;
+ SendData : String;
+ AttPath : String;
+begin
+ Result := True;
+ EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+ ///service/slic/SLIC04/case?data=&verify=&case_no=&file=
+ SendData := 'data='+HTTPEncode(UTF8Encode(FData))+'&verify='+FVerify+'&case_no='+CaseID+'&file=';
+//ShowMessage(SendData);
+ if not dnFile_Get(HTTPSClient,Furl,'service/imgpsc/IMGPSC04/case',SendData,Path+CaseID+'.zip',FReWrite,Memo1,False,DownImgStatus) then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ if Memo1.Lines.Strings[0] = '1' then
+ begin
+ HttpErrStr :=_Msg('錯誤原因:')+memo1.Lines.Strings[1]+'。';
+ Result := False;
+ Exit;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/IMGPS00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+ Result := False;
+ Exit;
+ end;
+//ShowMessage('替換zip');
+ AttPath := Path + 'AttFile\';
+ if FileExists(Path+CaseID+'.zip') then
+ begin
+ ExecuteUnZip(Path+CaseID+'.zip',Path,True);
+ if FileExists(Path+'img.zip') then
+ begin
+ ExecuteUnZip(Path+'img.zip',Path,False);
+ end;
+ if FileExists(Path+'att.zip') then
+ begin
+ Str2Dir(AttPath);
+ ExecuteUnZip(Path+'att.zip',AttPath,False);
+ end;
+ end
+ Else
+ begin
+ HttpErrStr := _Msg('找不到影像');
+ Result := True;
+ Exit;
+ end;
+
+end;
+
+Function TCB_IMGPSScanX.GetNoNameCase(Path:String):String; //取未配號XXXX
+var
+ i : Integer;
+begin
+ for i := 1 to 9999 do
+ begin
+ if Not DirectoryExists(Path+_Msg('未配號')+Add_Zoo(i,4)) then
+ begin
+ Result := _Msg('未配號')+Add_Zoo(i,4);
+ Break;
+ end;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.CaseResort(Path:String); //案件的檔案重新排序(次文件依Docno排)
+var
+ i,n,v,v1 : Integer;
+ S,S1 : TStringlist;
+ FormID,OldName,NewName,DocNo,Doc_Type:String;
+ x : Integer;
+begin
+ S := TStringlist.Create;
+ S1 := TStringlist.Create;
+ try
+ S.LoadFromFile(Path+'Context.dat');
+ X := 0;
+ {for I := 1 to FORM_INF_List.Count - 1 do //在FormID有設定的 //主文件 照SQL排 20101028改
+ begin
+ FormID := GetSQLData(FORM_INF_List,'T1.FORM_ID',i);
+ if FormCode2FileName(FormID,S) = '' then
+ Continue;
+ Doc_Type := GetSQLData(FORM_INF_List,'T2.DOC_TYPE',i);
+ for n := 0 to S.Count - 1 do
+ begin
+ if (S.Strings[n][1] <> '*') and (FileName2FormCode(S.Strings[n]) = FormID) and (Doc_Type='1') then
+ begin
+ Inc(X);
+ OldName := S.Strings[n];
+ //NewName := Add_Zoo(S.Count+x,3)+Copy(OldName,4,length(OldName)-3); //從原有數量加1開始編
+ NewName := Add_Zoo(S.Count+x,3)+FileName2NoQuene_Filename(OldName); //從原有數量加1開始編
+ S.Strings[n] := '*'+S.Strings[n];
+ S1.Add(OldName+','+NewName);
+ end;
+ end;
+ end;}
+
+ {for I := 0 to FORM_INF_List.Count - 1 do //次文件 照FormID 1~8碼+掃瞄順序排 20110512為了某個文件要先打的原因要求改
+ begin
+ for n := 0 to S.Count - 1 do
+ begin
+ FormID := GetSQLData(FORM_INF_List,'T1.FORM_ID',i);
+ Doc_Type := GetSQLData(FORM_INF_List,'T2.DOC_TYPE',i);
+ if (S.Strings[n][1] <> '*') and (Copy(FileName2FormCode(S.Strings[n]),1,8) = Copy(FormID,1,8)) and (Doc_Type='2') then
+ begin
+ Inc(X);
+ OldName := S.Strings[n];
+ NewName := Add_Zoo(S.Count+x,3)+Copy(OldName,4,length(OldName)-3); //從原有數量加1開始編
+ S.Strings[n] := '*'+S.Strings[n];
+ S1.Add(OldName+','+NewName);
+ end;
+ end;
+ end;}
+ for I := 0 to Doc_Inf_List.Count - 1 do //主文件 照文件代碼+掃瞄順序排 20101101改 20110512晚上又說改回來
+ begin
+ DocNo := GetSQLData(Doc_Inf_List,'DOC_NO',i);
+ if DocNo2FileName(DocNo,S) = '' then
+ Continue;
+ Doc_Type := GetSQLData(Doc_Inf_List,'DOC_TYPE',i);
+ for n := 0 to S.Count - 1 do
+ begin
+ if (S.Strings[n][1] <> '*') and (FormCode2DocNo(FileName2FormCode(S.Strings[n])) = DocNo) and (Doc_Type='1') then
+ begin
+ Inc(X);
+ OldName := S.Strings[n];
+ //NewName := Add_Zoo(S.Count+x,3)+Copy(OldName,4,length(OldName)-3); //從原有數量加1開始編
+ NewName := Add_Zoo(S.Count+x,3)+FileName2NoQuene_Filename(OldName); //從原有數量加1開始編
+ S.Strings[n] := '*'+S.Strings[n];
+ S1.Add(OldName+','+NewName);
+ end;
+ end;
+ end;
+
+
+ for I := 0 to Doc_Inf_List.Count - 1 do //次文件 照文件代碼+掃瞄順序排 20101101改 20110512晚上又說改回來
+ begin
+ DocNo := GetSQLData(Doc_Inf_List,'DOC_NO',i);
+ if DocNo2FileName(DocNo,S) = '' then
+ Continue;
+ Doc_Type := GetSQLData(Doc_Inf_List,'DOC_TYPE',i);
+ for n := 0 to S.Count - 1 do
+ begin
+ if (S.Strings[n][1] <> '*') and (FormCode2DocNo(FileName2FormCode(S.Strings[n])) = DocNo) and (Doc_Type='2') then
+ begin
+ Inc(X);
+ OldName := S.Strings[n];
+ //NewName := Add_Zoo(S.Count+x,3)+Copy(OldName,4,length(OldName)-3); //從原有數量加1開始編
+ NewName := Add_Zoo(S.Count+x,3)+FileName2NoQuene_Filename(OldName); //從原有數量加1開始編
+ S.Strings[n] := '*'+S.Strings[n];
+ S1.Add(OldName+','+NewName);
+ end;
+ end;
+ end;
+
+ {for n := 0 to S.Count - 1 do //次文件 照掃瞄順序排 20101028改
+ begin
+ FormID := GetSQLData(FORM_INF_List,'T1.FORM_ID',i);
+ Doc_Type := GetSQLData(FORM_INF_List,'T2.DOC_TYPE',i);
+ for i := 0 to FORM_INF_List.Count - 1 do
+ begin
+ if (S.Strings[n][1] <> '*') and (FileName2FormCode(S.Strings[n]) = FormID) and (Doc_Type='2') then
+ begin
+ Inc(X);
+ OldName := S.Strings[n];
+ NewName := Add_Zoo(S.Count+x,3)+Copy(OldName,4,length(OldName)-3); //從原有數量加1開始編
+ S.Strings[n] := '*'+S.Strings[n];
+ S1.Add(OldName+','+NewName);
+ end;
+ end;
+ end;}
+ for i := 0 to S.Count - 1 do //FormID沒設定的或附件
+ begin
+ if S.Strings[i][1] <> '*' then
+ begin
+ Inc(X);
+ OldName := S.Strings[i];
+ //NewName := Add_Zoo(S.Count+x,3)+Copy(OldName,4,length(OldName)-3);
+ NewName := Add_Zoo(S.Count+x,3)+FileName2NoQuene_Filename(OldName);
+ S.Strings[i] := '*'+S.Strings[i];
+ S1.Add(OldName+','+NewName);
+ end;
+ end;
+ S.Clear;
+ for i := 0 to S1.Count - 1 do //開始轉換檔名
+ begin
+ v := Pos(',',S1.Strings[i]);
+ v1 := length(S1.Strings[i]);
+ OldName := copy(S1.Strings[i],1,v-1);
+ NewName := copy(S1.Strings[i],v+1,v1-v);
+ if FileExists(Path+OldName) then
+ begin
+ ReNameFile(Path+OldName,Path+NewName);
+ S.Add(NewName);
+ S.SaveToFile(Path+'Context.dat');
+ end;
+ end;
+ ReSortFileName(Path);
+ finally
+ S.Free;
+ S1.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.CaseResort2Scanlist(Path:String); //案件的檔案重新排序給scanlist(次文件依FormID排)
+var
+ i,n,v,v1 : Integer;
+ S,S1 : TStringlist;
+ FormID,OldName,NewName,DocNo,Doc_Type:String;
+ x : Integer;
+begin
+ S := TStringlist.Create;
+ S1 := TStringlist.Create;
+ try
+ if FileExists(Path+'Context.dat') then
+ S.LoadFromFile(Path+'Context.dat');
+ X := 0;
+ for I := 1 to FORM_INF_List.Count - 1 do //在FormID有設定的 //主文件 照SQL排 20101028改
+ begin
+ FormID := GetSQLData(FORM_INF_List,'T1.FORM_ID',i);
+ if FormCode2FileName(FormID,S) = '' then
+ Continue;
+ Doc_Type := GetSQLData(FORM_INF_List,'T2.DOC_TYPE',i);
+ for n := 0 to S.Count - 1 do
+ begin
+ if (S.Strings[n][1] <> '*') and (FileName2FormCode(S.Strings[n]) = FormID) and (Doc_Type='1') then
+ begin
+ Inc(X);
+ OldName := S.Strings[n];
+ //NewName := Add_Zoo(S.Count+x,3)+Copy(OldName,4,length(OldName)-3); //從原有數量加1開始編
+ NewName := Add_Zoo(S.Count+x,3)+FileName2NoQuene_Filename(OldName); //從原有數量加1開始編
+ S.Strings[n] := '*'+S.Strings[n];
+ S1.Add(OldName+','+NewName);
+ end;
+ end;
+ end;
+
+ for I := 0 to FORM_INF_List.Count - 1 do //次文件 照SQL排 20110512為了某個文件要先打的原因要求改
+ begin
+
+ FormID := GetSQLData(FORM_INF_List,'T1.FORM_ID',i);
+ if FormCode2FileName(FormID,S) = '' then
+ Continue;
+ Doc_Type := GetSQLData(FORM_INF_List,'T2.DOC_TYPE',i);
+ for n := 0 to S.Count - 1 do
+ begin
+ if (S.Strings[n][1] <> '*') and (FileName2FormCode(S.Strings[n]) = FormID) and (Doc_Type='2') then
+ begin
+ Inc(X);
+ OldName := S.Strings[n];
+ //NewName := Add_Zoo(S.Count+x,3)+Copy(OldName,4,length(OldName)-3); //從原有數量加1開始編
+ NewName := Add_Zoo(S.Count+x,3)+FileName2NoQuene_Filename(OldName); //從原有數量加1開始編
+ S.Strings[n] := '*'+S.Strings[n];
+ S1.Add(OldName+','+NewName);
+ end;
+ end;
+ end;
+
+ {for I := 0 to Doc_Inf_List.Count - 1 do //次文件 照文件代碼+掃瞄順序排 20101101改 20110512晚上又說改回來
+ begin
+ DocNo := GetSQLData(Doc_Inf_List,'DOC_NO',i);
+ Doc_Type := GetSQLData(Doc_Inf_List,'DOC_TYPE',i);
+ for n := 0 to S.Count - 1 do
+ begin
+ if (S.Strings[n][1] <> '*') and (FormCode2DocNo(FileName2FormCode(S.Strings[n])) = DocNo) and (Doc_Type='2') then
+ begin
+ Inc(X);
+ OldName := S.Strings[n];
+ NewName := Add_Zoo(S.Count+x,3)+Copy(OldName,4,length(OldName)-3); //從原有數量加1開始編
+ S.Strings[n] := '*'+S.Strings[n];
+ S1.Add(OldName+','+NewName);
+ end;
+ end;
+ end;}
+
+ {for n := 0 to S.Count - 1 do //次文件 照掃瞄順序排 20101028改
+ begin
+ for i := 0 to FORM_INF_List.Count - 1 do
+ begin
+ FormID := GetSQLData(FORM_INF_List,'T1.FORM_ID',i);
+ Doc_Type := GetSQLData(FORM_INF_List,'T2.DOC_TYPE',i);
+ if (S.Strings[n][1] <> '*') and (FileName2FormCode(S.Strings[n]) = FormID) and (Doc_Type='2') then
+ begin
+ Inc(X);
+ OldName := S.Strings[n];
+ NewName := Add_Zoo(S.Count+x,3)+Copy(OldName,4,length(OldName)-3); //從原有數量加1開始編
+ S.Strings[n] := '*'+S.Strings[n];
+ S1.Add(OldName+','+NewName);
+ end;
+ end;
+ end;}
+ for i := 0 to S.Count - 1 do //FormID沒設定的或附件
+ begin
+ if S.Strings[i][1] <> '*' then
+ begin
+ Inc(X);
+ OldName := S.Strings[i];
+ //NewName := Add_Zoo(S.Count+x,3)+Copy(OldName,4,length(OldName)-3);
+ NewName := Add_Zoo(S.Count+x,3)+FileName2NoQuene_Filename(OldName);
+ S.Strings[i] := '*'+S.Strings[i];
+ S1.Add(OldName+','+NewName);
+ end;
+ end;
+
+ S.Clear;
+ for i := 0 to S1.Count - 1 do //開始轉換檔名
+ begin
+ v := Pos(',',S1.Strings[i]);
+ v1 := length(S1.Strings[i]);
+ OldName := copy(S1.Strings[i],1,v-1);
+ NewName := copy(S1.Strings[i],v+1,v1-v);
+ //if FileExists(Path+OldName) then
+ //begin
+ //ReNameFile(Path+OldName,Path+NewName);
+ S.Add(NewName);
+ S.SaveToFile(Path+'scanlist.dat');
+ //end;
+ end;
+ ReSortFileName2Scanlist(Path);
+ finally
+ S.Free;
+ S1.Free;
+ end;
+end;
+
+
+Procedure TCB_IMGPSScanX.DistinctDocinCase(Path:String); //列出案件裡的Docno_版本
+var
+ i,n,v : Integer;
+ S : TStringlist;
+ FormCode,DocNo,Ver : String;
+ Doc_Ver : String;
+ Exists : Boolean;
+begin
+ S := TSTringlist.Create;
+ try
+ DocNo_VerinCase.Clear;
+ S.LoadFromFile(Path+'Context.dat');
+ for I := 0 to S.Count - 1 do
+ begin
+ if FWH_category='N' then
+ begin
+ if (ISExistImg(Path+S.Strings[i])) or (reSizeExistImgList.IndexOf(LoadFileGetMD5(Path+S.Strings[i]))<>-1) then
+ begin
+ Continue;
+ end;
+ end;
+ FormCode := FileName2FormCode(S.Strings[i]);
+ DocNo := FormCode2DocNo(FormCode);
+ Ver := FormCode2Version(FormCode);
+ if (Docno <> '') and (Ver <> '') then
+ begin
+ Doc_Ver := DocNo+'_'+Ver;
+ Exists := False;
+ for n := 0 to DocNo_VerinCase.Count-1 do
+ begin
+ if Doc_Ver = DocNo_VerinCase.Strings[n] then
+ begin
+ Exists := True;
+ Break;
+ end;
+ end;
+ if not Exists then
+ DocNo_VerinCase.Add(Doc_Ver);
+ end;
+ end;
+ finally
+ S.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.DistinctDocNoinCase(Path:String); //列出案件裡的Docno
+var
+ i,n,v : Integer;
+ S : TStringlist;
+ FormCode,DocNo,Ver : String;
+ Exists : Boolean;
+begin
+ S := TSTringlist.Create;
+ try
+ CaseDocNoList.Clear;
+ S.LoadFromFile(Path+'Context.dat');
+ for I := 0 to S.Count - 1 do
+ begin
+ FormCode := FileName2FormCode(S.Strings[i]);
+ DocNo := FormCode2DocNo(FormCode);
+ if (Docno <> '') then
+ begin
+ Exists := False;
+ for n := 0 to CaseDocNoList.Count-1 do
+ begin
+ if DocNo = CaseDocNoList.Strings[n] then
+ begin
+ Exists := True;
+ Break;
+ end;
+ end;
+ if not Exists then
+ CaseDocNoList.Add(DocNo);
+ end;
+ end;
+ finally
+ S.Free;
+ end;
+
+end;
+
+Procedure TCB_IMGPSScanX.ClearErrini(CaseID:String;CaseNode:TTreeNode); //清掉檢核檔案
+var
+ i : Integer;
+begin
+ if FileExists(ImageSavePath+CaseID+'\Checkerr.ini') then
+ DeleteFile(ImageSavePath+CaseID+'\Checkerr.ini');
+ if FileExists(ImageSavePath+CaseID+'\CheckMemo.dat') then
+ DeleteFile(ImageSavePath+CaseID+'\CheckMemo.dat');
+ {if FileExists(ImageSavePath+CaseID+'\ReSize.dat') then //20110421拿掉 因為記錄會不見
+ DeleteFile(ImageSavePath+CaseID+'\ReSize.dat');}
+ if FileExists(ImageSavePath+CaseID+'\RemoveMemo.dat') then
+ DeleteFile(ImageSavePath+CaseID+'\RemoveMemo.dat');
+ if FileExists(ImageSavePath+CaseID+'\OMRCheckOk.dat') then
+ DeleteFile(ImageSavePath+CaseID+'\OMRCheckOk.dat');
+ CaseHelpBtn.Visible := False;
+ CaseNode.ImageIndex := 2;
+ CaseNode.SelectedIndex := 2;
+end;
+
+Procedure TCB_IMGPSScanX.SetCaseList(Mode:Char;Index:Integer;text:String); //'A:加入,I:插入,D:刪除,E:修改'
+var
+ i : Integer;
+begin
+ CaseList.Clear;
+ if FileExists(ImageSavePath + 'CaseList.dat') then
+ CaseList.LoadFromFile(ImageSavePath + 'CaseList.dat');
+ case Mode of
+ 'A':begin
+ CaseList.Add(Text);
+ end;
+ 'I':begin
+ CaseList.Insert(Index,Text);
+ end;
+ 'E':begin
+ CaseList.Strings[Index] := Text;
+ end;
+ 'D':begin
+ if Index <> -1 then
+ CaseList.Delete(Index)
+ Else if (text <> '') then
+ begin
+ for i := 0 to CaseList.Count - 1 do
+ begin
+ if Text = CaseList.Strings[i] then
+ begin
+ CaseList.Delete(i);
+ Break;
+ end;
+ end;
+ end;
+ if CaseList.Count = 0 then
+ DeleteFile(ImageSavePath + 'CaseList.dat');
+ end;
+ end;
+ if CaseList.Count > 0 then
+ CaseList.SaveToFile(ImageSavePath+'CaseList.dat');
+end;
+
+Procedure TCB_IMGPSScanX.SetDocNoList(Mode:Char;Index:Integer;CaseNo,DocDir,Copies:String); //'A:加入,I:插入,D:刪除,E:修改'
+var
+ i : Integer;
+ CaseDocNoList : TStringlist;
+ CaseDocNo_copiesList : TStringlist;
+begin
+ CaseDocNoList := TStringlist.Create;
+ CaseDocNo_CopiesList := TStringlist.Create;
+ try
+ CaseDocNoList.Clear;
+ if FileExists(ImageSavePath+CaseNo+'\CaseDocNo.dat') then
+ CaseDocNoList.LoadFromFile(ImageSavePath+CaseNo+'\CaseDocNo.dat');
+ if FileExists(ImageSavePath+CaseNo+'\CaseDocNo_Copies.dat') then
+ CaseDocNo_CopiesList.LoadFromFile(ImageSavePath+CaseNo+'\CaseDocNo_Copies.dat');
+ case Mode of
+ 'A':begin
+ CaseDocNoList.Add(DocDir);
+ CaseDocNo_CopiesList.Add(Copies);
+ SetRecordEditedDocDir('A',CaseNo,DocDir);
+ end;
+ 'I':begin
+ CaseDocNoList.Insert(Index,DocDir);
+ CaseDocNo_CopiesList.Insert(Index,Copies);
+ end;
+ 'E':begin
+ CaseDocNoList.Strings[Index] := DocDir;
+ CaseDocNo_CopiesList.Strings[Index] := Copies;
+ end;
+ 'D':begin
+ if Index <> -1 then
+ begin
+ //SetRecordEditedDocDir('D',CaseNo,CaseDocNoList.Strings[Index]); //20140624 修改刪除文件時也記一筆異動,刪掉會無法通知前端網頁有異動
+ SetRecordEditedDocDir('A',CaseNo,CaseDocNoList.Strings[Index]); //20170912 要刪除 不然我寫不下去
+
+ CaseDocNoList.Delete(Index);
+ CaseDocNo_CopiesList.Delete(Index);
+
+ end
+ Else if (DocDir <> '') then
+ begin
+ for i := 0 to CaseDocNoList.Count - 1 do
+ begin
+ if DocDir = CaseDocNoList.Strings[i] then
+ begin
+ //SetRecordEditedDocDir('D',CaseNo,CaseDocNoList.Strings[i]); //20140624 修改刪除文件時也記一筆異動,刪掉會無法通知前端網頁有異動
+ SetRecordEditedDocDir('A',CaseNo,CaseDocNoList.Strings[i]); //20170912 要刪除 不然我寫不下去
+ CaseDocNoList.Delete(i);
+ CaseDocNo_CopiesList.Delete(i);
+ Break;
+ end;
+ end;
+ end;
+ if ContextList.Count = 0 then
+ begin
+ DeleteFile(ImageSavePath+CaseNo+'\CaseDocNo.dat');
+ end;
+ end;
+ end;
+ //Showmessage('abc'+#13+ImageSavePath+CaseNo+'\CaseDocNo.dat'+#13+inttostr(CaseDocNoList.Count)+#13+CaseDocNoList.Text);
+ if CaseDocNoList.Count >= 0 then
+ begin
+ CaseDocNoList.SaveToFile(ImageSavePath+CaseNo+'\CaseDocNo.dat');
+ CaseDocNo_CopiesList.SaveToFile(ImageSavePath+CaseNo+'\CaseDocNo_Copies.dat');
+ //Showmessage('存了');
+ end;
+ finally
+ CaseDocNoList.Free;
+ CaseDocNo_CopiesList.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.SetContextList(Mode:Char;Index:Integer;CaseNo,DocDir,FileName:String); //'A:加入,I:插入,D:刪除,E:修改'
+var
+ i : Integer;
+ //DocNo:String;
+begin
+ //DocNo := FormCode2DocNo(FileName2FormCode(FileName));
+//ShowMessage('FileName='+FileName);
+ if DocDir = '' then
+ DocDir := AttName ; //附件
+ ContextList.Clear;
+ if FileExists(ImageSavePath+CaseNo+'\'+DocDir+'\Context.dat') then
+ ContextList.LoadFromFile(ImageSavePath+CaseNo+'\'+DocDir+'\Context.dat');
+ SetRecordEditedDocDir('A',CaseNo,DocDir); //記錄文件有異動
+ case Mode of
+ 'A':begin
+ ContextList.Add(FileName);
+ end;
+ 'I':begin
+ ContextList.Insert(Index,FileName);
+ end;
+ 'E':begin
+ ContextList.Strings[Index] := FileName;
+ end;
+ 'D':begin
+ if Index <> -1 then
+ begin
+ ContextList.Delete(Index);
+ end
+ Else if (text <> '') then
+ begin
+ for i := 0 to ContextList.Count - 1 do
+ begin
+ if FileName = ContextList.Strings[i] then
+ begin
+ ContextList.Delete(i);
+ Break;
+ end;
+ end;
+ end;
+ if ContextList.Count = 0 then
+ DeleteFile(ImageSavePath+CaseNo+'\'+DocDir+'\Context.dat');
+ end;
+ end;
+ if ContextList.Count > 0 then
+ begin
+ ContextList.SaveToFile(ImageSavePath+CaseNo+'\'+DocDir+'\Context.dat');
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.SetAttContextList(Mode:Char;Index:Integer;CaseNo,FileName:String); //'A:加入,I:插入,D:刪除,E:修改'
+var
+ i : Integer;
+begin
+ AttContextList.Clear;
+ if FileExists(ImageSavePath+CaseNo+'\AttContext.dat') then
+ AttContextList.LoadFromFile(ImageSavePath+CaseNo+'\AttContext.dat');
+ case Mode of
+ 'A':begin
+ AttContextList.Add(FileName);
+ end;
+ 'I':begin
+ AttContextList.Insert(Index,FileName);
+ end;
+ 'E':begin
+ AttContextList.Strings[Index] := FileName;
+ end;
+ 'D':begin
+ if Index <> -1 then
+ begin
+ AttContextList.Delete(Index);
+ end
+ Else if (text <> '') then
+ begin
+ for i := 0 to AttContextList.Count - 1 do
+ begin
+ if FileName = AttContextList.Strings[i] then
+ begin
+ AttContextList.Delete(i);
+ Break;
+ end;
+ end;
+ end;
+ if AttContextList.Count = 0 then
+ DeleteFile(ImageSavePath+CaseNo+'\AttContext.dat');
+ end;
+ end;
+ if AttContextList.Count > 0 then
+ begin
+ AttContextList.SaveToFile(ImageSavePath+CaseNo+'\AttContext.dat');
+ end;
+end;
+
+Function TCB_IMGPSScanX.checkCaseOMRDone:Boolean; //檢查案件是否完成OMR檢核
+var
+ i : Integer;
+begin
+ Result := True;
+ for I := 0 to NewTreeNode.Count - 1 do
+ begin
+ if NewTreeNode.Item[i].ImageIndex <> 7 then
+ begin
+ Result := False;
+ Break;
+ end;
+ end;
+end;
+
+function TCB_IMGPSScanX.checkFormCodeIsCustom(path, formcode: string): boolean;
+var
+ i:integer;
+ ini : Tmeminifile;
+ str1:String;
+begin
+//ShowMessage(path);
+ ini := Tmeminifile.Create(Path+'CustomDocNo.ini');
+ str1:=ini.ReadString(Copy(formcode,1,8),'FormID','');
+//ShowMessage('str1'+str1);
+ if str1 = formcode then
+ begin
+ Result:=True;
+ end
+ else
+ begin
+ Result := False;
+ end;
+
+end;
+
+Function TCB_IMGPSScanX.CheckCaseID_OK:Boolean; //檢查是否有未配號的案件
+var
+ i,n : Integer;
+begin
+ Result := True;
+ for i := 0 to NewTreeNode.Count - 1 do
+ begin
+ if Pos(_msg('未配號'),NewTreeNode.Item[i].Text) > 0 then
+ begin
+ Result := False;
+ Break;
+ end;
+ end;
+end;
+
+Function TCB_IMGPSScanX.CheckCaseAttach_OK:Boolean; //檢查是否有未歸類的案件
+var
+ i,j : Integer;
+begin
+ Result := True;
+ for i := 0 to NewTreeNode.Count - 1 do
+ begin
+ for j := 0 to NewTreeNode.Item[i].Count - 1 do
+ begin
+ if Pos(_msg('未歸類'),NewTreeNode.Item[i].Item[j].Text) > 0 then
+ begin
+ Result := False;
+ Break;
+ end;
+ end;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.CreateEmptyCase(Path,CaseID:String); //產生空白案號(重掃件用)
+var
+ S : TStringlist;
+begin
+ S := TStringlist.Create;
+ try
+ S.SaveToFile(Path+CaseID+'\Context.dat');
+ S.Add(FCaseID);
+ S.SaveToFile(Path+'CaseList.dat')
+ finally
+ S.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.InitScrollRec;
+var i : Integer;
+begin
+ for I := 1 to 8 do
+ begin
+ ScrollRec[i].HScroll := 0;
+ ScrollRec[i].VScroll := 0;
+ end;
+end;
+
+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;
+
+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;
+
+Procedure TCB_IMGPSScanX.FormIDReplace(CaseID,DocDir,OldFormID,NewFormID:String); //指定FormID更換成新的FormID
+var
+ i : Integer;
+ OldFileList,NewFileList : TStringlist;
+ NewDocNo,NewDocDir:String;
+ FormID : String;
+ OldFile,NewFile:String;
+ Ext : String;
+ ST1:TStringList;
+begin
+ ST1:=TStringList.Create;
+ OldFileList := TStringlist.Create;
+ NewFileList := TStringlist.Create;
+ try
+ NewDocNo := FormCode2DocNo(NewFormID);
+ NewDocDir := FindLastestDocDir(CaseID,NewDocNo);
+
+ /////20190319 Hong 原本的程式判斷怪怪的先Mark在下方,改用這段
+ if DocNoNeedDiv(NewDocNo) then //要分份數
+ begin
+ if ((FormCode2Page(NewFormID) = '01') and (GetDocDir_Page(CaseID,NewDocDir)>0)) or (NewDocDir = '') then
+ begin
+ NewDocDir := DocNo2DocNoDir(ImageSavePath + CaseID+'\',NewDocNo);
+ end
+ else
+ begin //20171016 真對補件影響 所加的判斷
+ ST1.Clear;
+ if FileExists(ImageSavePath + CaseID+'\'+NewDocDir+'\Context.dat') then
+ begin
+ ST1.LoadFromFile(ImageSavePath + CaseID+'\'+NewDocDir+'\Context.dat');
+ if (ST1.Count > 0) and ISExistImg(ImageSavePath + CaseID+'\'+NewDocDir+'\'+ST1.Strings[0]) then //20181210 多增加判斷ST1>0 否則會有機會出現List out of bound Hong
+ begin
+ NewDocDir := DocNo2DocNoDir(ImageSavePath + CaseID+'\',NewDocNo);
+ end;
+ end;
+ end;
+ end
+ Else //不分份數
+ begin
+ if NewDocNo <> '' then
+ NewDocDir := NewDocNo
+ else //Attach 附件
+ NewDocDir := DocNo2DocNoDir(ImageSavePath + CaseID+'\',NewDocNo);
+ end;
+
+ {if NewDocDir = '' then
+ begin
+ if DocNoNeedDiv(NewDocNo) then
+ begin
+ NewDocDir:=DocNo2DocNoDir(ImageSavePath + NowCaseno+'\',NewDocNo);
+ end
+ else
+ begin
+ NewDocDir := NewDocNo;
+ end;
+ end;
+//ShowMessage('NewDocDir='+NewDocDir);
+ if DocNoNeedDiv(NewDocNo) and (FormCode2Page(NewFormID)='01') then
+ begin
+ NewDocDir := DocNo2DocNoDir(ImageSavePath+CaseID+'\',NewDocNo);
+ end
+ else
+ begin
+ ST1.Clear;
+ if FileExists(ImageSavePath + NowCaseno+'\'+NewDocDir+'\Context.dat') then
+ begin
+ ST1.LoadFromFile(ImageSavePath + NowCaseno+'\'+NewDocDir+'\Context.dat');
+ if ISExistImg(ImageSavePath + NowCaseno+'\'+NewDocDir+'\'+ST1.Strings[0]) then
+ begin
+ NewDocDir := DocNo2DocNoDir(ImageSavePath + NowCaseno+'\',NewDocNo);
+ end;
+ end;
+ end; }
+ if Not DirectoryExists(ImageSavePath+CaseID+'\'+NewDocDir) then
+ begin
+ MkDir(ImageSavePath+CaseID+'\'+NewDocDir);
+ SetDocNoList('A',-1,CaseID,NewDocDir,'1');
+ end;
+ if FileExists(ImageSavePath+CaseID+'\'+DocDir+'\Context.dat') then
+ OldFileList.LoadFromFile(ImageSavePath+CaseID+'\'+DocDir+'\Context.dat');
+ if FileExists(ImageSavePath+CaseID+'\'+NewDocDir+'\Context.dat') then
+ NewFileList.LoadFromFile(ImageSavePath+CaseID+'\'+NewDocDir+'\Context.dat');
+ for i := 0 to OldFileList.Count - 1 do
+ begin
+ OldFile := OldFileList.Strings[i];
+ Ext := ExtractFileExt(OldFile);
+ if FileName2FormCode(OldFile) = OldFormID then
+ begin
+ NewFile := Add_Zoo(NewFileList.Count+1,3)+'_'+NewFormID+Ext;
+ CopyFile(PWideChar(ImageSavePath+CaseID+'\'+DocDir+'\'+OldFile),PWideChar(ImageSavePath+CaseID+'\'+NewDocDir+'\'+NewFile),False);
+ NewFileList.Add(NewFile);
+ SetContextList('A',-1,CaseID,NewDocDir,NewFile);
+ end;
+ end;
+ DeleteFormCodeFile(CaseID,DocDir,OldFormID);
+
+ {for i := 0 to S.Count - 1 do
+ begin
+ FormID := FileName2FormCode(S.Strings[i]);
+ if FormID = OldFormID then
+ begin
+ OldFile := S.Strings[i];
+ Ext := ExtractFileExt(OldFile);
+ //NewFile := Copy(S.Strings[i],1,3)+'_'+NewFormID+Ext;
+ NewFile := Add_Zoo(FileName2ScanPage(S.Strings[i]),3)+'_'+NewFormID+Ext;
+ ReNameFile(Path+OldFile,Path+NewFile);
+ S.Strings[i] := NewFile;
+ end;
+ end;
+ S.SaveToFile(Path+'Context.dat');
+ ContextList.LoadFromFile(Path+'Context.dat'); }
+
+ finally
+ OldFileList.Free;
+ NewFileList.Free;
+ ST1.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.ShowFileReplace(Path,NewFormID:String);//顯示的影像換成新的FormID
+var
+ i,n : Integer;
+ OldFile,NewFile:String;
+ Ext : String;
+begin
+ for i := 0 to NowShowFileList.Count - 1 do
+ begin
+ OldFile := NowShowFileList.Strings[i];
+ Ext := ExtractFileExt(OldFile);
+ NewFile := Add_Zoo(FileName2ScanPage(OldFile),3)+'_'+NewFormID+Ext;
+ ReNameFile(Path+OldFile,Path+NewFile);
+ SetContextList('E',FileName2Index(OldFile),NowCaseno,NowDocNo,NewFile);
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.PageReplaceFormID(Path,NowFormID,NewFormID:String); //選取頁更換FormID
+var
+ i,n : Integer;
+ S,S1 : TStringlist;
+ OldFile,NewFile:String;
+ Ext : String;
+begin
+ S := TStringlist.Create;
+ S1 := TStringlist.Create;
+ try
+ S.LoadFromFile(Path+'Context.dat');
+ for i := 0 to S.Count - 1 do
+ begin
+ if NowFormID = 'ALL' then
+ S1.Add(S.Strings[i])
+ Else if NowFormID = 'Err' then
+ begin
+ if not FormIDExists(FileName2FormCode(S.Strings[i]),False,0) then
+ S1.Add(S.Strings[i])
+ end
+ Else
+ begin
+ if NowFormID = FileName2FormCode(S.Strings[i]) then
+ S1.Add(S.Strings[i])
+ end;
+ end;
+ for I := 0 to PageLV.Items.Count - 1 do
+ begin
+ if PageLV.Items.Item[i].Selected then
+ begin
+ OldFile := S1.Strings[i];
+ Ext := ExtractFileExt(OldFile);
+ //NewFile := Copy(S1.Strings[i],1,3)+'_'+NewFormID+Ext;
+ NewFile := Add_Zoo(FileName2ScanPage(S1.Strings[i]),3)+'_'+NewFormID+Ext;
+ ReNameFile(Path+OldFile,Path+NewFile);
+ for n := 0 to S.Count - 1 do
+ begin
+ if OldFile = S.Strings[n] then
+ S.Strings[n] := NewFile;
+ end;
+ end;
+ end;
+ S.SaveToFile(Path+'Context.dat');
+ ContextList.LoadFromFile(Path+'Context.dat');
+ finally
+ S.Free;
+ S1.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.ModeNeedCheck(OMRMode,ScanMode:String):Boolean; //掃瞄模式是否要做檢核
+begin
+ Result := False;
+ if Pos(ScanMode,OMRMode) > 0 then
+ Result := True;
+end;
+
+Function TCB_IMGPSScanX.GetInputMask:String; //取得輸入的保單號碼
+var
+ InputMaskForm: TInputMaskForm;
+begin
+ Result := '';
+ ShowText := _msg('輸入保單號碼中');
+ DataLoading(True,True);
+ InputMaskForm := TInputMaskForm.Create(self);
+ try
+ InputMaskForm.MaskEdit1.ClearSelection;
+ if InputMaskForm.ShowModal = mrOk then
+ begin
+ Result := Trim(InputMaskForm.MaskEdit1.Text)+Trim(InputMaskForm.MaskEdit2.Text)+Trim(InputMaskForm.MaskEdit3.Text);
+ end;
+ finally
+ InputMaskForm.Free;
+ DataLoading(False,False);
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetCasePage(Path,CaseID:String):Integer;
+var
+ DocDirList,FileList,ST1 :TStringlist;
+ iDocDir,iDocNo : String;
+ i,n,Count : Integer;
+begin
+ Count := 0;
+ DocDirList := TStringlist.Create;
+ FileList := TStringlist.Create;
+ ST1:=TStringList.Create;
+ try
+ if FileExists(Path+CaseID+'\CaseDocNo.dat') then
+ DocDirList.LoadFromFile(Path+CaseID+'\CaseDocNo.dat');
+ //Showmessage(DocDirList.Text);
+ for i := 0 to DocDirList.Count - 1 do
+ begin
+ iDocDir := DocDirList.Strings[i];
+ iDocno := DocNoDir2DocNo(iDocDir);
+ {if (((FIs_In_Wh = 'Y') and (not DocNoIs_In_WH(iDocNo))) or //入庫掃描不看非入庫文件
+ ((FIs_In_Wh = 'N') and (DocNoIs_In_WH(iDocNo)))) and
+ ((iDocNo <> 'Attach') and (Copy(iDocNo,1,5)<>'ZZZZZ')) then //非入庫掃描不看入庫文件
+ begin
+ Continue;
+ end;}
+ //if not DocNoAppear(iDocNo) then Continue; //20170817 先註解
+
+ FileList.Clear;
+ if FileExists(Path+CaseID+'\'+iDocDir+'\Context.dat') then
+ begin
+ FileList.LoadFromFile(Path+CaseID+'\'+iDocDir+'\Context.dat');
+
+ if (FWH_category='N') and (FIs_In_Wh='Y') then
+ begin
+ ST1.Clear;
+ for n := 0 to FileList.Count - 1 do
+ begin
+ if ISExistImg(Path+CaseID+'\'+iDocDir+'\'+FileList.Strings[n]) then
+ begin
+ ST1.Add(FileList.Strings[n]);
+ end;
+ end;
+
+ for n := 0 to ST1.Count - 1 do
+ begin
+ if (FileList.IndexOf(ST1.Strings[n])<>-1) and (not DocNoIs_In_WH(iDocNo)) then
+ begin
+ FileList.Delete(FileList.IndexOf(ST1.Strings[n]));
+ end;
+ end;
+ end
+ Else
+ if not DocNoAppear(iDocNo) then Continue; //20180925 Hong覺得應該要加這段
+ end;
+
+
+ Count := Count+ FileList.Count;
+ end;
+ if FileExists(Path+CaseID+'\'+AttName+'\Context.dat') then
+ begin
+ FileList.LoadFromFile(Path+CaseID+'\'+AttName+'\Context.dat');
+ Count := Count+ FileList.Count;
+ end;
+
+ Result := Count;
+ finally
+ DocDirList.Free;
+ FileList.Free;
+ ST1.free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetFormIDPage(FileList:TStringlist;FormID:String):Integer;
+var
+ i,Cnt : Integer;
+begin
+ Cnt := 0;
+ for i := 0 to FileList.Count - 1 do
+ begin
+ if FormID = FileName2FormCode(FileList.Strings[i]) then
+ begin
+ inc(Cnt);
+ end;
+ end;
+ Result := Cnt;
+end;
+
+Procedure TCB_IMGPSScanX.SetFile2Case(CaseID,FileName:String);
+var
+ S :TStringlist;
+begin
+ S := TStringlist.Create;
+ try
+ S.LoadFromFile(ImageSavePath+CaseID+'\Context.dat');
+ S.Add(FileName);
+ S.SaveToFile(ImageSavePath+CaseID+'\Context.dat');
+ finally
+ S.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.WriteResize(ImgName,TxtName:String); //產生Resize.dat
+var
+ TagTxt : String;
+ RecHeight,RecWidth : String;
+ ImgHeight,ImgWidth : String;
+ S : TStringlist;
+ v,v1:Integer;
+begin
+ ImageScrollBox1.LoadFromFile(ImgName,1);
+ ImgHeight := Inttostr(ImageScrollBox1.Graphic.Height);
+ ImgWidth := Inttostr(ImageScrollBox1.Graphic.Width);
+ Try
+ TagTxt := GetTag(ImgName);
+ Except
+ TagTxt := '';
+ End;
+ if TagTxt <> '' then
+ begin
+ S := TStringlist.Create;
+ try
+ S.CommaText := TagTxt;
+ if S.Count = 2 then
+ begin
+ v := Pos(':',S.Strings[0]);
+ v1 := length(S.Strings[0]);
+ RecHeight := Copy(S.Strings[0],v+1,v1-v);
+ v := Pos(':',S.Strings[1]);
+ v1 := length(S.Strings[1]);
+ RecWidth := Copy(S.Strings[1],v+1,v1-v);
+ end;
+ S.Clear;
+ if FileExists(TxtName) then
+ S.LoadFromFile(TxtName);
+ if (RecHeight <> '') and (RecWidth <> '') and ((RecHeight<>ImgHeight) or (RecWidth<>ImgWidth)) then
+ S.Add(ExtractfileName(ImgName)+',原長:'+RecHeight+',原寬:'+RecWidth+',長變動:'+ImgHeight+',寬變動:'+ImgWidth);
+ S.SaveToFile(TxtName);
+ finally
+ S.Free;
+ end;
+ end;
+
+end;
+
+Function TCB_IMGPSScanX.GetCase_PageCount(var CaseCount,PageCount:Integer):Boolean; //取出案件的數量及頁數
+var
+ i,n,k: Integer;
+ CaseList,DocList,FileList,ST1 : TStringlist;
+begin
+ Result := False;
+ CaseCount := 0;
+ PageCount := 0;
+ CaseList := TStringlist.Create;
+ DocList := TStringlist.Create;
+ FileList := TStringlist.Create;
+ ST1:= TStringlist.Create;
+ try
+ ImageSavePath := ImagePath;
+ CaseList.Clear;
+ if FileExists(ImageSavePath + 'CaseList.dat') then
+ CaseList.LoadFromFile(ImageSavePath + 'CaseList.dat');
+ CaseCount := CaseCount+CaseList.Count;
+//ShowMessage('ImageSavePath='+ImageSavePath+#10#13+'CaseList.Count='+IntToStr(CaseList.Count));
+ for i := 0 to CaseList.Count - 1 do
+ begin
+ DocList.Clear;
+ If FileExists(ImageSavePath+CaseList.Strings[i]+'\CaseDocNo.dat') Then
+ DocList.LoadFromFile(ImageSavePath+CaseList.Strings[i]+'\CaseDocNo.dat');
+//ShowMessage('DocList='+DocList.Text);
+ for n := 0 to DocList.Count - 1 do
+ begin
+//ShowMessage(DocList.Strings[n]+','+BoolToStr(DocNoAppear(DocNoDir2DocNo(DocList.Strings[n])),true));
+ if not DocNoAppear(DocNoDir2DocNo(DocList.Strings[n])) then Continue;
+ FileList.Clear;
+ If FileExists(ImageSavePath+CaseList.Strings[i]+'\'+DocList.Strings[n]+'\Context.dat') Then
+ FileList.LoadFromFile(ImageSavePath+CaseList.Strings[i]+'\'+DocList.Strings[n]+'\Context.dat');
+ PageCount := PageCount+FileList.Count;
+ end;
+ //Showmessage(inttostr(PageCount));
+ FileList.Clear;
+ If FileExists(ImageSavePath+CaseList.Strings[i]+'\'+Attname+'\Context.dat') Then
+ FileList.LoadFromFile(ImageSavePath+CaseList.Strings[i]+'\'+Attname+'\Context.dat');
+ //Showmessage(ImageSavePath+CaseList.Strings[i]+'\'+Attname+'\Context.dat');
+//Showmessage('FileList='+FileList.Text);
+ PageCount := PageCount+FileList.Count;
+//Showmessage('PageCount='+inttostr(PageCount));
+ if (FWH_category='N') and (FIs_In_Wh='Y') then //20170912 針對非入庫並當次掃描做頁數計算
+ begin
+ if FileExists(ImageSavePath+NowCaseno+'\EditedDocDir.dat') then
+ begin
+ ST1.LoadFromFile(ImageSavePath+NowCaseno+'\EditedDocDir.dat');
+ for n := 0 to ST1.Count - 1 do
+ begin
+ if ST1.Strings[n]=AttName then Continue;
+//ShowMessage(ST1.Strings[n]+','+BoolToStr(DocNoIs_In_WH(DocNoDir2DocNo(ST1.Strings[n])),true));
+ if not DocNoIs_In_WH(DocNoDir2DocNo(ST1.Strings[n])) then
+ begin
+
+ FileList.Clear;
+ if FileExists(ImageSavePath+CaseList.Strings[i]+'\'+ST1.Strings[n]+'\Context.dat') then
+ begin
+ FileList.LoadFromFile(ImageSavePath+CaseList.Strings[i]+'\'+ST1.Strings[n]+'\Context.dat');
+ for k := 0 to FileList.Count - 1 do
+ begin
+ if not ISExistImg(ImageSavePath+CaseList.Strings[i]+'\'+ST1.Strings[n]+'\'+FileList.Strings[k]) then
+ PageCount := PageCount+1;
+ end;
+ end;
+ end;
+ end;
+ end;
+ end;
+ end;
+ Finally
+ CaseList.Free;
+ DocList.Free;
+ FileList.Free;
+ ST1.Free
+ end;
+ Result := True;
+end;
+
+Function TCB_IMGPSScanX.FindNoSaveBarCode : Boolean; //找是否有不要儲存影像的條碼
+var
+ i,n : Integer;
+begin
+ Result := False;
+ for i := 1 to MpsBarcodeinf.Count do
+ begin
+ for n := 0 to NoSaveBarCodeList.Count - 1 do
+ begin
+ if MpsBarcodeinf.Text[i] = NoSaveBarCodeList.Strings[n] then
+ begin
+ Result := True;
+ Break;
+ end;
+ end;
+ if Result then
+ Break;
+ end;
+end;
+
+Function TCB_IMGPSScanX.BarCode2CaseID : String; //Barcode依規則轉成CaseID
+var
+ i : Integer;
+ iCaseID : String;
+begin
+ Result := ''; //沒找到
+ iCaseID := '';
+ for i := 1 to MpsBarcodeinf.Count do //20180920 拿掉-1
+ begin
+ if (Length(MpsBarcodeinf.text[i]) = CaseIDLength) then
+ begin
+ iCaseID := MpsBarcodeinf.text[i];
+ Result := iCaseID;
+ Break;
+ end;
+ end;
+end;
+
+Function TCB_IMGPSScanX.BarCode2FormID : String; //Barcode依規則轉成FormID
+var
+ i : Integer;
+ FormID : String;
+begin
+ Result := ''; //沒找到
+ FormID := '';
+ for i := 1 to MpsBarcodeinf.Count do
+ begin
+ if (Length(MpsBarcodeinf.Text[i]) = FormIDLength) then
+ begin
+ FormID := MpsBarcodeinf.text[i];
+ if not FormIDAppear(FormID) then
+ FormID := '';
+ end;
+ if (FormID <> '') and FormIDExists(FormID,False,0) then //有可用的FormID就離開
+ begin
+ Result := FormID;
+ Break;
+ end;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.WriteCaseIndex(Path:String);
+Var
+ S : TStringlist;
+begin
+ if Path = '' then Exit;
+ S := TStringlist.Create;
+ try
+ try
+ S.Add(Case_loandoc);
+ S.SaveToFile(Path+'CaseIndex.dat');
+ except on E: Exception do
+ end;
+
+ finally
+ S.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.ReadCaseIndex(Path:String);
+Var
+ S : TStringlist;
+begin
+ AddCredit1RG.ItemIndex := -1;
+ S := TStringlist.Create;
+ try
+ if FileExists(Path+'CaseIndex.dat') then
+ begin
+ S.LoadFromFile(Path+'CaseIndex.dat');
+ Case_loandoc := S.Strings[0];
+ end;
+ if (Case_loandoc = '') and (FLoanDoc_Value <> '') then
+ begin
+ Case_loandoc := FLoanDoc_Value;
+ WriteCaseIndex(Path);
+ end;
+ if Case_loandoc = 'Y' then
+ AddCredit1RG.ItemIndex := 0
+ Else if Case_loandoc = 'N' then
+ AddCredit1RG.ItemIndex := 1;
+
+ finally
+ S.Free;
+ end;
+
+end;
+
+
+procedure TCB_IMGPSScanX.ReduceLogFile; //20171011 必免log檔掌太大
+var
+ ST1:TStringlist;
+ I:integer;
+begin
+ ST1:=TStringList.Create;
+ if FileExists(LngPath+'IMGPSCheck.log') then
+ begin
+ ST1.LoadFromFile(LngPath+'IMGPSCheck.log');
+ if ST1.count>100000 then
+ begin
+ for I := 0 to 10000 do
+ begin
+ ST1.Delete(0);
+ end;
+ ST1.SaveToFile(LngPath+'IMGPSCheck.log');
+ end;
+ end;
+ ST1.Free;
+end;
+
+Procedure TCB_IMGPSScanX.ClearCaseIndex;
+begin
+ AddCredit1RG.Enabled := False;
+ AddCredit1RG.ItemIndex := -1;
+end;
+
+Procedure TCB_IMGPSScanX.GetSelectImageFile;
+var
+ i : Integer;
+ FormID,FormName,DocNo : String;
+ PreNode2Name : String;
+ iFormID : String;
+ iISBName : String;
+ iISB : TImageScrollBox;
+begin
+ NowSelectFileList.Clear;
+ for i := 0 to ComponentCount -1 do
+ begin
+ if (Components[i] is TShape) and (copy(Components[i].Name,1,2)='SP') then
+ begin
+ iISBName := ShapeName2PreViewISBName(TShape(Components[i]));
+ iISB := TImageScrollBox(FindComponent(iISBName));
+ NowSelectFileList.Add(iISB.FileName);
+ end;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetDocNoDir(Path,DocNo:String):String; //取出目前DocNo的份數
+var
+ i : Integer;
+ iDocNo : String;
+begin
+ if (DocNo <> '') then
+ begin
+ i := 0;
+ Repeat
+ begin
+ inc(i);
+ iDocNo := Format('%s_%d',[DocNo,i]);
+ end;
+ until not DirectoryExists(Path+iDocNo);
+ Result := iDocNo;
+ end
+ Else
+ begin
+ Result := AttName;
+ end;
+end;
+
+Function TCB_IMGPSScanX.CheckFormIDExists(DocNoNode:TTreeNode;FormID:String):Boolean; //檢查FormID是否存在文件裡
+var
+ i : Integer;
+begin
+ Result := False;
+ for i := 0 to DocNoNode.Count - 1 do
+ begin
+ if FormID = Node3FormID(DocNoNode.Item[i]) then
+ begin
+ Result := True;
+ break;
+ end;
+ end;
+end;
+
+Function TCB_IMGPSScanX.DocNo2DocNoDir(Path,DocNo:String):String; //DocNo轉成DocNo(份數)目錄
+var
+ i : Integer;
+ iDocNo : String;
+begin
+ if (DocNo <> '') then
+ begin
+ i := 0;
+ Repeat
+ begin
+ inc(i);
+ iDocNo := Format('%s(%d)',[DocNo,i]);
+ end;
+ until not DirectoryExists(Path+iDocNo);
+ Result := iDocNo;
+ end
+ Else
+ begin
+ Result := AttName;
+ end;
+end;
+
+Function TCB_IMGPSScanX.DocNoDir2DocNo(DocNoDir:String):String; //DocNo(份數)目錄轉成DocNo
+var
+ v,ln : Integer;
+begin
+ if (DocNoDir <> 'Attach') and (DocNoDir <> 'S_Attach') then
+ begin
+ v := Pos('(',DocNoDir);
+ if v > 0 then
+ Result := Copy(DocNoDir,1,v-1)
+ else
+ Result := DocNoDir;
+ end
+ Else
+ Result := DocNoDir
+end;
+
+Function TCB_IMGPSScanX.DocNoDir2Index(Path,DocNoDir:String):Integer; //DocNo(份數)目錄轉成index
+var
+ i : Integer;
+ CaseNo_List : TStringlist;
+begin
+ Result := -1;
+ CaseNo_List := TStringlist.Create;
+ try
+ CaseNo_List.LoadFromFile(Path+'CaseDocNo.dat');
+ for i := 0 to CaseNo_List.Count - 1 do
+ begin
+ if DocNoDir = CaseNo_List.Strings[i] then
+ begin
+ Result := i;
+ Break;
+ end;
+ end;
+ finally
+ CaseNo_List.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.ZipMainFile(SoPath,DePath,ZipName:String);
+var
+ ZipFileList : TStringlist;
+ n : Integer;
+begin
+ ZipFileList := TStringlist.Create;
+ try
+ if fileExists(DePath+ZipName) then
+ DeleteFile(DePath+ZipName);
+ {if FileExists(SoPath+'ReSize.dat') then
+ DeleteFile(SoPath+'ReSize.dat');}
+ //Showmessage(SoPath+#13+ContextList.Text);
+ for n := 0 to ContextList.Count - 1 do
+ begin
+ {WriteResize(SoPath+ContextList.Strings[n],SoPath+'ReSize.dat');}
+ ZipFileList.Add(SoPath+ContextList.Strings[n]);
+ if FileExists(SoPath+'@'+ContextList.Strings[n]) then
+ ZipFileList.Add(SoPath+'@'+ContextList.Strings[n]);
+ end;
+ if FileExists(SoPath+'Context.dat') then
+ ZipFileList.Add(SoPath+'Context.dat');
+
+ AttContextList.Clear;
+ if FileExists(SoPath+'ATTContext.dat') then
+ AttContextList.LoadFromFile(SoPath+'ATTContext.dat');
+ for n := 0 to AttContextList.Count - 1 do
+ begin
+ ZipFileList.Add(SoPath+AttContextList.Strings[n]);
+ end;
+ if FileExists(SoPath+'ATTContext.dat') then
+ ZipFileList.Add(SoPath+'ATTContext.dat');
+
+
+ if FileExists(SoPath+'Context_DocNo.dat') then
+ ZipFileList.Add(SoPath+'Context_DocNo.dat');
+ if FileExists(SoPath+'scanlist.dat') then
+ ZipFileList.Add(SoPath+'scanlist.dat');
+ if FileExists(SoPath+'FormCode_Name.dat') then
+ ZipfileList.Add(SoPath+'FormCode_Name.dat');
+ if FileExists(SoPath+'DocNo_Name.dat') then
+ ZipfileList.Add(SoPath+'DocNo_Name.dat');
+ if FileExists(SoPath+'ReSize.dat') then
+ ZipfileList.Add(SoPath+'ReSize.dat');
+ if FileExists(SoPath+'FormIDReplace.dat') then
+ ZipfileList.Add(SoPath+'FormIDReplace.dat');
+ if FileExists(SoPath+'AnchorError.dat') then
+ ZipfileList.Add(SoPath+'AnchorError.dat');
+ if FileExists(SoPath+'CaseDocNo.dat') then
+ ZipfileList.Add(SoPath+'CaseDocNo.dat');
+ if FileExists(SoPath+'CaseDocNo_Copies.dat') then
+ ZipfileList.Add(SoPath+'CaseDocNo_Copies.dat');
+ if FileExists(SoPath+'CustomDocNo.ini') then
+ ZipfileList.Add(SoPath+'CustomDocNo.ini');
+ if FileExists(SoPath+'DocDir.dat') then
+ ZipfileList.Add(SoPath+'DocDir.dat');
+ if FileExists(SoPath+'In_Wh.dat') then
+ ZipfileList.Add(SoPath+'In_Wh.dat');
+ if FileExists(SoPath+'UseCase.ini') then
+ ZipfileList.Add(SoPath+'UseCase.ini');
+
+ if FileExists(SoPath+'FirstImg.zip') then//20170315 加的
+ begin
+ ZipfileList.Add(SoPath+'FirstImg.zip');
+ end;
+
+
+ ExeCuteZip(DePath+ZipName,SoPath,ZipFileList,False,False);
+ //Showmessage('111');
+ finally
+ ZipFileList.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.ZipMaskFile(SoPath,MarkPath,DePath,ZipName:String); //壓縮遮罩影像檔
+var
+ ZipFileList : TStringlist;
+ n : Integer;
+begin
+ ZipFileList := TStringlist.Create;
+ try
+ if fileExists(DePath+ZipName) then
+ DeleteFile(DePath+ZipName);
+
+ for n := 0 to ContextList.Count - 1 do
+ begin
+ ZipFileList.Add(MarkPath+ContextList.Strings[n]);
+ end;
+ if FileExists(SoPath+'Context.dat') then
+ ZipFileList.Add(SoPath+'Context.dat');
+ if FileExists(SoPath+'scanlist.dat') then
+ ZipFileList.Add(SoPath+'scanlist.dat');
+ if FileExists(SoPath+'FormCode_Name.dat') then
+ ZipfileList.Add(SoPath+'FormCode_Name.dat');
+ if FileExists(SoPath+'DocNo_Name.dat') then
+ ZipfileList.Add(SoPath+'DocNo_Name.dat');
+ if FileExists(SoPath+'ReSize.dat') then
+ ZipfileList.Add(SoPath+'ReSize.dat');
+ if FileExists(SoPath+'Err.jpg') then
+ ZipfileList.Add(SoPath+'Err.jpg');
+ if FileExists(SoPath+'auth.jpg') then
+ ZipfileList.Add(SoPath+'auth.jpg');
+ ExeCuteZip(DePath+ZipName,SoPath,ZipFileList,False,False);
+ finally
+ ZipFileList.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.ParserPoint(S:String); //解析十字點的字串
+var
+ PointList : TStringlist;
+ Rect : TRect;
+begin
+ PointList := TStringlist.Create;
+ try
+ PointList.Text := S;
+ IF PointList.Count <> 6 Then
+ begin
+ UpLPoint := Str2Point('0,0');
+ UpRPoint := Str2Point('0,0');
+ DownLPoint := Str2Point('0,0');
+ DownRPoint := Str2Point('0,0');
+ Point_Width := '0';
+ Point_Height := '0';
+ end
+ Else
+ begin
+ UpLPoint := Str2Point(PointList[0]);
+ DownLPoint := Str2Point(PointList[1]);
+ UpRPoint := Str2Point(PointList[2]);
+ DownRPoint := Str2Point(PointList[3]);
+ Point_Width := PointList[4];
+ Point_Height := PointList[5];
+ end;
+ finally
+ PointList.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.CheckScanDenialTime:Boolean;
+Var
+ NowTime : String;
+begin
+ NowTime := GetBalance2Time(Balance);
+ NowTime := Copy(NowTime,1,2)+':'+Copy(NowTime,3,2)+':'+Copy(NowTime,5,2);
+ Result := True;
+ if ScanDenialTime <> '' then
+ begin
+ if StrtoTime(NowTime) >= StrtoTime(ScanDenialTime) then
+ Result := False;
+ end;
+end;
+
+Function TCB_IMGPSScanX.FormID2Anchor(FormID:String):String; //用FormID取出十字模式
+var
+ Anchor : String;
+begin
+ Result := 'NONE';
+ IF FindSQLData(FORM_INF_List,'T1.ANCHOR','T1.FORM_ID',FormID,0,FindResult) then
+ begin
+ ANCHOR := UpperCase(GetFindResult('T1.ANCHOR'));
+ end;
+ Result := Index2Anchor(Anchor);
+end;
+
+Function TCB_IMGPSScanX.Index2Anchor(Anchor:String):String; //十字模式 0->NONE;1->ANCHOR;2->FRAME
+begin
+ if Anchor = '0' then
+ Result := 'NONE'
+ else if Anchor = '1' then
+ Result := 'ANCHOR'
+ else if Anchor = '2' then
+ Result := 'FRAME';
+end;
+
+procedure TCB_IMGPSScanX.ScanDuplexCBClick(Sender: TObject);
+begin
+ ScanDuplex := ScanDuplexCB.Checked;
+ //R_W_ScanIni('W'); //user要求改成預設後不能改
+end;
+
+procedure TCB_IMGPSScanX.ScanGrayCBClick(Sender: TObject);
+begin
+
+ if ScanGrayCB.Checked then
+ begin
+ ScanColor:=ifGray256;
+ end
+ else
+ begin
+ if FScanColor = 0 then
+ begin
+ ScanColor := ifBlackWhite;
+ end;
+
+ if FScanColor = 1 then
+ begin
+ //ScanColor := ifGray256 ;
+ ScanColor := ifBlackWhite; //
+ end;
+
+
+ if FScanColor = 2 then
+ begin
+ ScanColor := ifTrueColor ;
+ end;
+ end;
+
+end;
+
+Function TCB_IMGPSScanX.GetFormatID(CaseID: string):String;
+Var
+ S : TStringlist;
+ FormatID : String;
+begin
+ Result := '';
+ S := TStringlist.Create;
+ try
+ if FileExists(ImageSavePath+CaseID+'\CaseIndex.dat') then
+ begin
+ S.LoadFromFile(ImageSavePath+CaseID+'\CaseIndex.dat');
+ //Format_ID := S.Strings[5]; //主鍵值 (報價單號or續保單號or保單號碼or保險證號or原案件受編)
+ //Result := Format_ID;
+ //Handle_No := S.Strings[0]; //經辦代號
+ //Cen_Uid := S.Strings[1]; //被保人ID
+ //Cen_Cliname := S.Strings[2]; //被保人姓名
+ //Cen_Platno := S.Strings[3]; //車號
+ //Case_Priority := S.Strings[4];//案件等級
+ end;
+ finally
+ S.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.MemoInfoTransfer(Mode,Str:String;ID_S,Name_S:TStringlist):String; //註記代碼註記類別轉換 Mode 'ID':代碼轉名稱;'NAME':名稱轉代碼
+var
+ i : Integer;
+begin
+ if Mode = 'ID' then
+ begin
+ Result := '自行輸入';
+ for i := 0 to ID_S.Count - 1 do
+ begin
+ if Str = ID_S.Strings[i] then
+ begin
+ Result := Name_S.Strings[i];
+ Break;
+ end;
+ end;
+ end
+ else if Mode = 'NAME' then
+ begin
+ Result := '00';
+ for i := 0 to Name_S.Count - 1 do
+ begin
+ if Str = Name_S.Strings[i] then
+ begin
+ Result := ID_S.Strings[i];
+ Break;
+ end;
+ end;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.SetSQLData(ColumeStr:String;FromList,ToList:TStringlist); //把SQL值塞入
+var
+ i : Integer;
+begin
+ ToList.Clear;
+ ToList.Add(ColumeStr);
+ For i := 1 to FromList.Count -1 do
+ begin
+ ToList.Add(FromList.Strings[i]);
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetSQLData(TableList:TStringlist;Colname:String;colNo:Integer):String; //依欄位及索引取值
+var
+ i,col,v,v1 : Integer;
+ ColStr,DataStr: TStringList;
+ TmpStr : String;
+ P1,p2 : Integer;
+begin
+ Result := '';
+ ColStr := TStringList.Create;
+ DataStr := TSTringList.Create;
+ ColStr.CommaText := TableList.Strings[0];
+ TmpStr := TableList.Strings[ColNo];
+ //DataStr.Text:=StringReplace(TmpStr,'!@!',#13,[rfReplaceAll]);
+
+ While Length(Tmpstr) > 0 do
+ begin
+ v:= Pos('!@!',TmpStr);
+ v1 := Length(TmpStr);
+ If v > 0 Then
+ begin
+ DataStr.Add(Copy(TmpStr,1,v-1));
+ TmpStr := Copy(TmpStr,v+3,V1-(V-2));
+ end
+ Else
+ begin
+ DataStr.Add(TmpStr);
+ TmpStr := '';
+ end;
+ end;
+ For i := 0 to ColStr.Count-1 do
+ begin
+ IF ColStr.Strings[i] = ColName Then
+ begin
+ Result := '';
+ If (DataStr.Count > 0) and (i<=DataStr.Count-1) Then
+ Result := DataStr.Strings[i];
+ //If (DataStr.Count > 0) and (i<=DataStr.Count-1) Then
+ //begin
+ {if i = 0 then
+ begin
+ P1 := 1;
+ p2 := PosN('!@!',TmpStr,1)-1;
+ end
+ else
+ begin
+ P1 := PosN('!@!',TmpStr,i)+3;
+ p2 := PosN('!@!',TmpStr,i+1)-p1;
+ end;
+
+
+ Result :=Copy(tmpstr,p1,p2);}
+ //end;
+ //Result := DataStr.Strings[i];
+
+ Break;
+ end;
+ end;
+ ColStr.Free;
+ DataStr.Free;
+end;
+
+Function TCB_IMGPSScanX.FindSQLData(TableList:TStringlist;ColumeStr,KeyColumeStr,KeyStr:String;ColNo:Integer;Var ResultList:TStringlist):Boolean; //找指定的資料
+Var i,n,Findindex : Integer;
+ ColList,KeyColList,KeyList : TStringlist;
+ Cols,Keycols,keys :String;
+ Find:Boolean;
+begin
+ ResultList.Clear;
+ if (KeyStr = '') or (TableList.Count <= 1) then
+ begin
+ Result := False;
+ Exit;
+ end;
+
+ ColList := TStringlist.Create;
+ KeyColList := TStringlist.Create;
+ KeyList := TStringlist.Create;
+ try
+ ColList.CommaText := ColumeStr;
+ KeyColList.CommaText := KeyColumeStr;
+ KeyList.CommaText := KeyStr;
+ if ColNo = 0 then
+ begin
+ for i := 1 to TableList.Count -1 do //找key對不對
+ begin
+ Findindex := i;
+ for n := 0 to KeyColList.Count - 1 do
+ begin
+ Find := True;
+ Keycols := KeyColList.Strings[n];
+ keys := KeyList.Strings[n];
+ //Showmessage(keys);
+ //Showmessage(TableList.Strings[i]);
+ if GetSQLData(TableList,Keycols,i) = keys then //對.繼續
+ //if Pos('!@!'+keys+'!@!','!@!'+TableList.Strings[i]+'!@!') >0 then //在資料列前後加!@! 用pos的方式來改善速度 //20130521發現找資料會有問題
+ Continue
+ Else //不對.離開
+ begin
+ Find := False;
+ Break;
+ end;
+ end;
+ if Find then Break; // 找到了離開
+ end;
+ end
+ Else
+ begin
+ i := ColNo;
+ Findindex := i;
+ for n := 0 to KeyColList.Count - 1 do
+ begin
+ Find := True;
+ Keycols := KeyColList.Strings[n];
+ keys := KeyList.Strings[n];
+ //if GetSQLData(TableList,Keycols,i) = keys then //對.繼續
+ if Pos('!@!'+keys+'!@!','!@!'+TableList.Strings[i]+'!@!') >0 then //在資料列前後加!@! 用pos的方式來改善速度
+ Continue
+ Else //不對.離開
+ begin
+ Find := False;
+ Break;
+ end;
+ end;
+ end;
+ if Find then //有找到key
+ begin
+ for n := 0 to ColList.Count -1 do
+ begin
+ Cols := ColList.Strings[n];
+ ResultList.Add(Cols+','+GetSQLData(TableList,Cols,Findindex));
+ end;
+ end;
+ finally
+ Result := Find;
+ ColList.Free;
+ KeyColList.Free;
+ KeyList.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetFindResult(Col:String):String;
+var
+ i,v,v1 : Integer;
+ S,RCol,RValue : String;
+begin
+ Result := '';
+ for I := 0 to FindResult.Count - 1 do
+ begin
+ S := FindResult.Strings[i];
+ v := Pos(',',S);
+ v1 := length(S);
+ RCol := copy(S,1,v-1);
+ RValue := Copy(S,v+1,v1-v);
+ if Col =RCol then
+ Result := RValue;
+ end;
+
+end;
+
+Procedure TCB_IMGPSScanX.DataLoading(Loading:Boolean;UseTimer:Boolean); //資料載入中要停止點選的動作
+begin
+ If Loading Then
+ begin
+ Screen.Cursor := -11;
+ if UseTimer then
+ begin
+ Panel22.Caption := ShowText;
+ Panel22.Left := (Panel9.Width div 2) - (Panel22.Width div 2);
+ Panel22.Top := (Panel9.Height div 2) - (Panel22.Height div 2);
+ Panel22.Visible := True;
+ Timer2.Enabled := True;
+ end
+ Else
+ begin
+ Panel8.Left := (Panel9.Width div 2) - (Panel8.Width div 2);
+ Panel8.Top := (Panel9.Height div 2) - (Panel8.Height div 2);
+ Panel8.Visible := True;
+ end;
+ Application.ProcessMessages;
+ Panel1.Enabled := False;
+ Panel2.Enabled := False;
+ end
+ Else
+ begin
+ Panel22.Visible := False;
+ Panel8.Visible := False;
+ Timer2.Enabled := False;
+ Panel1.Enabled := True;
+ Panel2.Enabled := True;
+ Screen.Cursor := 0;
+ end;
+
+end;
+
+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;
+
+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;
+
+procedure TCB_IMGPSScanX.ClearView(stkv:Integer);
+var i:integer;
+ ISB : TImageScrollBox;
+ lb : TLabel;
+begin
+ For i:= stkv to 8 do
+ begin
+ ISB := TImageScrollBox(FindComponent('ISB'+intToStr(i)));
+ ISB.FileName := '';
+ Lb := TLabel(FindComponent('Lb'+intToStr(i)));
+ Lb.Caption := '';
+ end;
+ FreePreViewISB;
+ ISB1Click(ISB1);
+end;
+
+Function TCB_IMGPSScanX.DrawDocItem2(CaseNode : TTreenode;Caseno:String):Boolean; //畫出文件名稱的Tree
+Var
+ i,n,m : Integer;
+ DocNode,FormNode : TTreeNode;
+ DocNoPage,FormPage : Integer;
+ DocNoCopies : Integer;
+ DocNo,iDocNo : String;
+ DocVer : String;
+ FileList : TStringlist;
+ FormID,iFormID : String;
+ FormName : String;
+ CaseDocNoList,CaseDocNo_CopiesList,StrList : TStringlist;
+ iiDocNo,iiFormID,iiDocVer : String;
+ ST1:TStringList;
+begin
+ Result := False;
+ FileList := TStringlist.Create;
+ CaseDocNoList := TStringlist.Create;
+ CaseDocNo_CopiesList := TStringlist.Create;
+ StrList := TStringlist.Create;
+ ST1:=TStringList.Create;
+LogFile1.LogToFile(logTimeString+'產文件樹開始');
+ try
+ CaseNode.ImageIndex := 1;
+ CaseNode.SelectedIndex := 1;
+ While CaseNode.Count > 0 do //全刪
+ begin
+ CaseNode.Item[0].Delete;
+ end;
+ CaseDocNoList.Clear;
+ if FileExists(ImageSavePath+Caseno+'\CaseDocNo.dat') then
+ CaseDocNoList.LoadFromFile(ImageSavePath+Caseno+'\CaseDocNo.dat');
+ if FileExists(ImageSavePath+Caseno+'\CaseDocNo_Copies.dat') then
+ CaseDocNo_CopiesList.LoadFromFile(ImageSavePath+Caseno+'\CaseDocNo_Copies.dat');
+ for i := 0 to CaseDocNoList.Count - 1 do
+ begin
+ FileList.Clear;
+ //Showmessage(ImageSavePath+Caseno+'\'+CaseDocNoList.Strings[i]+'\Context.dat');
+ if FileExists(ImageSavePath+Caseno+'\'+CaseDocNoList.Strings[i]+'\Context.dat') then
+ FileList.LoadFromFile(ImageSavePath+Caseno+'\'+CaseDocNoList.Strings[i]+'\Context.dat');
+ iDocNo := DocNoDir2DocNo(CaseDocNoList.Strings[i]);
+ ST1.Clear;
+
+LogFile1.LogToFile(logTimeString+'FileList.Text='+FileList.CommaText);
+ if (FWH_category='N') and (FIs_In_Wh='Y') then
+ begin
+ for n := 0 to FileList.Count - 1 do
+ begin
+ if ISExistImg(ImageSavePath+Caseno+'\'+CaseDocNoList.Strings[i]+'\'+FileList.Strings[n]) then
+ begin
+ ST1.Add(FileList.Strings[n]);
+ end;
+ end;
+ for n := 0 to ST1.Count - 1 do
+ begin
+ if (FileList.IndexOf(ST1.Strings[n])<>-1) and (not DocNoIs_In_WH(iDocNo)) then
+ begin
+ FileList.Delete(FileList.IndexOf(ST1.Strings[n]));
+ end;
+ end;
+ end
+ Else
+ if not DocNoAppear(iDocNo) then Continue; //20180925 Hong覺得應該加這段
+
+
+
+LogFile1.LogToFile(logTimeString+'WH_category='+FWH_category+',Is_In_Wh='+FIs_In_Wh+',FileList.Text='+FileList.CommaText);
+ if FileList.Count=0 then Continue;
+
+ DocNoCopies := Strtoint(CaseDocNo_CopiesList.Strings[i]);
+ DocNoPage := FileList.Count;
+ iDocNo := DocNoDir2DocNo(CaseDocNoList.Strings[i]);
+//Showmessage(iDocNo);
+//Showmessage(DocNo2DocName(Caseno,iDocNo));
+//ShowMessage('FileList='+FileList.Text);
+ {if (((FIs_In_Wh = 'Y') and (not DocNoIs_In_WH(iDocNo))) or //入庫掃描不看非入庫文件
+ ((FIs_In_Wh = 'N') and (DocNoIs_In_WH(iDocNo)))) and
+ ((iDocNo <> 'Attach') and (Copy(iDocNo,1,5)<>'ZZZZZ')) then //非入庫掃描不看入庫文件
+ begin
+ Continue;
+ end;}
+
+ //if not DocNoAppear(iDocNo) then Continue;
+
+
+ //DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('頁'),[CaseDocNoList.Strings[i],DocNo2DocName(Caseno,iDocNo),DocNoPage]));
+ //DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[CaseDocNoList.Strings[i],DocNo2DocName(Caseno,iDocNo),DocNoCopies]));
+//ShowMessage('iDocNo='+iDocNo);
+ DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[DocNo2DocName(Caseno,iDocNo),CaseDocNoList.Strings[i],DocNoCopies]));
+
+ if GetUseCase('F',ImageSavePath+Caseno+'\',CaseDocNoList.Strings[i]) <> '' Then
+ begin
+ DocNode.ImageIndex := 8;
+ DocNode.SelectedIndex := 8;
+ end
+ Else if GetUseCase('T',ImageSavePath+Caseno+'\',CaseDocNoList.Strings[i]) <> '' Then
+ begin
+ DocNode.ImageIndex := 9;
+ DocNode.SelectedIndex := 9;
+ end
+ Else
+ begin
+ DocNode.ImageIndex := 2;
+ DocNode.SelectedIndex := 2;
+ end;
+ if ((Pos('ZZZZZ',DocNode.Text) = 0) and (Pos('YYYYY',DocNode.Text) = 0)) and (FileList.Count =0) then //制式文件
+ begin
+ for n := 1 to LASTEST_FORM_INF_List.Count - 1 do
+ begin
+ StrList := SplitString('!@!',LASTEST_FORM_INF_List.Strings[n]);
+ iiFormID := StrList.Strings[0];
+ iiDocNo := StrList.Strings[1];
+ if iiDocNo = iDocNo then
+ begin
+ FormID := iiFormID;
+ FormPage := GetFormIDPage(FileList,FormID);
+ FormName := FormCode2FormName(Caseno,FormID);
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode.ImageIndex := 4;
+ FormNode.SelectedIndex := 4;
+ DocNode.AlphaSort(True);
+ end;
+ end;
+ end
+ else if (Pos('ZZZZZ',DocNode.Text) > 0) or (Pos('YYYYY',DocNode.Text) > 0) then //自訂文件
+ begin
+ FormID := GetCustomFormID(ImageSavePath+Caseno+'\',CaseDocNoList.Strings[i]);
+ //showmessage(FileList.Text);
+ FormPage := GetFormIDPage(FileList,FormID);
+ FormName := FormCode2FormName(Caseno,FormID);
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode.ImageIndex := 4;
+ FormNode.SelectedIndex := 4;
+ DocNode.AlphaSort(True);
+ end;
+ SortDocDir_FormID(Caseno,CaseDocNoList.Strings[i]); //檔名依FormID排序
+
+ for n := 0 to FileList.Count - 1 do
+ begin
+ FormID := FileName2FormCode(FileList.Strings[n]);
+ DocVer := FormCode2Version(FormID);
+ DocNo := FormCode2DocNo(FormID);
+ if CheckFormIDExists(DocNode,FormID) then Continue;
+ //Showmessage(FormID+#13+DocNo+#13+DocVer);
+ for m := 0 to FormID_List.Count - 1 do
+ begin
+ iiFormID := FormID_List.Strings[m];
+ iiDocNo := DocNo_List.Strings[m];
+ iiDocVer := FormCode2Version(iiFormID);
+ if (iiDocNo = DocNo) and (iiDocVer = DocVer) then
+ begin
+ //Showmessage(iiFormID+#13+iiDocNo+#13+iiDocVer);
+ FormID := iiFormID;
+ FormPage := GetFormIDPage(FileList,FormID);
+ FormName := FormCode2FormName(Caseno,FormID);
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+
+ FormNode.ImageIndex := 4;
+ FormNode.SelectedIndex := 4;
+ DocNode.AlphaSort(True);
+ end;
+ end;
+
+
+ //if not CheckFormIDExists(DocNode,FormID) then
+ //begin
+ // Application.ProcessMessages;
+ // FormPage := GetFormIDPage(FileList,FormID);
+ /// FormName := FormCode2FormName(Caseno,FormID);
+ /// FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
+ // FormNode.ImageIndex := 4;
+ // FormNode.SelectedIndex := 4;
+ //end;
+ end;
+ end;
+
+ if DirectoryExists(ImageSavePath+Caseno+'\'+AttName) then
+ begin
+
+ FileList.Clear;
+ if FileExists(ImageSavePath+Caseno+'\'+AttName+'\Context.dat') then
+ FileList.LoadFromFile(ImageSavePath+Caseno+'\'+AttName+'\Context.dat')
+ Else
+ begin
+ Rmdir(ImageSavePath+Caseno+'\'+AttName);
+ Exit;
+ end;
+ DocNoPage := FileList.Count;
+ iDocNo := DocNoDir2DocNo(AttName);
+ //DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[AttName,DocNo2DocName(Caseno,iDocNo),1]));
+ DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[DocNo2DocName(Caseno,iDocNo),AttName,1]));
+ DocNode.ImageIndex := 2;
+ DocNode.SelectedIndex := 2;
+ for n := 0 to FileList.Count - 1 do
+ begin
+ FormID := FileName2FormCode(FileList.Strings[n]);
+ if not CheckFormIDExists(DocNode,FormID) then
+ begin
+ FormPage := GetFormIDPage(FileList,FormID);
+ FormName := FormCode2FormName(Caseno,FormID);
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+
+ FormNode.ImageIndex := 4;
+ FormNode.SelectedIndex := 4;
+ end;
+ end;
+ end;
+
+ if FModeName='件' then //20170904 先裝死 因為異動 同時存在兩種附件太難寫
+ begin
+ if DirectoryExists(ImageSavePath+Caseno+'\Attach') then
+ begin
+ FileList.Clear;
+ if FileExists(ImageSavePath+Caseno+'\Attach'+'\Context.dat') then
+ FileList.LoadFromFile(ImageSavePath+Caseno+'\Attach'+'\Context.dat')
+ Else
+ begin
+ Rmdir(ImageSavePath+Caseno+'\Attach');
+ Exit;
+ end;
+ DocNoPage := FileList.Count;
+ iDocNo := DocNoDir2DocNo(AttName);
+ //DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[AttName,DocNo2DocName(Caseno,iDocNo),1]));
+ DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[DocNo2DocName(Caseno,iDocNo),'Attach',1]));
+ DocNode.ImageIndex := 2;
+ DocNode.SelectedIndex := 2;
+ for n := 0 to FileList.Count - 1 do
+ begin
+ FormID := FileName2FormCode(FileList.Strings[n]);
+ if not CheckFormIDExists(DocNode,FormID) then
+ begin
+ FormPage := GetFormIDPage(FileList,FormID);
+ FormName := FormCode2FormName(Caseno,FormID);
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+
+ FormNode.ImageIndex := 4;
+ FormNode.SelectedIndex := 4;
+ end;
+ end;
+ end;
+ end;
+LogFile1.LogToFile(logTimeString+'產文件樹結束');
+ Finally
+ FileList.Free;
+ CaseDocNoList.Free;
+ CaseDocNo_CopiesList.Free;
+ StrList.Free;
+ ST1.Free;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.initkscan;
+begin
+ ScanDuplexCB.Enabled := False;
+ if Scanner.IsConfigured then
+ begin
+ try
+ Scanner.OpenSource;
+ IF Scanner.DuplexCap > 0 Then
+ begin
+ ScanDuplexCB.Enabled := True;
+ end;
+ {IF Scanner.FEEDERCAP Then
+ ScanFlatCB.Enabled := True; }
+ Except
+ DataLoading(False,True);
+ Exit;
+ end;
+ Scanner.CloseSource;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.initParameter;
+begin
+
+// if FCaseNoLength=0 then
+// begin
+//
+// end;
+
+ if FFileSizeLimit = 0 then
+ begin
+ FFileSizeLimit := 5*1024;
+ end;
+
+
+ if FImgDPI=0 then
+ begin
+ FImgDPI := 300;
+ ScanDpi := FImgDPI;
+ end
+ else
+ begin
+ //FImgDPI := StrToInt(Value);
+ ScanDpi := FImgDPI;
+ end;
+
+ if FScanColor = 0 then
+ begin
+ ScanColor := ifBlackWhite;
+ end;
+
+ if FScanColor = 1 then
+ begin
+ ScanColor := ifGray256 ;
+ ScanGrayCB.Checked:=True;
+ end;
+
+ if FScanColor = 2 then
+ begin
+ ScanColor := ifTrueColor ;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.PrtLbClick(Sender: TObject);
+var
+ Width : Double;
+ Height : Double;
+ i : Integer;
+ DocDirList,FileList :TStringlist;
+ iDocDir,iDocNo : String;
+ PrtDialog : TPrintDialog;
+ S : String;
+begin
+ ShowText := '列印中,請稍候';
+ DataLoading(True,True);
+ Case2upload(NowCaseNo); //產生原影像結構
+
+
+ //ontextList.LoadFromFile(ImageSavePath+NowCaseNo+'\Upload\Context.dat');
+
+ PrintForm := TPrintForm.create(Self);
+ DocDirList := TStringlist.Create;
+ FileList := TStringlist.Create;
+ try
+ FileList.LoadFromFile(ImageSavePath+NowCaseNo+'\Upload\Context.dat');
+ DocDirList.LoadFromFile(ImageSavePath+NowCaseNo+'\Upload\DocDir.dat');
+
+ InitialLanguage(PrintForm); //載入多國語言
+ PrintForm.CheckListBox1.Items.Clear;
+ For i := 0 to FileList.Count - 1 do
+ begin
+ iDocDir := DocDirList.Strings[i];
+ iDocno := DocNoDir2DocNo(iDocDir);
+
+ if not DocNoAppear(iDocNo) then Continue;
+
+ PrintForm.CheckListBox1.Items.Add(FileList.Strings[i]);
+ if CheckFormID_Prt(FileName2FormCode(FileList.Strings[i])) then
+ PrintForm.CheckListBox1.Checked[i] := True;
+ PrintForm.ListBox1.Items.Add(Add_Zoo(i+1,3))
+ end;
+ If (PrintForm.ShowModal = mrOK) then
+ begin
+ S := '';
+ for I := 0 to PrintForm.CheckListBox1.Count -1 do
+ begin
+ if PrintForm.CheckListBox1.Checked[i] then
+ begin
+ if S = '' then
+ S := S+PrintForm.CheckListBox1.Items[i]
+ Else
+ S := S+#13+PrintForm.CheckListBox1.Items[i];
+ end;
+ end;
+ if S = '' then
+ begin
+ Showmessage(_msg('尚未選擇欲列印文件'));
+ Exit;
+ end
+ Else
+ begin
+ PrintImg(S,FUserID,ServerDate,ImageSavePath+NowCaseNo+'\Upload\');
+ If not Writelog(NowCaseNo) then
+ begin
+ //Showmessage('false');
+ end;
+ end;
+ end;
+ finally
+ DataLoading(False,False);
+ PrintForm.Free;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.UseOldCaseLbClick(Sender: TObject);
+var
+ i,n : Integer;
+ CaseID,Year,BS_No,IS_Old : String;
+ OldCaseInfoForm : TOldCaseInfoForm;
+ OldCaseInfoList,Caseinfolist,FileList,DocNoList,iFileList,iDocNoList,iDocNo_CopiesList : TStringlist;
+ OldDocdir,OldDocNo,OldDocName,NewDocDir,FileName : String;
+ OldPath,NewPath,OldFile,NewFile:String;
+ Oldcopies:Integer;
+begin
+ OldCaseInfoForm := TOldCaseInfoForm.Create(Self);
+ OldCaseInfoList := TStringlist.Create;
+ Caseinfolist := TStringlist.Create;
+ FileList := TStringlist.Create;
+ DocNoList := TStringlist.Create;
+ iDocNo_CopiesList := TStringlist.Create;
+ iFileList := TStringlist.Create;
+ iDocNoList := TStringlist.Create;
+ OldCaseInfoForm.OldDocDirList := TStringlist.Create;
+ OldCaseInfoForm.OldDocNameList := TStringlist.Create;
+ OldCaseInfoForm.IN_WH_DocNoList := TStringlist.Create;
+ OldCaseInfoForm.OldCopiesList := TStringlist.Create;
+ try
+ OldCaseInfoForm.Notebook1.ActivePage := 'CaseInfo';
+ OldCaseInfoForm.ImageSavePath := ImageSavePath;
+ OldCaseInfoForm.CaseID := NowCaseNo;
+ OldCaseInfoForm.Furl := Furl;
+ OldCaseInfoForm.Fdata := FData;
+ OldCaseInfoForm.FVerify := FVerify;
+ OldCaseInfoForm.FReWrite := FReWrite;
+ OldCaseInfoForm.FOldCaseInfo := FOldCaseInfo;
+
+ //OldCaseInfoList 案件編號@#,年度@#,業務別@#,是否舊件@#,文件編號[份數]@#,文件編號[份數] tab 案件編號@#,年度@#,業務別@#,是否舊件@#,文件編號[份數]@#,文件編號[份數]
+ OldCaseInfoList.StrictDelimiter := true;
+ OldCaseInfoList.Delimiter := #9;
+ OldCaseInfoList.DelimitedText := FOldCaseInfo;
+ //Showmessage(FOldCaseInfo);
+ //Showmessage(OldCaseInfoList.Text);
+ OldCaseInfoForm.IN_WH_DocNoList.Assign(IN_WH_DocNoList);
+ OldCaseInfoForm.FIs_In_Wh := FIs_In_Wh;
+ for i := 0 to OldCaseInfoList.Count - 1 do
+ begin
+ Caseinfolist:=SplitString('@#,',OldCaseInfoList.Strings[i]);
+ //Caseinfolist.Delimiter := '_';
+ //Caseinfolist.DelimitedText := OldCaseInfoList.Strings[i];
+ CaseID := Caseinfolist.Strings[0];
+ Year := Caseinfolist.Strings[1];
+ BS_No := Caseinfolist.Strings[2];
+ IS_Old := Caseinfolist.Strings[3];
+ With OldCaseInfoForm.ListView1.Items.Add do
+ begin
+ Caption := CaseID;
+ SubItems.Add(Year);
+ SubItems.Add(BS_No);
+ SubItems.Add(IS_Old);
+ end;
+ end;
+
+ if OldCaseInfoForm.ShowModal = MrOk then
+ begin
+ OldPath := ImageSavePath+NowCaseNo+'\'+OldCaseInfoForm.UseCaseID+'\';
+ NewPath := ImageSavePath+NowCaseNo+'\';
+
+ iDocNoList.Clear;
+ if FileExists(NewPath+'CaseDocNo.dat') then
+ iDocNoList.LoadFromFile(NewPath+'CaseDocNo.dat');
+ if FileExists(NewPath+'CaseDocNo_Copies.dat') then
+ iDocNo_CopiesList.LoadFromFile(NewPath+'CaseDocNo_Copies.dat');
+
+ for i := 0 to OldCaseInfoForm.OldDocDirList.Count - 1 do
+ begin
+ FileList.LoadFromFile(OldPath+'Context.dat');
+ DocNoList.LoadFromFile(OldPath+'DocDir.dat');
+
+
+ OldDocName := OldCaseInfoForm.OldDocNameList.Strings[i];
+ OldDocDir := OldCaseInfoForm.OldDocDirList.Strings[i];
+ OldDocNo := DocNoDir2DocNo(OldDocDir);
+ if Copy(OldDocNo,1,5)<>'ZZZZZ' then
+ begin
+ if DocNoNeedDiv(OldDocNo) then
+ NewDocDir := DocNo2DocNoDir(NewPath,OldDocNo)
+ else
+ NewDocDir := OldDocNo;
+ end
+ Else
+ begin
+ NewDocDir := GetNewCustomDocNo(NewPath,OldDocName);
+ end;
+ SetRecordEditedDocDir('A',NowCaseNo,NewDocDir);
+ iFileList.Clear;
+ if FileExists(NewPath+NewDocDir+'\Context.dat') then
+ iFileList.LoadFromFile(NewPath+NewDocDir+'\Context.dat');
+
+ if Not DirectoryExists(NewPath+NewDocDir) then
+ begin
+
+
+ iDocNoList.Add(NewDocDir);
+ Oldcopies := GetDocDirCopies(NowCaseNo+'\'+OldCaseInfoForm.UseCaseID,OldDocDir); //舊案的CaseID 放在新案CaseID目錄裡
+ if FileExists(ImageSavePath+NowCaseNo+'\'+OldCaseInfoForm.UseCaseID+'\CaseDocNo_Copies.dat') then
+ iDocNo_CopiesList.Add(inttostr(Oldcopies))
+ else
+ begin
+ OldCopies := GetDocDircopies_Rec(OldPath,OldCaseInfoForm.UseCaseID,OldDocDir);
+ iDocNo_CopiesList.Add(inttostr(Oldcopies));
+ //iDocNo_CopiesList.Add('1');
+ end;
+ MkDir(NewPath+NewDocDir);
+ end;
+ SetUseCase('A',NewPath,NewDocDir,OldCaseInfoForm.UseCaseID,''); //NewDocDir 從哪來的
+ SetUseCase('A',OldPath,OldDocDir,'',NowCaseNo); //OldDocDir 去哪了
+ StringtoFile('Y',OldPath+'UseCase.dat'); //要上傳
+ for n := 0 to DocNoList.Count - 1 do
+ begin
+ if OldDocDir = DocNoList.Strings[n] then
+ begin
+ OldFile := FileList.Strings[n];
+ if Copy(NewDocDir,1,5)<>'ZZZZZ' then
+ NewFile := Add_Zoo(iFileList.Count+1,3)+FileName2NoQuene_Filename(OldFile)
+ Else
+ NewFile := Add_Zoo(iFileList.Count+1,3)+'_'+GetCustomFormID(NewPath,NewDocDir)+ExtractFileExt(OldFile);
+
+ iFileList.Add(NewFile);
+ CopyFile(PwideChar(OldPath+OldFile),Pwidechar(NewPath+NewDocDir+'\'+NewFile),False);
+ end;
+ end;
+ iFileList.SaveToFile(NewPath+NewDocDir+'\Context.dat');
+ end;
+
+ iDocNoList.SaveToFile(NewPath+'CaseDocNo.dat');
+ iDocNo_CopiesList.SaveToFile(NewPath+'CaseDocNo_Copies.dat');
+ DrawDocItem2(MyTreeNode1,NowCaseNo);
+ MyTreeNode1.Text := Format('%s-%d'+_Msg('頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
+ NewTreeNodeRefresh;
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+ end;
+ finally
+ OldCaseInfoForm.OldDocDirList.Free;
+ OldCaseInfoForm.OldDocNameList.Free;
+ OldCaseInfoForm.OldCopiesList.Free;
+ OldCaseInfoList.Free;
+ Caseinfolist.Free;
+ FileList.Free;
+ DocNoList.Free;
+ iDocNo_CopiesList.Free;
+ iFileList.Free;
+ iDocNoList.Free;
+ OldCaseInfoForm.Free;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.LastInitFormidListCreate(path: string);
+var
+ i:integer;
+ ST1:TStringList;
+ str1:string;
+begin
+//ShowMessage('path='+path);
+ ST1:=TStringList.Create;
+ ST1.LoadFromFile(path+'FormCode_Name.dat');
+ for I := 0 to ST1.Count - 1 do
+ begin
+ if (Pos('_',St1.Strings[i])<>1) and (Pos('_',St1.Strings[i])<>-1) then
+ begin
+ str1:=Copy(ST1.Strings[i],1,Pos('_',St1.Strings[i])-1);
+ LastInitFormidList.Add(str1);
+ end;
+ end;
+
+ ST1.Free;
+end;
+
+function TCB_IMGPSScanX.LoadFileGetMD5(const filename: string): string;
+var
+ Stream: TFileStream;
+ //Buffer: array[0..1023] of AnsiChar;
+ Buffer: array[0..1023] of AnsiChar;
+ TempStr: string;
+ i: Integer;
+ idmd5:TIdHashMessageDigest5; //import IdHashMessageDigest, idHash
+
+begin
+ idmd5 := TIdHashMessageDigest5.Create;
+
+ try
+ Stream := TFileStream.Create(filename, fmOpenRead);
+ Stream.Read(Buffer[0], SizeOf(Buffer));
+
+ result := idmd5.HashStreamAsHex(Stream) ;
+ finally
+ idmd5.Free;
+ Stream.Free;
+
+ end;
+end;
+
+procedure TCB_IMGPSScanX.LoadImgFile; //載入新件及替換件
+Var
+ i,v,v1,m : Integer;
+ CasePage : integer;
+ TempName : String;
+ BarName : String;
+ DocName : String;
+ //S : String;
+begin
+ ClearView(1);
+ PageLV.Clear;
+ AttListBox.Items.Clear;
+ AddAttFileLB.Enabled := False;
+ DelAttFileLB.Enabled := False;
+ DisplayPath := '';
+ ClearCaseIndex;
+ CaseHelpBtn.Visible := False;
+ //Del_Sub_NothingPath(ImageSavePath); //清掉案件目錄是空的
+ TreeView1.Items.Clear;
+ NewTreeNode := nil;
+ MyTreenode1 := nil;
+ MyTreenode2 := nil;
+ MyTreenode3 := nil;
+ NewTreeNode := TreeView1.Items.Add(nil,Format(_Msg('%s-共%d筆共%d頁'),[FModeName,0,0]));
+ NewTreenode.ImageIndex := 0;
+ NewTreenode.SelectedIndex := 0;
+ Del_Sub_NothingPath(ImageSavePath); //清掉案件目錄是空的
+ GetCase_PageCount(CaseCount,PageCount);
+ CaseList.Clear;
+ if FileExists(ImageSavePath + 'CaseList.dat') then
+ CaseList.LoadFromFile(ImageSavePath + 'CaseList.dat');
+ for i := 0 to CaseList.Count - 1 do
+ begin
+ CaseDocNoList.Clear;
+ if FileExists(ImageSavePath+CaseList.Strings[i]+'\CaseDocNo.dat') then
+ CaseDocNoList.LoadFromFile(ImageSavePath+CaseList.Strings[i]+'\CaseDocNo.dat');
+ if not FileExists(ImageSavePath+CaseList.Strings[i]+'\CaseDocNo_Copies.dat') then
+ begin
+ CaseDocNo_CopiesList.Clear;
+ for m := 0 to CaseDocNoList.Count - 1 do
+ begin
+ CaseDocNo_CopiesList.Add('1');
+ CaseDocNo_CopiesList.SaveToFile(ImageSavePath+CaseList.Strings[i]+'\CaseDocNo_Copies.dat');
+ end;
+ end;
+
+ CasePage := GetCasePage(ImageSavePath,CaseList.Strings[i]);
+//ShowMessage('CasePage='+IntToStr(CasePage));
+ MytreeNode1 := TreeView1.Items.AddChild(NewTreeNode,Format(_Msg('%s-%d頁'),[CaseList.Strings[i],CasePage]));
+ MytreeNode1.ImageIndex := 1;
+ MytreeNode1.SelectedIndex := 1;
+ DrawDocItem2(MytreeNode1,CaseList.Strings[i]); //長出文件名稱的樹並傳回是否有申請書的影像
+ if Pos(_Msg('未配號'),CaseList.Strings[i]) > 0 then
+ begin
+ MytreeNode1.ImageIndex := 5;
+ MytreeNode1.SelectedIndex := 5;
+ end;
+ If FileExists(ImageSavePath+CaseList.Strings[i]+'\OMRCheckOk.dat') Then
+ begin
+ MytreeNode1.ImageIndex := 7;
+ MytreeNode1.SelectedIndex := 7;
+ CaseHelpBtn.Visible := False;
+ end
+ Else IF FileExists(ImageSavePath+CaseList.Strings[i]+'\Checkerr.ini') Then
+ begin
+ MyTreenode1.ImageIndex := 5;
+ MyTreenode1.SelectedIndex := 5;
+
+ //AllEnforceLb.Visible := True; //全部強迫送件
+ end;
+ end;
+ MyTreenode1 := nil;
+ MyTreenode2 := nil;
+ If NewTreeNode <> nil Then
+ begin
+ TreeView1.Selected := NewTreeNode;
+ NewTreeNode.Expand(False);
+ end;
+ IF (NewTreeNode <> nil) and (NewTreeNode.Count > 0) Then
+ begin
+ GetCase_PageCount(CaseCount,PageCount);
+ v := Pos('-',NewTreeNode.Text);
+ NewTreeNode.Text := Format(_Msg('%s-共%d筆共%d頁'),[Copy(NewTreeNode.Text,1,v-1),CaseCount,PageCount]);
+ end;
+end;
+
+procedure TCB_IMGPSScanX.LoadImgFile1; //載入新件及替換件
+Var
+ i,n,v,v1,m : Integer;
+ p : integer;
+ iCaseNo,iDocNo : String;
+ TempName : String;
+ BarName : String;
+ DocName : String;
+ //S : String;
+begin
+ ClearView(1);
+ PageLV.Clear;
+ DisplayPath := '';
+ ClearCaseIndex;
+ CaseHelpBtn.Visible := False;
+ //Del_Sub_NothingPath(ImageSavePath); //清掉案件目錄是空的
+ TreeView1.Items.Clear;
+ NewTreeNode := nil;
+ MyTreenode1 := nil;
+ MyTreenode2 := nil;
+ MyTreenode3 := nil;
+ NewTreeNode := TreeView1.Items.Add(nil,Format(_Msg('%s-共%d筆共%d頁'),[FModeName,0,0]));
+ NewTreenode.ImageIndex := 0;
+ NewTreenode.SelectedIndex := 0;
+
+ Del_Sub_NothingPath(ImageSavePath); //清掉案件目錄是空的
+ GetCase_PageCount(CaseCount,PageCount);
+ CaseList.Clear;
+ if FileExists(ImageSavePath + 'CaseList.dat') then
+ CaseList.LoadFromFile(ImageSavePath + 'CaseList.dat');
+ for n := 0 to CaseList.Count - 1 do
+ begin
+ iCaseNo := CaseList.Strings[n];
+ CaseDocNoList.Clear;
+ if FileExists(ImageSavePath+CaseList.Strings[n]+'\DocNoList.dat') then
+ CaseDocNoList.LoadFromFile(ImageSavePath+CaseList.Strings[n]+'\DocNoList.dat');
+
+ for m := 0 to CaseDocNoList.Count - 1 do
+ begin
+ iDocNo := CaseDocNoList.Strings[i];
+ MytreeNode1 := TreeView1.Items.AddChild(NewTreeNode,Format(_Msg('%s-%d頁'),[CaseList.Strings[n],p]));
+ MytreeNode1.ImageIndex := 1;
+ MytreeNode1.SelectedIndex := 1;
+ end;
+
+
+ ContextList.Clear;
+ Context_DocnoList.Clear;
+ If FileExists(ImageSavePath+CaseList.Strings[n]+'\Context.dat') Then
+ begin
+ ContextList.LoadFromFile(ImageSavePath+CaseList.Strings[n]+'\Context.dat');
+ if FileExists(ImageSavePath+CaseList.Strings[n]+'\Context_DocNo.dat') then
+ Context_DocnoList.LoadFromFile(ImageSavePath+CaseList.Strings[n]+'\Context_DocNo.dat')
+ else
+ begin
+ for m := 0 to ContextList.Count - 1 do
+ begin
+ Context_DocnoList.Add(FormCode2DocNo(FileName2FormCode(ContextList.Strings[m])));
+ end;
+ Context_DocnoList.SaveToFile(ImageSavePath+CaseList.Strings[n]+'\Context_DocNo.dat');
+ end;
+ Cust_DocNoList.Clear;
+ if FileExists(ImageSavePath+CaseList.Strings[n]+'\CustomDocNo.dat') then
+ Cust_DocNoList.LoadFromFile(ImageSavePath+CaseList.Strings[n]+'\CustomDocNo.dat');
+
+ P := ContextList.Count;
+ MytreeNode1 := TreeView1.Items.AddChild(NewTreeNode,Format(_Msg('%s-%d頁'),[CaseList.Strings[n],p]));
+ MytreeNode1.ImageIndex := 1;
+ MytreeNode1.SelectedIndex := 1;
+ //DrawDocItem1(MytreeNode1,Doc_Inf_List,CaseList.Strings[n]); //長出文件名稱的樹並傳回是否有申請書的影像
+ DrawDocItem2(MytreeNode1,CaseList.Strings[n]); //長出文件名稱的樹並傳回是否有申請書的影像 20140820改
+
+ if Pos(_Msg('未配號'),CaseList.Strings[n]) > 0 then
+ begin
+ MytreeNode1.ImageIndex := 5;
+ MytreeNode1.SelectedIndex := 5;
+ end;
+ If FileExists(ImageSavePath+CaseList.Strings[n]+'\OMRCheckOk.dat') Then
+ begin
+ MytreeNode1.ImageIndex := 7;
+ MytreeNode1.SelectedIndex := 7;
+ CaseHelpBtn.Visible := False;
+ end
+ Else IF FileExists(ImageSavePath+CaseList.Strings[n]+'\Checkerr.ini') Then
+ begin
+ MyTreenode1.ImageIndex := 5;
+ MyTreenode1.SelectedIndex := 5;
+
+ //AllEnforceLb.Visible := True; //全部強迫送件
+ end;
+ end;
+ end;
+
+
+ MyTreenode1 := nil;
+ MyTreenode2 := nil;
+ If NewTreeNode <> nil Then
+ begin
+ TreeView1.Selected := NewTreeNode;
+ NewTreeNode.Expand(False);
+ end;
+ ContextList.Clear;
+ IF (NewTreeNode <> nil) and (NewTreeNode.Count > 0) Then
+ begin
+ GetCase_PageCount(CaseCount,PageCount);
+ v := Pos('-',NewTreeNode.Text);
+ NewTreeNode.Text := Format(_Msg('%s-共%d筆共%d頁'),[Copy(NewTreeNode.Text,1,v-1),CaseCount,PageCount]);
+ end;
+end;
+
+procedure TCB_IMGPSScanX.LoadAttFile(CaseID:String); //載入附加檔案
+var
+ AttContextList : TStringlist;
+ i : Integer;
+begin
+ AttListBox.Clear;
+ AttContextList := TStringlist.Create;
+ try
+ if FileExists(ImageSavePath+CaseID+'\AttContext.dat') then
+ begin
+ AttContextList.LoadFromFile(ImageSavePath+CaseID+'\AttContext.dat');
+ end;
+ for i := 0 to AttContextList.Count - 1 do
+ begin
+ AttListBox.Items.Add(UTF8Decode(HTTPDEcode(AttContextList.Strings[i])));
+ end;
+ finally
+ AttContextList.Free;
+ end;
+end;
+
+function TCB_IMGPSScanX.logTimeString: String;
+begin
+Result:=FormatDateTime('yyyymmdd hh:mm:ss',now) +' caseNo='+NowCaseno+' ';
+end;
+
+Function TCB_IMGPSScanX.FindDivFormCode(FormCode:String):Boolean; //找有沒有分案的條碼
+var
+ i : Integer;
+ DelBarCode : String;
+ S : TStringlist;
+ iMode : String;
+begin
+ Result := False;
+ iMode := FMode;
+ S := TStringlist.Create;
+ try
+ IF FindSQLData(FORM_INF_List,'T1.FORM_ID,T1.DIVISION','T1.FORM_ID',FormCode,0,FindResult) then
+ begin
+ S.CommaText := GetFindResult('T1.DIVISION');
+ for i := 0 to S.Count - 1 do //可能有多組
+ begin
+ if S.Strings[i] = iMode then
+ begin
+ Result := True;
+ Break;
+ end;
+ end;
+ end;
+ finally
+ S.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.CheckAvailable:Boolean; //檢查是否可使用元件
+var
+ SendData : String;
+ Msg:String;
+ Nowcount,Totalcount,Lic_Idx : Integer;
+ MacID,IPStr,LegalDate :String;
+begin
+ Result := False;
+ /////下載MPSLIC_SCAN.lic //////
+ SendData:='data='+HTTPEncode(UTF8Encode(FData))+'&verify='+FVerify+'&work_no=PLN&file=MPSLIC_SCAN.lic';
+ if not dnFile_Get(HTTPSClient,Furl,'service/imgpsc/IMGPSC04/sample',SendData,LngPath+'MPSLIC_SCAN.lic',FReWrite,Memo1,False,DownImgStatus) then
+ begin
+ Showmessage(_Msg('檢查註冊檔案時,網路發生錯誤!!')+_Msg('錯誤代碼:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
+ Exit;
+ end;
+ /////下載MPSLIC_SCAN.lic ///
+
+ if CheckLicensebyIP_new(LngPath+'MPSLIC_SCAN.lic',MacID,IPStr,LegalDate,Msg,Nowcount,Totalcount,Lic_Idx) then //檢查是否己註冊過
+ begin
+ if (LegalDate <> '') and (ServerDate>LegalDate) and (Lic_Idx>(Totalcount)) then
+ begin
+ Showmessage(_Msg('已經超過可使用期限及超出授權數請連絡廠商'));
+ Result := False;
+ //Exit;
+ end
+ else
+ Result := True;
+ end
+ Else
+ begin
+ if Msg <> '' then
+ begin
+ Showmessage(Format(_Msg('註冊檔有問題,請連絡廠商 錯誤原因:%s'),[Msg]));
+ Result := false;
+ Exit;
+ end
+ Else
+ begin
+ if (LegalDate <> '') and (ServerDate>LegalDate) and (NowCount =0 ) then
+ begin
+ Lic_Idx := 0;
+ Showmessage(_Msg('已經超過可使用期限請連絡廠商'));
+ Result := False;
+ //Exit;
+ end
+ //else if (LegalDate = '') and (Nowcount >= Totalcount+10) then //超過註冊數量
+ else if ((LegalDate = '') or ((LegalDate <> '') and (ServerDate>LegalDate)) ) and (Nowcount >= Totalcount) then //超過註冊數量 20150717 yuu說拿掉送的10個
+ begin
+ Lic_Idx := 0;
+ Showmessage(_Msg('已經超過授權數請連絡廠商'));
+ Result := False;
+ end
+ Else //未超過註冊數量要寫入註冊檔
+ begin
+ {if Messagedlg(_Msg('您尚未註冊授權是否要進行註冊??'),MtConfirmation,[mbyes,mbcancel],0) = mrcancel then
+ begin
+ Result := False;
+ Exit;
+ end;}
+ ShowText := _Msg('授權中,請稍候');
+ AddLicense(LngPath+'MPSLIC_SCAN.lic',MacID,IPStr,Msg);
+ Nowcount := Nowcount + 1;
+ DataLoading(True,True);
+
+ /////上傳MPSLICSCAN.lic ////
+ SendData:='data='+HTTPEncode(UTF8Encode(FData))+'@verify='+FVerify+'@work_no=PLN@file_name=MPSLIC_SCAN.lic';
+ if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/sample',SendData,'file',LngPath+'MPSLIC_SCAN.lic',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;
+ /////上傳MPSLICSCAN.lic /////
+ //Sleep(30000); //第一次註冊睡30秒 先不睡
+ Result := True;
+ end;
+ end;
+ end;
+ if FileExists(LngPath+'MPSLIC_SCAN.lic') then
+ DeleteFile(LngPath+'MPSLIC_SCAN.lic');
+ if LegalDate = '' then
+ StatusBar1.Panels[4].Text := '註冊號:'+MacID+' 剩餘註冊數:'+inttostr(Totalcount-Nowcount);
+ if LegalDate <> '' then
+ StatusBar1.Panels[4].Text := '*註冊號:'+MacID+'('+inttostr(Lic_Idx)+')'+' 剩餘註冊數:'+inttostr(Totalcount-Nowcount);
+end;
+
+procedure TCB_IMGPSScanX.SmoothCBClick(Sender: TObject);
+begin
+ if SmoothCB.Checked then
+ begin
+ Image_Smooth(ISB1.Graphic);
+ ISB1.Redraw(True);
+ end;
+end;
+
+Function TCB_IMGPSScanX.Case2Mask(SoPath,DePath:String):Boolean;//產生遮罩影像 20170639 發現沒用到
+var
+ XT : TXMLTool;
+ i : Integer;
+ S : TStringlist;
+ SiteList : TStringlist;
+ FormID : String;
+ ColEName : String;
+ FileName : String;
+ nodename : String;
+ Site : String;
+ Anchor : String;
+begin
+ Result := False;
+ if DirectoryExists(DePath) then
+ _DelTree(DePath);
+ Str2Dir(DePath);
+ DeleteFile(SoPath+'MaskImg.zip');
+ SiteList := TStringlist.Create;
+ S := TStringlist.Create;
+ XT := TXMLTool.Create;
+ try
+ S.LoadFromFile(SoPath+'Context.dat');
+ for I := 0 to S.Count - 1 do
+ begin
+ SiteList.Clear;
+ ImageScrollBox1.LoadFromFile(SoPath+S.Strings[i],1);
+
+ FormID := FileName2FormCode(S.Strings[i]);
+ Anchor := FormID2Anchor(FormID);
+ //ParserPoint(CropMpsV.FindPoint(Anchor));
+ FindPoint(ImageScrollBox1.Graphic,UpLPoint,UpRPoint,DownLPoint,Anchor);
+ if FileExists(CheckXmlPath+FWork_no+'\'+FormID+'.xml') then //沒有Xml就不用遮罩
+ begin
+ XT.LoadFromFile(CheckXmlPath+FWork_no+'\'+FormID+'.xml');
+ if XT.SubNodes['/form/settype10/'].First then
+ Repeat
+ ColEName := XT.SubNodes['/form/settype10/'].NodeName;
+ if XT.SubNodes['/form/settype10/'+ColEName+'/'].First then
+ Repeat
+ nodename := XT.SubNodes['/form/settype10/'+ColEName+'/'].NodeName;
+ If nodename <> '@coldesc' then
+ begin
+ Site := XT.Node['/form/settype10/'+ColEName+'/'+nodename+'/'].Attributes['colxy'];
+ SiteList.Add(Site);
+ Result := True; //有設定
+ end
+ Else
+ begin
+ //ColCName := XT['/form/settype1/'+ColEName+'/'+nodename+'/'];
+ end;
+ Until not XT.SubNodes['/form/settype10/'+ColEName+'/'].Next;
+ Until not XT.SubNodes['/form/settype10/'].Next ;
+ FieldMask(ImageScrollBox1,SiteList.Text,'Mask',UpLPoint);
+ end;
+ SaveAnnotation(ImageScrollBox1,DePath+S.Strings[i]);
+ end;
+ finally
+ SiteList.Free;
+ S.Free;
+ XT.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.CheckNeedCrop(Graphic:TDibGraphic):Boolean; //是否是A3要切影像
+Var
+ i,FormIDCount : Integer;
+begin
+ Result := False;
+ FormIDCount := 0;
+ if (Graphic.Width > (4 * Graphic.XDotsPerInch)) {or (Graphic.Height > (15 * Graphic.YDotsPerInch))} then
+ //if (Graphic.Width > (6 * Graphic.XDotsPerInch)) then
+ begin
+ for I := 1 to MpsBarcodeinf.Count do
+ begin
+ if (Length(MpsBarcodeinf.Text[i])=FormIDLength) and FormIDExists(MpsBarcodeinf.Text[i],False,0) then
+ begin
+ inc(FormIDCount);
+ end;
+ end;
+
+ end;
+
+//ShowMessage('FormIDCount='+IntToStr(FormIDCount)+#10#13+'MpsBarcodeinf.count='+IntToStr(MpsBarcodeinf.count));
+ if FormIDCount = 2 then
+ begin
+ Result := True;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetNewCustomDocNo(Path,DocName:String):String; //取出未使用的自訂文件代號
+var
+ ini : Tinifile;
+ Ct:Integer;
+ DocNo,FormID : String;
+
+ {i,n,v,ln : Integer;
+ C_No,C_Name : String;
+ CNo : Integer;
+ S : TStringlist;
+ NewDocNo : String;}
+begin
+ ini := Tinifile.Create(Path+'CustomDocNo.ini');
+ try
+ Ct := ini.ReadInteger('CustomCount','Count',0);
+ inc(Ct);
+ DocNo := 'ZZZZZ'+Add_Zoo(Ct,3);
+ if FIs_In_Wh <> 'Y' then //不是入庫文件
+ DocNo := 'YYYYY'+Add_Zoo(Ct,3);
+
+ if (FMode='ESCAN') and (FWH_category='N') then //20170914 補件下改成非入庫的自定文件
+ begin
+ DocNo := 'YYYYY'+Add_Zoo(Ct,3);
+ end;
+
+ FormID := DocNo+'010101A';
+ ini.WriteInteger('CustomCount','Count',Ct);
+ ini.WriteString(DocNo,'FormID',FormID);
+ ini.WriteString(DocNo,'Name',DocName);
+ Result := DocNo;
+ finally
+ ini.Free;
+ end;
+
+ {S := TStringlist.Create;
+ try
+ NewDocNo :='ZZZZZ001';
+ if FileExists(Path+'CustomDocNo.dat') then
+ begin
+ /// ZZZZZ001_自定文件名稱 001_自定文件名稱
+ S.LoadFromFile(Path+'CustomDocNo.dat');
+ for i := 0 to S.Count - 1 do
+ begin
+ v := Pos('_',S.Strings[i]);
+ ln := Length(S.Strings[i]);
+ C_No := Copy(S.Strings[i],1,v-1);
+ C_Name := Copy(S.Strings[i],v+1,ln-v);
+ if DocName = C_Name then
+ begin
+ Showmessage('文件名稱已存在');
+ Result := '';
+ Exit;
+ end;
+ end;
+ CNo := strtoint(Copy(C_No,6,3))+1;
+ NewDocNo := 'ZZZZZ'+Add_Zoo(CNo,3);
+ end;
+ S.Add(NewDocNo+'_'+DocName);
+ S.SaveToFile(Path+'CustomDocNo.dat');
+ Result := NewDocNo;
+ finally
+ S.Free;
+ end; }
+end;
+
+Function TCB_IMGPSScanX.GetCustomDocName(Path,DocNo:String):String; //取出自定文件名稱
+var
+ ini : Tinifile;
+begin
+ ini := Tinifile.Create(Path+'CustomDocNo.ini');
+ try
+ Result := ini.ReadString(DocNo,'Name','');
+ finally
+ ini.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetCustomFormID(Path,DocNo:String):String; //取出自定文件FormID
+var
+ ini : Tinifile;
+begin
+ ini := Tinifile.Create(Path+'CustomDocNo.ini');
+ try
+ Result := ini.ReadString(DocNo,'FormID','');
+ finally
+ ini.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetCustomDocDir(Path,DocName:String):String; //取出自定文件DocDir
+var
+ i,ct:integer;
+ ini : Tinifile;
+begin
+ Result := '';
+ ini := Tinifile.Create(Path+'CustomDocNo.ini');
+ try
+ ct := ini.ReadInteger('CustomCount','Count',0);
+ for i := 1 to ct do
+ begin
+ if ini.ReadString('ZZZZZ'+Add_Zoo(i,3),'Name','') = DocName then
+ begin
+ Result := 'ZZZZZ'+Add_Zoo(i,3);
+ Break;
+ end;
+ if ini.ReadString('YYYYY'+Add_Zoo(i,3),'Name','') = DocName then
+ begin
+ Result := 'YYYYY'+Add_Zoo(i,3);
+ Break;
+ end;
+ end;
+ finally
+ ini.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.FindCustomDocName(Path,DocName:String):Boolean; //尋找自定文件名稱是否存在
+var
+ ini : Tinifile;
+ Ct,i:Integer;
+ DocNo,FormID : String;
+begin
+ Result := False;
+ ini := Tinifile.Create(Path+'CustomDocNo.ini');
+ try
+ Ct := ini.ReadInteger('CustomCount','Count',0);
+ for I := 1 to Ct do
+ begin
+ DocNo := 'ZZZZZ'+Add_Zoo(i,3);
+ if DocName = ini.ReadString(DocNo,'Name','') then
+ begin
+ Result := True;
+ Break;
+ end;
+ end;
+ finally
+ ini.Free;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.DelAttFileLBClick(Sender: TObject);
+var
+ AttFile : String;
+ SelectCount : Integer;
+ i : Integer;
+begin
+ SelectCount := 0;
+ for i := 0 to AttListBox.Items.Count - 1 do
+ begin
+ if AttListBox.Selected[i] then
+ inc(SelectCount);
+ end;
+ if SelectCount = 0 then
+ begin
+ Showmessage(_Msg('請選擇要刪除的電子檔'));
+ Exit;
+ end;
+
+ if SelectCount > 0 then
+ begin
+ if Messagedlg(Format(_Msg('是否刪除這%d筆??'),[SelectCount]),MtConfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
+ for i := 0 to AttListBox.Items.Count - 1 do
+ begin
+ if AttListBox.Selected[i] then
+ begin
+ AttFile := HTTPEncode(UTF8Encode(AttListBox.Items.Strings[i]));
+ DeleteFile(ImageSavePath+NowCaseNo+'\'+AttFile);
+ SetAttContextList('D',-1,NowCaseno,AttFile);
+ end;
+ end;
+ end;
+ LoadAttFile(NowCaseNo);
+ Showmessage(_msg('刪除完成'));
+end;
+
+Procedure TCB_IMGPSScanX.DeleteCustomDocDir(Path,DocNo:String); //刪除自定文件DocNo
+var
+ ini : Tinifile;
+begin
+ ini := Tinifile.Create(Path+'CustomDocNo.ini');
+ try
+ ini.EraseSection(DocNo);
+ finally
+ ini.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.CheckFormID_Prt(FormID:String):Boolean; //傳入的FormID是否預設列印
+begin
+ Result := False;
+ If FindSQLData(FORM_INF_List,'T1.IS_PRINT','T1.FORM_ID',FormID,0,FindResult) Then
+ begin
+ if GetFindResult('T1.IS_PRINT') = 'Y' Then
+ Result := True;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.PrintImg(FileName, LoginID, Datetime,
+ Path: WideString);
+var
+ PrintMode : TEnvisionPrintMode;
+ GraphicPrinter : TDibGraphicPrinter;
+ PrtDialog : TPrintDialog;
+ S : TStringlist;
+ i,Pages,Page : Integer;
+ Prt_String : String;
+ Prt_H : Integer;
+ procedure PrintWithManualPrintJob(LoginID,DateTime:String;Pages,Page:Integer);
+ begin
+ If Page = 1 Then
+ begin
+ { if UsePrintJob is False, Printer.BeginDoc and Printer.EndDoc must be
+ called by the user. This allows printing multiple images in the
+ same job (or page). }
+ GraphicPrinter.UsePrintJob := False;
+
+ { if UsePrintJob is False, the print job name that appears in the
+ print manager must be specified in using the Title property of the
+ Printer object. Otherwise, if UsePrintJob is True, the Title
+ property of the TDibGraphicPrinter object is used to specify the
+ job name. }
+ Printer.Title := '影像列印';
+ end;
+
+ IF (Page mod 2) = 1 Then
+ Printer.BeginDoc
+ Else
+ Printer.NewPage;
+
+ ImageScrollBox1.DisplayedGraphic.Canvas.Font.Size := 24;
+
+ //ImageScrollBox1.DisplayedGraphic.Canvas.TextOut(20,20, _Msg('列印人員:')+LoginID+' '+_Msg('列印分行:')+FUserUnit+' '+_Msg('列印日期:')+DateTime);
+
+ GraphicPrinter.Print(ImageScrollBox1.DisplayedGraphic);
+
+
+ { this shows how to print text on a page.
+ Printer.Canvas.TextOut(10,10, 'Envision Image Library');
+ }
+ If ((Page mod 2) = 0) or (Page = pages) Then
+ Printer.EndDoc;
+ end;
+
+ procedure PrintWithAutoPrintJob;
+ begin
+ GraphicPrinter.UsePrintJob := True;
+ GraphicPrinter.Title := '影像列印';
+ GraphicPrinter.Print(ImageScrollBox1.Graphic);
+ end;
+
+begin
+ S := TStringlist.Create;
+ GraphicPrinter := TDibGraphicPrinter.Create;
+ PrtDialog := TPrintDialog.Create(self);
+ //PrtDialog.Copies:=99;
+ try
+ IF PrtDialog.Execute Then
+ begin
+ S.Text := FileName;
+ Pages := S.Count;
+
+ for i := 0 to S.Count -1 do
+ begin
+ ImageScrollBox1.LoadFromFile(Path+S.Strings[i],1);
+ watermark2(Image1.Picture.Bitmap,70,'',ImageScrollBox1.DisplayedGraphic);
+ PrintWithManualPrintJob(LoginID,DateTime,Pages,i+1);
+ end;
+ end;
+
+ Finally
+ PrtDialog.Free;
+ GraphicPrinter.Free;
+ S.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.FindLastestDocDir(CaseID,DocNo:String):String; //找出最新的DocDir
+var
+ i : Integer;
+ DocNoList,FileList : TStringlist;
+begin
+ Result := '';
+ DocNoList := TStringlist.Create;
+ FileList := TStringlist.Create;
+ try
+ if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then
+ DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+ for i := DocNoList.Count-1 downto 0 do
+ begin
+ if Copy(DocNoList.Strings[i],1,length(DocNo)) = DocNo then
+ begin
+ Result := DocNoList.Strings[i];
+ Break;
+ end;
+ end;
+ finally
+ DocNoList.Free;
+ FileList.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.FindLastestDocDirForPage(CaseID,DocNo,formid:String):String; //找出最新的DocDir 20180207 排除隱藏的資料夾
+var
+ i,j:integer;
+ DocNoList,FileList : TStringlist;
+ Imglist: TStringlist;
+ DirIsHide:Boolean;
+begin
+ Result := '';
+ DocNoList := TStringlist.Create;
+ FileList := TStringlist.Create;
+ imglist := TStringlist.Create;
+ try
+ if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then
+ DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+
+ for i := DocNoList.Count-1 downto 0 do
+ begin
+ if Copy(DocNoList.Strings[i],1,length(DocNo)) = DocNo then
+ begin
+//ShowMessage(ImageSavePath+CaseID+'\'+DocNoList.Strings[i]);
+ if not DocNoIsExistImg(ImageSavePath+CaseID+'\'+DocNoList.Strings[i]+'\') then
+ begin
+//ShowMessage('DDDDD');
+ Result := '';
+ Break;
+ end
+ else
+ begin
+ Result := DocNoList.Strings[i];
+ Break;
+ end;
+ end;
+ end;
+ finally
+ DocNoList.Free;
+ FileList.Free;
+ imglist.Free;
+ end;
+
+end;
+
+
+Procedure TCB_IMGPSScanX.Create_Cust_DocDir(CaseID:String); //產生外面傳入的文件代號及自定文件
+var
+ i,n : Integer;
+ C_DocNoList,C_DocNameList : TStringlist;
+ DocNo,DocName,DocDir : String;
+ DocNo_Ct,NowDocNo_Ct :integer;
+ DocName_Ct : Integer;
+ inx : Integer;
+begin
+ C_DocNoList := TStringlist.Create;
+ C_DocNameList := TStringlist.Create;
+ try
+
+ if FC_DocNoList <> '' then
+ begin
+ C_DocNoList.StrictDelimiter := True;
+ C_DocNoList.Delimiter := #9;
+ C_DocNoList.DelimitedText := FC_DocNoList;
+ //Showmessage(C_DocNoList.Text);
+ for i := 0 to C_DocNoList.Count - 1 do
+ begin
+ DocNo := C_DocNoList.Strings[i];
+ //舊件不長出錯誤的文件出來
+ if (FIs_OldCase = 'Y') and (FWork_no='HLN') and (DocNo = FormCode2DocNo('10000001011112A')) then
+ Continue;
+ NowDocNo_Ct := GetDocNoCount(CaseID,DocNo);
+ if DocNoNeedDiv(DocNo) then
+ begin
+ DocNo_Ct := 0;
+ for n := 0 to i do
+ begin
+ if C_DocNoList.Strings[n] = DocNo then
+ inc(DocNo_Ct);
+ end;
+ if DocNo_CT <= NowDocNo_Ct then
+ Continue;
+ if DirectoryExists(ImageSavePath+CaseID+'\'+DocNo+'('+inttostr(DocNo_Ct)+')') then //存在了
+ Continue;
+ if (DocNo_Ct = 1) and DirectoryExists(ImageSavePath+CaseID+'\'+DocNo) then //存在了 20140327加
+ Continue;
+ DocDir := DocNo2DocNoDir(ImageSavePath+CaseID+'\',DocNo)
+
+ end
+ else
+ begin
+ DocDir := DocNo;
+ end;
+ if not DirectoryExists(ImageSavePath+CaseID+'\'+DocDir) then
+ begin
+ MkDir(ImageSavePath+CaseID+'\'+DocDir);
+ SetDocNoList('A',-1,CaseID,DocDir,'1');
+ end;
+ if not DocNoNeedDiv(DocNo) then //不分份的秀數
+ SetDocDirCopies(CaseID,DocNo,GetCustomDocNoCount(DocNo));
+
+ end;
+ end;
+ if FC_DocNameList <> '' then
+ begin
+ C_DocNameList.StrictDelimiter := True;
+ C_DocNameList.Delimiter := #9;
+ C_DocNameList.DelimitedText := FC_DocNameList;
+ //Showmessage(C_DocNameList.Text);
+ for i := 0 to C_DocNameList.Count - 1 do
+ begin
+ DocName := C_DocNameList.Strings[i];
+ DocName_Ct := GetCustomNameCount(DocName);
+ if not FindCustomDocName(ImageSavePath+CaseID+'\',DocName) then
+ begin
+ DocDir := GetNewCustomDocNo(ImageSavePath+CaseID+'\',DocName);
+ if not DirectoryExists(ImageSavePath+CaseID+'\'+DocDir) then
+ begin
+ MkDir(ImageSavePath+CaseID+'\'+DocDir);
+ SetDocNoList('A',-1,CaseID,DocDir,inttostr(DocName_Ct));
+ end;
+ end
+ Else
+ begin
+ DocDir := GetCustomDocDir(ImageSavePath+CaseID+'\',DocName);
+ //inx := DocNoDir2Index(ImageSavePath+CaseID+'\',DocDir);
+ SetDocDirCopies(CaseID,DocDir,DocName_Ct);
+ end;
+ end;
+ end;
+
+ finally
+ C_DocNoList.Free;
+ C_DocNameList.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.OldCasetoNewCase(CaseID:String); //將舊案份數轉成新規則
+var
+ i,n : Integer;
+ C_DocNoList,C_DocNameList : TStringlist;
+ DocNoList,DocNo_CopiesList : TStringlist;
+ DocNo,DocName,DocDir : String;
+ DocNo_Ct :integer;
+begin
+ C_DocNoList := TStringlist.Create;
+ C_DocNameList := TStringlist.Create;
+ DocNoList := TStringlist.Create;
+ DocNo_CopiesList := TStringlist.Create;
+ try
+ DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+ for i := 0 to DocNoList.Count - 1 do
+ begin
+ DocNo_CopiesList.Add('0');
+ end;
+ //Showmessage(FC_DocNoList);
+ if FC_DocNoList <> '' then
+ begin
+ C_DocNoList.StrictDelimiter := True;
+ C_DocNoList.Delimiter := #9;
+ C_DocNoList.DelimitedText := FC_DocNoList;
+ //showmessage(C_DocNoList.Text+#13+#13+DocNoList.Text);
+ for i := 0 to DocNoList.Count - 1 do
+ begin
+ //DocNo := DocNoList.Strings[i];
+ DocNo := DocNoDir2DocNo(DocNoList.Strings[i]); //20140812 因轉舊案錯誤件會出現DocnoDir
+ DocNo_Ct := 0;
+ for n := 0 to C_DocNoList.Count - 1 do
+ begin
+ if DocNo = C_DocNoList.Strings[n] then
+ inc(DocNo_Ct);
+ end;
+ if DocNo_CT > 0 Then
+ DocNo_CopiesList.Strings[i] := inttostr(DocNo_CT);
+ end;
+ DocNo_CopiesList.SaveToFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat');
+ end;
+ if FC_DocNameList <> '' then
+ begin
+ C_DocNameList.StrictDelimiter := True;
+ C_DocNameList.Delimiter := #9;
+ C_DocNameList.DelimitedText := FC_DocNameList;
+ for i := 0 to DocNoList.Count - 1 do
+ begin
+ DocNo := DocNoList.Strings[i];
+ DocNo_Ct := 0;
+ for n := 0 to C_DocNameList.Count - 1 do
+ begin
+ if GetCustomDocName(ImageSavePath+CaseID+'\',DocNo) = C_DocNameList.Strings[n] then
+ inc(DocNo_Ct);
+ end;
+
+ if DocNo_CT > 0 Then
+ DocNo_CopiesList.Strings[i] :=inttostr(DocNo_CT);
+ end;
+ end;
+ DocNo_CopiesList.SaveToFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat');
+ finally
+ C_DocNoList.Free;
+ C_DocNameList.Free;
+ DocNoList.Free;
+ DocNo_CopiesList.Free;
+ end;
+
+end;
+
+Procedure TCB_IMGPSScanX.ErrFormtoCurrentForm(CaseID,EFormID,CFormID:String);//將舊案的錯誤FormID改正確的FormID
+var
+ DocNoList,FileList :TStringlist;
+ EDocNo,CDocNo,iDocNo,iFormID :String;
+ EDocDir,CDocDir:String;
+ OldFile,NewFile :String;
+ iPath,iiPath : String;
+ i,n : Integer;
+begin
+ EDocNo := FormCode2DocNo(EFormID);
+ CDocNo := FormCode2DocNo(CFormID);
+ DocNoList :=TStringlist.Create;
+ FileList := TStringlist.Create;
+ try
+ DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+ for i := 0 to DocNoList.Count - 1 do
+ begin
+ EDocDir := DocNoList.Strings[i];
+ iDocNo := DocNoDir2DocNo(DocNoList.Strings[i]);
+ iPath := ImageSavePath+CaseID+'\'+EDocDir+'\';
+ if FileExists(iPath+'Context.dat') then //20140909漏加這個判斷造成自訂文件但沒影像會出錯誤訊息
+ FileList.LoadFromFile(iPath+'Context.dat');
+ for n := 0 to FileList.Count - 1 do
+ begin
+ iFormID := FileName2FormCode(FileList.Strings[n]);
+ if iFormID = EFormID then
+ begin
+ OldFile := FileList.Strings[n];
+ NewFile := StringReplace(FileList.Strings[n],iFormID,CFormID,[rfReplaceAll]);
+ FileList.Strings[n] := NewFile;
+ RenameFile(iPath+OldFile,iPath+NewFile);
+ FileList.SaveToFile(iPath+'Context.dat');
+ end;
+ end;
+ if iDocNo = EDocNo then
+ begin
+ CDocDir := StringReplace(EDocDir,EDocNo,CDocNo,[rfReplaceAll]);
+ iiPath := ImageSavePath+CaseID+'\'+CDocDir+'\';
+ MoveFile(PWideChar(iPath),PWideChar(iiPath));
+ DocNoList.Strings[i] := StringReplace(DocNoList.Strings[i],iDocNo,CDocNo,[rfReplaceAll]);
+ DocNoList.SaveToFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+ //SetRecordEditedDocDir('A',CaseID,CDocNo); //20140918 yuu說改成不紀錄
+ end;
+ end;
+ finally
+ DocNoList.Free;
+ FileList.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.SetRecordEditedDocDir(Mode:Char;CaseID,DocDir:String); //記錄被異動的文件目錄 'A:加入D:刪掉'
+var
+ i : Integer;
+ Exists : Boolean;
+ EditedDocDirList : TStringlist;
+begin
+ EditedDocDirList := TStringlist.Create;
+ try
+ if FileExists(ImageSavePath+CaseID+'\EditedDocDir.dat') then
+ EditedDocDirList.LoadFromFile(ImageSavePath+CaseID+'\EditedDocDir.dat');
+ case Mode of
+ 'A':begin
+ Exists := False;
+ for i := 0 to EditedDocDirList.Count - 1 do
+ begin
+ if EditedDocDirList.Strings[i]=DocDir then
+ begin
+ Exists := True;
+ Break;
+ end;
+ end;
+ if not Exists then
+ begin
+ EditedDocDirList.Add(DocDir);
+ EditedDocDirList.SaveToFile(ImageSavePath+CaseID+'\EditedDocDir.dat');
+ end;
+ end;
+ 'D':begin
+ for i := 0 to EditedDocDirList.Count - 1 do
+ begin
+ if EditedDocDirList.Strings[i] = DocDir then
+ begin
+ EditedDocDirList.Delete(i);
+ if EditedDocDirList.Count > 0 then
+ EditedDocDirList.SaveToFile(ImageSavePath+CaseID+'\EditedDocDir.dat')
+ else
+ DeleteFile(ImageSavePath+CaseID+'\EditedDocDir.dat');
+ Break;
+ end;
+ end;
+ end;
+ end;
+
+ finally
+ EditedDocDirList.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetDocDir_Page(CaseID,DocDir:String):Integer;
+var
+ FileList : TStringlist;
+begin
+ Result := 0;
+ FileList := TStringlist.Create;
+ try
+ if FileExists(ImageSavePath+CaseID+'\'+DocDir+'\Context.dat') then
+ begin
+ FileList.LoadFromFile(ImageSavePath+CaseID+'\'+DocDir+'\Context.dat');
+ Result := FileList.Count;
+ end;
+ finally
+ FileList.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.Path2DocDir(Path,CaseID:String):String;
+var
+ i : Integer;
+ DocnoList : TStringlist;
+begin
+ Result := '';
+ DocNoList := TStringlist.Create;
+ try
+ if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then
+ DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+ if Path[length(Path)]<>'\' then
+ path := path+'\';
+ for i := 0 to DocNoList.Count - 1 do
+ begin
+ if (path=ImageSavePath+CaseID+'\'+DocNoList.Strings[i]+'\') then
+ begin
+ Result := DocNoList.Strings[i];
+ Break;
+ end;
+ end;
+ finally
+ DocNoList.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetDocNo_IS_WH(DocNo:String):Boolean; //DocNo是否為入庫文件
+var
+ i :Integer;
+begin
+ Result := False;
+ for i := 0 to IN_WH_DocNoList.Count - 1 do
+ begin
+ if DocNo = IN_WH_DocNoList.Strings[i] then
+ begin
+ Result := True;
+ Break;
+ end;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.SortDocDir_FormID(CaseID,DocDir:String); //將DocDir裡的文件編號排序
+var
+ i,n,v,ln : Integer;
+ Exists:Boolean;
+ FileList,SortFileList,FormIDList : TStringlist;
+ FormID,iFormID:String;
+ OldName,NewName : String;
+begin
+ FileList := TStringlist.Create;
+ SortFileList := TStringlist.Create;
+ FormIDList := TStringlist.Create;
+ try
+ if FileExists(ImageSavePath+CaseID+'\'+DocDir+'\Context.dat') then
+ begin
+ FileList.LoadFromFile(ImageSavePath+CaseID+'\'+DocDir+'\Context.dat');
+ ////取出FormID/////
+ for i := 0 to FileList.Count - 1 do
+ begin
+ FormID := FileName2FormCode(FileList.Strings[i]);
+ if (FormID = 'Attach') or (FormID = 'S_Attach') then Continue; //附件離開
+ Exists := False;
+ for n := 0 to FormIDList.Count - 1 do //查一下FORMID是否已經存在了
+ begin
+ if FormID = FormIDList.Strings[n] then
+ begin
+ Exists := True;
+ Break;
+ end;
+ end;
+ if not Exists then
+ FormIDList.Add(FormID);
+ end;
+ FormIDList.Sort;
+ //排序後產要更名的清單
+ for i := 0 to FormIDList.Count - 1 do
+ begin
+ iFormID := FormIDList.Strings[i];
+ for n := 0 to FileList.Count - 1 do
+ begin
+ if FileName2FormCode(FileList.Strings[n]) = iFormID then
+ begin
+ SortFileList.Add(FileList.Strings[n]+','+'@'+Add_Zoo(SortFileList.Count+1,3)+'_'+iFormID+ExtractFileExt(FileList.Strings[n]));
+ end;
+ end;
+ end;
+ FileList.Clear;
+ //更名成新順序的檔名
+ for i := 0 to SortFileList.Count - 1 do
+ begin
+ v := Pos(',',SortFileList.Strings[i]);
+ ln := Length(SortFileList.Strings[i]);
+ OldName := Copy(SortFileList.Strings[i],1,v-1);
+ NewName := Copy(SortFileList.Strings[i],v+1,ln-v);
+ RenameFile(ImageSavePath+CaseID+'\'+DocDir+'\'+OldName,ImageSavePath+CaseID+'\'+DocDir+'\'+NewName);
+ FileList.Add(NewName);
+ end;
+ //去掉@開頭
+ for i := 0 to FileList.Count - 1 do
+ begin
+ OldName := FileList.Strings[i];
+ NewName := StringReplace(OldName,'@','',[rfReplaceAll]);
+ ReNameFile(ImageSavePath+CaseID+'\'+DocDir+'\'+OldName,ImageSavePath+CaseID+'\'+DocDir+'\'+NewName);
+ FileList.Strings[i] := NewName;
+ end;
+ FileList.SaveToFile(ImageSavePath+CaseID+'\'+DocDir+'\Context.dat');
+ end;
+ finally
+ FileList.Free;
+ SortFileList.Free;
+ FormIDList.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.GotoAttach(OldLevel:Integer);
+var
+ i : Integer;
+begin
+ for i := 0 to MyTreeNode1.Count - 1 do
+ begin
+ if Pos('Attach',MyTreeNode1.Item[i].Text) > 0 then
+ begin
+ if OldLevel = 2 then
+ begin
+ TreeView1.Selected := MyTreeNode1.Item[i];
+ end
+ else if OldLevel = 3 then
+ begin
+ TreeView1.Selected := MyTreeNode1.Item[i].Item[0];
+ end;
+ Break;
+ end;
+ end;
+ //TreeView1click(nil);
+end;
+
+Function TCB_IMGPSScanX.DocNoIs_In_WH(DocNo:String):Boolean; //DocNo是否為入庫文件
+var
+ i : Integer;
+begin
+ Result := False;
+ if (Copy(DocNo,1,5)='ZZZZZ') then //20140728 yuu 說自訂文件也是入庫文件
+ begin
+ Result := True;
+ Exit;
+ end;
+ for i := 0 to IN_WH_DocNoList.Count -1 do
+ begin
+ if DocNo = IN_WH_DocNoList.Strings[i] then
+ begin
+ Result := True;
+ Break;
+ end;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.CreateCaseNeedData(Path:String);
+var
+ FileList,DocNoList,CaseDocNoList,CaseDocNo_CopiesList : TStringlist;
+ i,n : Integer;
+ Docno : String;
+ Exists : Boolean;
+begin
+ FileList := TStringlist.Create;
+ DocNoList := TStringlist.Create;
+ CaseDocNoList := TStringlist.Create;
+ CaseDocNo_CopiesList := TStringlist.Create;
+ try
+ if FileExists(Path+'Context.dat') then
+ begin
+ FileList.LoadFromFile(Path+'Context.dat');
+ for i := 0 to FileList.Count - 1 do
+ begin
+ Docno := FormCode2DocNo(FileName2FormCode(FileList.Strings[i]));
+//ShowMessage('Docno='+Docno);
+ DocNoList.Add(DocNo);
+ Exists := False;
+ for n := 0 to CaseDocNoList.Count - 1 do
+ begin
+ if Docno = CaseDocNoList.Strings[n] then
+ Exists := True;
+ end;
+ if not Exists then
+ begin
+ CaseDocNoList.Add(DocNo);
+ CaseDocNo_CopiesList.Add('1');
+ end;
+ end;
+//ShowMessage('CreateCaseNeedData DocNoList='+DocNoList.Text);
+ DocNoList.SaveToFile(Path+'DocDir.dat');
+ CaseDocNoList.SaveToFile(Path+'CaseDocNo.dat');
+ CaseDocNo_CopiesList.SaveToFile(Path+'CaseDocNo_Copies.dat')
+ end;
+
+ finally
+ FileList.Free;
+ DocNoList.Free;
+ CaseDocNoList.Free;
+ CaseDocNo_CopiesList.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.SetDocDirtoSelected(CaseNode:TTreeNode;DocDir:String);
+var
+ i : Integer;
+begin
+ for i := 0 to CaseNode.Count - 1 do
+ begin
+ if Pos(DocDir+'{',CaseNode.Item[i].Text) > 0 then
+ begin
+ TreeView1.Selected := CaseNode.Item[i];
+ end;
+ end;
+end;
+
+Function TCB_IMGPSScanX.CheckSelectImg_UseCase(Path,CaseID:String):Boolean; //檢查選擇的影像是否有包含被引用的影像
+var
+ i : Integer;
+ iISBName : String;
+ iISB : TImageScrollBox;
+ ImgPath,DocDir : String;
+begin
+ Result := False;
+ for i := 0 to ComponentCount -1 do
+ begin
+ if (Components[i] is TShape) and (copy(Components[i].Name,1,2)='SP') then
+ begin
+ //Showmessage(Components[i].Name);
+ iISBName := ShapeName2PreViewISBName(TShape(Components[i]));
+ iISB := TImageScrollBox(FindComponent(iISBName));
+ ImgPath := ExtractFilePath(iISB.FileName);
+ DocDir := Path2DocDir(ImgPath,CaseID);
+ if GetUseCase('T',Path,DocDir) <> '' then
+ Result := True;
+ end;
+ end;
+end;
+
+Function TCB_IMGPSScanX.TransOldCaseFile(Path:String):Boolean;
+var
+ i : Integer;
+ OldCaseID,Year,Data,Verify:String;
+ SendData : String;
+ OldCaseInfoList,Caseinfolist : TStringlist;
+ OldCasePath : String;
+begin
+ Result := True;
+ OldCaseInfoList := TStringlist.Create;
+ Caseinfolist := TStringlist.Create;
+ try
+ OldCaseInfoList.StrictDelimiter := True;
+ OldCaseInfoList.Delimiter := #9;
+ OldCaseInfoList.DelimitedText := FOldCaseInfo;
+ for i := 0 to OldCaseInfoList.Count - 1 do
+ begin
+ Caseinfolist := SplitString('@#,',OldCaseInfoList.Strings[i]);
+ //Caseinfolist.Delimiter := '_';
+ //Caseinfolist.DelimitedText := OldCaseInfoList.Strings[i];
+ OldCaseID := Caseinfolist.Strings[0];
+ Year := Caseinfolist.Strings[1];
+ Data := Caseinfolist.Strings[4];
+ Verify := Caseinfolist.Strings[5];
+ OldCasePath := Path+OldCaseID+'\';
+ if FileExists(OldCasePath+'UseCase.dat') and FileExists(OldCasePath+'UseCase.ini') then
+ begin
+ //////壓檔/////
+ //ZipMainFile(Path,Path,'Img.zip');
+
+ ////上傳/////
+ SendData:='data='+HTTPEncode(UTF8Encode(Data))+'&verify='+Verify+'&other_case_no='+OldCaseID;
+ //Showmessage(FUrl+'service/slic/SLIC02/useOther?'+senddata);
+ if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/useOther',SendData,'file',OldCasePath+'UseCase.ini',FReWrite,Memo1,False) then
+ begin
+ Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'+_Msg('錯誤代碼:')),[OldCaseID])+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
+ Result := False;
+ Exit;
+ end;
+ if memo1.Lines.Strings[0] = '1' then
+ begin
+ Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!')+_Msg('錯誤原因:'),[OldCaseID])+memo1.Lines.Strings[1]);
+ Result := False;
+ Exit;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!')+_Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入'),[OldCaseID]));
+ Result := False;
+ Exit;
+ end;
+ end;
+
+ ////上傳////
+ end;
+ finally
+ OldCaseInfoList.Free;
+ Caseinfolist.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.Writelog(CaseID : String):Boolean;
+var
+ SendData : String;
+begin
+ Result := True;
+ SendData:='data='+HTTPEncode(UTF8Encode(FData))+'&verify='+FVerify+'&case_no='+CaseID;
+ If not ProcessServlet(HTTPSClient,FURL+'service/imgpsc/IMGPSC06/printlog',SendData,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ IF memo1.Lines.Strings[0] = '1' Then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+ Result := False;
+ Exit;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+ Result := False;
+ Exit;
+ end;
+end;
+
+Function TCB_IMGPSScanX.FormIDAppear(FormID:String):Boolean; //FormID是否可出現
+var
+ iDocNo : String;
+begin
+ Result := True;
+ iDocNo := FormCode2DocNo(FormID);
+ if (((FIs_In_Wh = 'Y') and (not DocNoIs_In_WH(iDocNo))) or //入庫掃描不看非入庫文件
+ ((FIs_In_Wh = 'N') and (DocNoIs_In_WH(iDocNo)))) and //非入庫掃描不看入庫文件
+ ((iDocNo <> 'Attach') and (iDocNo <> 'S_Attach') and (Copy(iDocNo,1,5)<>'ZZZZZ')) then
+ Result := False;
+
+ if (FIs_In_Wh='Y') and (FWH_category='Y') then //20170816 新加
+ begin
+ if (((FIs_In_Wh = 'Y') and (not DocNoIs_In_WH(iDocNo))) or //入庫掃描不看非入庫文件
+ ((FIs_In_Wh = 'N') and (DocNoIs_In_WH(iDocNo)))) and //非入庫掃描不看入庫文件
+ ((iDocNo <> 'Attach') and (iDocNo <> 'S_Attach') and (Copy(iDocNo,1,5)<>'ZZZZZ')) then
+ Result := False;
+ end;
+
+ if (FIs_In_Wh='Y') and (FWH_category='N') then //20170816 新加
+ begin
+ Result:=True;
+ end;
+
+end;
+
+Function TCB_IMGPSScanX.DocNoAppear(DocNo:String):Boolean; //DocNo是否可出現
+begin
+ Result := True;
+
+ {if (((FIs_In_Wh = 'Y') and (not DocNoIs_In_WH(DocNo)) or (DocNo ='S_Attach')) or //入庫掃描不看非入庫文件
+ ((FIs_In_Wh = 'N') and (DocNoIs_In_WH(DocNo)) or (DocNo ='Attach') )) {and //非入庫掃描不看入庫文件
+ (Copy(DocNo,1,5)<>'ZZZZZ')} {then
+ {Result := False;}
+ //20181031 應該要換成下面的判斷比較對,FIs_In_Wh傳空的話才會出全部
+ if (((FIs_In_Wh = 'Y') and ((not DocNoIs_In_WH(DocNo)) or (DocNo ='S_Attach'))) or //入庫掃描不看非入庫文件
+ ((FIs_In_Wh = 'N') and ((DocNoIs_In_WH(DocNo)) or (DocNo ='Attach') ))) {and //非入庫掃描不看入庫文件
+ (Copy(DocNo,1,5)<>'ZZZZZ')} then
+ Result := False;
+
+
+end;
+
+Function TCB_IMGPSScanX.GetDocNoCount(CaseID,DocNo:String):Integer; //取DocNo數量
+var
+ i : Integer;
+ Doc_Ct:Integer;
+ iDocNo : String;
+ DocNoList,DocNo_CopiesList : TStringlist;
+begin
+ DocNoList := TStringlist.Create;
+ DocNo_CopiesList := TStringlist.Create;
+ try
+ if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then
+ begin
+ DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+ DocNo_CopiesList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat');
+ end;
+ Doc_Ct := 0;
+ for i := 0 to DocNoList.Count - 1 do
+ begin
+ iDocNo := DocNoDir2DocNo(DocNoList.Strings[i]);
+ if iDocNo = DocNo then
+ Doc_Ct := Doc_Ct + strtoint(DocNo_CopiesList.Strings[i]);
+ end;
+ Result := Doc_Ct;
+ // Showmessage(DocNo+#13+inttostr(Doc_Ct));
+ finally
+ DocNoList.Free;
+ DocNo_CopiesList.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetDocDirCopies(CaseID,DocDir:String):Integer; //取DocDir數量
+var
+ i : Integer;
+ DocNoList,DocNo_CopiesList : TStringlist;
+begin
+ Result := 1; //預設回傳1 //20140521 由0改成1
+ DocNoList := TStringlist.Create;
+ DocNo_CopiesList := TStringlist.Create;
+ try
+ if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then
+ DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+
+ if FileExists(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat') then
+ begin
+ DocNo_CopiesList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat');
+ for i := 0 to DocNoList.Count - 1 do
+ begin
+ if (DocDir = DocNoList.Strings[i]) and (i <= DocNo_CopiesList.Count-1) then
+ begin
+ Result := strtoint(DocNo_CopiesList.Strings[i]);
+ Break;
+ end;
+ end;
+ end;
+ finally
+ DocNoList.Free;
+ DocNo_CopiesList.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.SetDocDirCopies(CaseID,DocDir:String;NewCopies:Integer); //修改DocDir份數
+var
+ i : Integer;
+ DocNoList,DocNo_CopiesList : TStringlist;
+begin
+ DocNoList := TStringlist.Create;
+ DocNo_CopiesList := TStringlist.Create;
+ try
+ if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then
+ begin
+ DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+ DocNo_CopiesList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat');
+ end;
+ for i := 0 to DocNoList.Count - 1 do
+ begin
+ if DocDir = DocNoList.Strings[i] then
+ begin
+ DocNo_CopiesList.Strings[i] := inttostr(NewCopies);
+ DocNo_CopiesList.SaveToFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat');
+ Break;
+ end;
+ end;
+ finally
+ DocNoList.Free;
+ DocNo_CopiesList.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetDocDirCopies_Rec(Path,CaseID,DocDir:String):Integer; //取記錄裡的DocDir份數
+var
+ i,n,v,v1 : Integer;
+ OldCaseInfoList,Caseinfolist : TStringlist;
+ iCaseID,Year,iBS_No,iIS_Old,iDocNo,iCopies:String;
+begin
+ Result := 1;
+ OldCaseInfoList := TStringlist.Create;
+ Caseinfolist := TStringlist.Create;
+ try
+ //OldCaseInfoList 案件編號@#,年度@#,業務別@#,是否舊件@#,Data@#,Verify@#,文件編號[份數]@#,文件編號[份數] tab 案件編號@#,年度@#,業務別@#,是否舊件@#,Data@#,Verify@#,文件編號[份數]@#,文件編號[份數]
+ OldCaseInfoList.StrictDelimiter := true;
+ OldCaseInfoList.Delimiter := #9;
+ OldCaseInfoList.DelimitedText := FOldCaseInfo;
+
+ for i := 0 to OldCaseInfoList.Count - 1 do
+ begin
+ Caseinfolist:=SplitString('@#,',OldCaseInfoList.Strings[i]);
+ //Caseinfolist.Delimiter := '_';
+ //Caseinfolist.DelimitedText := OldCaseInfoList.Strings[i];
+ iCaseID := Caseinfolist.Strings[0];
+ Year := Caseinfolist.Strings[1];
+ iBS_No := Caseinfolist.Strings[2];
+ iIS_Old := Caseinfolist.Strings[3];
+ if CaseID = iCaseID then
+ begin
+ for n := 6 to Caseinfolist.Count - 1 do
+ begin
+ v := Pos('[',Caseinfolist.Strings[n]);
+ v1 := Pos(']',Caseinfolist.Strings[n]);
+ iDocNo := Copy(Caseinfolist.Strings[n],1,v-1);
+ iCopies := Copy(Caseinfolist.Strings[n],v+1,v1-v-1);
+ if Copy(DocDir,1,5) = 'ZZZZZ' then
+ begin
+ if iDocNo = GetCustomDocName(Path,DocDir) then
+ Result := strtoint(iCopies);
+ end
+ else
+ begin
+ if iDocNo = DocNoDir2DocNo(DocDir) then
+ Result := strtoint(iCopies);
+ end;
+ end;
+
+ end;
+ end;
+ finally
+ OldCaseInfoList.Free;
+ Caseinfolist.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetCustomNameCount(CustomName:String):Integer; //取外傳的名稱數量
+var
+ i,ct : Integer;
+ C_DocNameList : TStringlist;
+begin
+ C_DocNameList := TStringlist.Create;
+ try
+ C_DocNameList.StrictDelimiter := True;
+ C_DocNameList.Delimiter := #9;
+ C_DocNameList.DelimitedText := FC_DocNameList;
+ ct := 0;
+ for i := 0 to C_DocNameList.Count - 1 do
+ begin
+ if C_DocNameList.Strings[i] = CustomName then
+ begin
+ inc(ct);
+ end;
+ end;
+ Result := ct;
+ finally
+ C_DocNameList.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetCustomDocNoCount(Docno:String):Integer; //取外傳的DocNo數量
+var
+ i,ct : Integer;
+ C_DocNoList : TStringlist;
+begin
+ C_DocNoList := TStringlist.Create;
+ try
+ C_DocNoList.StrictDelimiter := True;
+ C_DocNoList.Delimiter := #9;
+ C_DocNoList.DelimitedText := FC_DocNoList;
+ ct := 0;
+ for i := 0 to C_DocNoList.Count - 1 do
+ begin
+ if C_DocNoList.Strings[i] = Docno then
+ begin
+ inc(ct);
+ end;
+ end;
+ Result := ct;
+ finally
+ C_DocNoList.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.ISGuideFormID(FormID:String):Boolean;
+var
+ i : Integer;
+begin
+ Result := False;
+ for i := 0 to GuideFormIDList.Count - 1 do
+ begin
+ if FormID = GuideFormIDList.Strings[i] then
+ begin
+ Result := True;
+ Break;
+ end;
+ end;
+end;
+
+Function TCB_IMGPSScanX.ISDivPageFormID(FormID:String):Boolean;
+var
+ i : Integer;
+begin
+ Result := False;
+
+ for i := 0 to DivPageFormIDList.Count - 1 do
+ begin
+ if FormID = DivPageFormIDList.Strings[i] then
+ begin
+ Result := True;
+ Break;
+ end;
+ end;
+end;
+
+function TCB_IMGPSScanX.ISExistImg(const filename: string): boolean;
+begin
+ if ExistImgList.IndexOf(LoadFileGetMD5(filename))<>-1 then
+ begin
+ Result:=True;
+ end
+ else
+ begin
+ Result:=False;
+ end;
+end;
+
+Function TCB_IMGPSScanX.CaseDelete_Enable(CaseID:String):Boolean; //案件可否被刪除
+var
+ i : Integer;
+ CaseDocNoList : TStringlist;
+begin
+ Result := True;
+ CaseDocNoList := TStringlist.Create;
+ try
+ if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then
+ CaseDocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+ for i := 0 to CaseDocNoList.Count - 1 do
+ begin
+ if GetUseCase('T',DisplayPath,CaseDocNoList.Strings[i]) <> '' then //有被引用走的
+ Result := False;
+ end;
+
+ finally
+ CaseDocNoList.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.MoveImage(Path:String;mp:Integer); //移動頁數
+var
+ i,n,inx:Integer;
+ FList,D_Flist:TStringlist;
+begin
+ FList := TStringlist.Create;
+ D_Flist := TStringlist.Create;
+ try
+ FList.LoadFromFile(Path+'Context.dat');
+ //Showmessage(Path);
+ //Showmessage(Flist.Text);
+ for i := 0 to FList.Count - 1 do
+ begin
+ Renamefile(Path+Flist.Strings[i],path+'@'+Flist.Strings[i]);
+ Flist.Strings[i]:= '@'+Flist.Strings[i];
+ end;
+
+ for i := 0 to ComponentCount -1 do
+ begin
+ if (Components[i] is TShape) and (copy(Components[i].Name,1,2)='SP') then
+ begin
+ inx := strtoint(Copy(TShape(Components[i]).Name,3,length(TShape(Components[i]).Name)-2));
+ D_Flist.Add(Flist.Strings[inx-1]);
+ //Renamefile(Path+Flist.Strings[inx-1],path+'@'+Flist.Strings[inx-1]);
+ end;
+ end;
+ //Showmessage('aa');
+ for i := 0 to D_Flist.Count -1 do
+ begin
+ for n := 0 to FList.Count - 1 do
+ begin
+ //if Flist.Strings[n]=StringReplace(D_Flist.Strings[i],'@','',[rfReplaceAll]) then
+ if Flist.Strings[n]=D_Flist.Strings[i] then
+ begin
+ Flist.Delete(n);
+ Break;
+ end;
+ end;
+ end;
+ //Showmessage('bb');
+ for i := 0 to D_Flist.Count - 1 do
+ begin
+ Flist.Insert(mp-1+i,D_Flist.Strings[i]);
+ end;
+
+ Flist.SaveToFile(Path+'Context.dat');
+ //Showmessage(Flist.Text);
+ //Showmessage('CC');
+ ReSortFileName(Path);
+ TreeView1click(self);
+
+
+ finally
+ FList.Free;
+ D_Flist.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.MoveImage_Drag(Path:String;fp,tp:Integer); //拖拉移動頁數
+var
+ i,n,inx:Integer;
+ FList,D_Flist:TStringlist;
+begin
+ FList := TStringlist.Create;
+ D_Flist := TStringlist.Create;
+ try
+ FList.LoadFromFile(Path+'Context.dat');
+ for i := 0 to FList.Count - 1 do
+ begin
+ Renamefile(Path+Flist.Strings[i],path+'@'+Flist.Strings[i]);
+ Flist.Strings[i]:= '@'+Flist.Strings[i];
+ end;
+
+ D_Flist.Add(Flist.Strings[fp-1]);
+
+ {for i := 0 to ComponentCount -1 do
+ begin
+ if (Components[i] is TShape) and (copy(Components[i].Name,1,2)='SP') then
+ begin
+ inx := strtoint(Copy(TShape(Components[i]).Name,3,length(TShape(Components[i]).Name)-2));
+ D_Flist.Add(Flist.Strings[inx-1]);
+ //Renamefile(Path+Flist.Strings[inx-1],path+'@'+Flist.Strings[inx-1]);
+ end;
+ end;}
+ //Showmessage('aa');
+ for i := 0 to D_Flist.Count -1 do
+ begin
+ for n := 0 to FList.Count - 1 do
+ begin
+ //if Flist.Strings[n]=StringReplace(D_Flist.Strings[i],'@','',[rfReplaceAll]) then
+ if Flist.Strings[n]=D_Flist.Strings[i] then
+ begin
+ Flist.Delete(n);
+ Break;
+ end;
+ end;
+ end;
+ //Showmessage('bb');
+ for i := 0 to D_Flist.Count - 1 do
+ begin
+ Flist.Insert(tp-1+i,D_Flist.Strings[i]);
+ end;
+
+ Flist.SaveToFile(Path+'Context.dat');
+ //Showmessage(Flist.Text);
+ //Showmessage('CC');
+ ReSortFileName(Path);
+ TreeView1click(self);
+
+
+ finally
+ FList.Free;
+ D_Flist.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.SetUseCase(Mode:Char;Path,DocDir,FormCaseID,ToCaseID:String); //記錄引用其他案件 A:加入 D:刪掉
+var
+ ini : Tinifile;
+begin
+ ini := Tinifile.Create(Path+'UseCase.ini');
+ try
+ case Mode of
+ 'A':begin
+ ini.WriteString(DocDir,'FROM_CASEID',FormCaseID);
+ ini.WriteString(DocDir,'TO_CASEID',ToCaseID);
+ end;
+ 'D':begin
+ ini.EraseSection(DocDir);
+ end;
+ end;
+
+ finally
+ ini.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetUseCase(Mode:Char;Path,DocDir:String):String; //F:取被引用 To:引用
+var
+ ini : Tinifile;
+begin
+ ini := Tinifile.Create(Path+'UseCase.ini');
+ try
+ case Mode of
+ 'F':begin
+ Result := ini.ReadString(DocDir,'FROM_CASEID','');
+ end;
+ 'T':begin
+ Result := ini.ReadString(DocDir,'TO_CASEID','');
+ end;
+ end;
+ finally
+ ini.Free;
+ end;
+
+end;
+
+Procedure TCB_IMGPSScanX.Case2upload(CaseID:String);
+var
+ i,n:Integer;
+ OldPath,NewPath,DocDir : String;
+ OldFile,NewFile,AttFile : String;
+ DocNoList,FileList:TStringlist;
+ iFileList,iFile_DocNoList :TStringlist;
+ iDocDirList : TStringlist;
+ iAttFileList : TStringlist;
+begin
+ DocNoList := TStringlist.Create;
+ FileList := TStringlist.Create;
+ iFileList := TStringlist.Create;
+ iFile_DocNoList := TStringlist.Create;
+ iDocDirList := TStringlist.Create;
+ iAttFileList := TStringlist.Create;
+ try
+ OldPath := ImageSavePath+CaseID+'\';
+ NewPath := ImageSavePath+CaseID+'\Upload\';
+ if DirectoryExists(NewPath) then
+ _DelTree(NewPath);
+ str2dir(NewPath);
+ CopyFile(PWideChar(OldPath+'CaseDocNo.dat'),PWideChar(NewPath+'CaseDocNo.dat'),False);
+ CopyFile(PWideChar(OldPath+'CaseDocNo_Copies.dat'),PWideChar(NewPath+'CaseDocNo_Copies.dat'),False);
+ CopyFile(PWideChar(OldPath+'CustomDocNo.ini'),PWideChar(NewPath+'CustomDocNo.ini'),False);
+ CopyFile(PWideChar(OldPath+'CaseIndex.dat'),PWideChar(NewPath+'CaseIndex.dat'),False);
+ CopyFile(PWideChar(OldPath+'In_Wh.dat'),PWideChar(NewPath+'In_Wh.dat'),False);
+ CopyFile(PWideChar(OldPath+'UseCase.ini'),PWideChar(NewPath+'UseCase.ini'),False);
+
+ if FileExists(OldPath+'CaseDocNo.dat') then
+ begin
+ DocNoList.LoadFromFile(OldPath+'CaseDocNo.dat');
+ end
+ else
+ begin
+ DocNoList.SaveToFile(OldPath+'CaseDocNo.dat');
+ CopyFile(PWideChar(OldPath+'CaseDocNo.dat'),PWideChar(NewPath+'CaseDocNo.dat'),False);
+ end;
+
+ for i := 0 to DocNoList.Count-1 do
+ begin
+ DocDir := DocNoList.Strings[i];
+ OldPath := ImageSavePath+CaseID+'\'+ DocDir+'\';
+
+ FileList.Clear;
+ if FileExists(OldPath+'Context.dat') then
+ begin
+ FileList.LoadFromFile(OldPath+'Context.dat');
+ for n := 0 to FileList.Count - 1 do
+ begin
+ OldFile := FileList.Strings[n];
+ NewFile := Add_Zoo(iFileList.Count+1,3)+FileName2NoQuene_Filename(OldFile);
+ CopyFile(PWideChar(OldPath+OldFile),PWideChar(NewPath+NewFile),False);
+ iFileList.Add(NewFile);
+ iFile_DocNoList.Add(DocNoDir2DocNo(DocDir));
+ iDocDirList.Add(DocDir);
+ end;
+ end;
+ end;
+ if DirectoryExists(ImageSavePath+CaseID+'\Attach') then
+ begin
+ DocDir := 'Attach';
+ OldPath := ImageSavePath+CaseID+'\'+ DocDir+'\';
+
+ FileList.Clear;
+ if FileExists(OldPath+'Context.dat') then
+ begin
+ FileList.LoadFromFile(OldPath+'Context.dat');
+ for n := 0 to FileList.Count - 1 do
+ begin
+ OldFile := FileList.Strings[n];
+ NewFile := Add_Zoo(iFileList.Count+1,3)+FileName2NoQuene_Filename(OldFile);
+ CopyFile(PWideChar(OldPath+OldFile),PWideChar(NewPath+NewFile),False);
+ iFileList.Add(NewFile);
+ iFile_DocNoList.Add(DocNoDir2DocNo(DocDir));
+ iDocDirList.Add(DocDir);
+ end;
+ end;
+ end;
+
+ if DirectoryExists(ImageSavePath+CaseID+'\S_Attach') then
+ begin
+ DocDir := 'S_Attach';
+ OldPath := ImageSavePath+CaseID+'\'+ DocDir+'\';
+
+ FileList.Clear;
+ if FileExists(OldPath+'Context.dat') then
+ begin
+ FileList.LoadFromFile(OldPath+'Context.dat');
+ for n := 0 to FileList.Count - 1 do
+ begin
+ OldFile := FileList.Strings[n];
+ NewFile := Add_Zoo(iFileList.Count+1,3)+FileName2NoQuene_Filename(OldFile);
+ CopyFile(PWideChar(OldPath+OldFile),PWideChar(NewPath+NewFile),False);
+ iFileList.Add(NewFile);
+ iFile_DocNoList.Add(DocNoDir2DocNo(DocDir));
+ iDocDirList.Add(DocDir);
+ end;
+ end;
+ end;
+ OldPath := ImageSavePath+CaseID+'\';
+ if FileExists(OldPath+'AttContext.dat') then
+ begin
+ iAttFileList.LoadFromFile(OldPath+'AttContext.dat');
+ for n := 0 to iAttFileList.Count - 1 do
+ begin
+ AttFile := iAttFileList.Strings[n];
+ CopyFile(PWideChar(OldPath+AttFile),PWideChar(NewPath+AttFile),False);
+ end;
+ iAttFileList.SaveToFile(NewPath+'AttContext.dat');
+ end;
+
+
+ iFileList.SaveToFile(NewPath+'Context.dat');
+ iFile_DocNoList.SaveToFile(NewPath+'Context_DocNo.dat');
+ iDocDirList.SaveToFile(NewPath+'DocDir.dat');
+
+ finally
+ iFileList.Free;
+ iAttFileList.Free;
+ iFile_DocNoList.Free;
+ DocNoList.Free;
+ FileList.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.Download2Case(SoDir,DeDir:String);
+var
+ i,n : Integer;
+ DocDir:String;
+ OldFile,NewFile,AttFile:String;
+ DocNoList,FileList : TStringlist;
+ iFileList,iFile_DocDirList :TStringlist;
+ iAttFileList :TStringlist;
+ AA,AA2,AA3,AA4:Boolean;
+begin
+
+ if (not FileExists(SoDir+'CaseDocNo.dat')) or (not FileExists(SoDir+'DocDir.dat')) then //截畫面會沒這些檔
+ begin
+//ShowMessage('產生必要的文字檔');
+ CreateCaseNeedData(SoDir); //產生必要的文字檔
+ end;
+
+ AA:=CopyFile(PWideChar(SoDir+'CaseDocNo.dat'),PWideChar(DeDir+'CaseDocNo.dat'),False);
+ AA2:=CopyFile(PWideChar(SoDir+'CaseDocNo_Copies.dat'),PWideChar(DeDir+'CaseDocNo_Copies.dat'),False);
+ AA3:=CopyFile(PWideChar(SoDir+'CustomDocNo.ini'),PWideChar(DeDir+'CustomDocNo.ini'),False);
+ AA4:=CopyFile(PWideChar(SoDir+'UseCase.ini'),PWideChar(DeDir+'UseCase.ini'),False);
+//ShowMessage(BoolToStr(AA)+#10#13+BoolToStr(AA2)+#10#13+BoolToStr(AA3)+#10#13+BoolToStr(AA4));
+ if FileExists(SoDir+'DocDir.dat') then //20170222 新加
+ begin
+ CopyFile(PWideChar(SoDir+'DocDir.dat'),PWideChar(DeDir+'DocDir.dat'),False);
+ end;
+
+
+ DocNoList := TStringlist.Create;
+ FileList := TStringlist.Create;
+ iFileList := TStringlist.Create;
+ iFile_DocDirList := TStringlist.Create;
+ iAttFileList := TStringlist.Create;
+ try
+ //if Not FileExists(SoDir+'Context.dat') then Exit;
+ //iFileList.LoadFromFile(SoDir+'Context.dat');
+ //if iFileList.Count = 0 then Exit;
+ if FileExists(SoDir+'Context.dat') then
+ iFileList.LoadFromFile(SoDir+'Context.dat');
+ if FileExists(SoDir+'DocDir.dat') then
+ iFile_DocDirList.LoadFromFile(SoDir+'DocDir.dat');
+ if iFileList.Count <> iFile_DocDirList.Count then
+ begin
+ for i := 0 to iFileList.Count - 1 do
+ begin
+ if i > iFile_DocDirList.Count -1 then
+ begin
+ iFile_DocDirList.Add(FormCode2DocNo(FileName2FormCode(iFileList.Strings[i])));
+ end;
+ end;
+ end;
+ if FileExists(SoDir+'CaseDocNo.dat') then
+ DocNoList.LoadFromFile(SoDir+'CaseDocNo.dat');
+ if FileExists(DeDir+'CaseDocNo_Copies.dat') then
+ CaseDocNo_CopiesList.LoadFromFile(DeDir+'CaseDocNo_Copies.dat');
+ {for i := 0 to DocNoList.Count - 1 do
+ begin
+ DocDir := DocNoList.Strings[i];
+ MkDir(DeDir+DocDir);
+ end;}
+//ShowMessage('DocNoList='+DocNoList.Text);
+
+ for i := DocNoList.Count - 1 downto 0 do
+ begin
+ DocDir := DocNoList.Strings[i];
+ if not DirectoryExists(DeDir+DocDir) then
+ begin
+ MkDir(DeDir+DocDir);
+ if not FileExists(DeDir+DocDir+'\Context.dat') then
+ StringtoFile('',DeDir+DocDir+'\Context.dat');
+ end
+ else
+ begin
+//ShowMessage('GGG');
+ DocNoList.Delete(i);
+ DocNoList.SaveToFile(DeDir+'CaseDocNo.dat');
+ if i <= CaseDocNo_CopiesList.Count-1 then
+ begin
+//ShowMessage('KKKK');
+ CaseDocNo_CopiesList.Delete(i);
+ CaseDocNo_CopiesList.SaveToFile(DeDir+'CaseDocNo_Copies.dat');
+ end;
+ end;
+ end;
+ //20170221 先註解起來 因為他在補充掃瞄時好像會有顯示的問題
+
+ for i := 0 to iFileList.Count - 1 do
+ begin
+ OldFile := iFileList.Strings[i];
+ DocDir := iFile_DocDirList.Strings[i];
+ if (DocDir = 'Attach') or (DocDir = 'S_Attach') then
+ begin
+ if not DirectoryExists(DeDir+DocDir) then
+ MkDir(DeDir+DocDir);
+ end;
+
+ FileList.Clear;
+ if FileExists(DeDir+DocDir+'\Context.dat') then
+ begin
+ FileList.LoadFromFile(DeDir+DocDir+'\Context.dat');
+ end;
+ NewFile := Add_Zoo(FileList.Count+1,3)+FileName2NoQuene_Filename(OldFile);
+ CopyFile(PWideChar(SoDir+OldFile),PWideChar(DeDir+DocDir+'\'+NewFile),False);
+ FileList.Add(NewFile);
+ FileList.SaveToFile(DeDir+DocDir+'\Context.dat');
+ end;
+
+ for i := DocNoList.Count -1 downto 0 do
+ begin
+ if (DocNoList.Strings[i] = 'Attach') or (DocNoList.Strings[i] = 'S_Attach') then
+ begin
+ DocNoList.Delete(i);
+ DocNoList.SaveToFile(DeDir+'CaseDocNo.dat');
+ end;
+ end;
+
+ {if (DocNoList.Count > 0) and ((DocNoList.Strings[DocNoList.Count-1] = 'Attach') or (DocNoList.Strings[DocNoList.Count-1] = 'S_Attach')) then
+ begin
+ DocNoList.Delete(DocNoList.Count-1);
+ DocNoList.SaveToFile(DeDir+'CaseDocNo.dat');
+ end; }
+ CaseDocNo_CopiesList.Clear;
+
+ if FileExists(DeDir+'CaseDocNo_Copies.dat') then
+ CaseDocNo_CopiesList.LoadFromFile(DeDir+'CaseDocNo_Copies.dat');
+ if DocNoList.Count > CaseDocNo_CopiesList.Count then
+ begin
+ for i := 0 to DocNoList.Count - 1 do
+ begin
+ if i > CaseDocNo_CopiesList.Count-1 then
+ begin
+ CaseDocNo_CopiesList.Add('1');
+ //CaseDocNo_CopiesList.SaveToFile(DeDir+'CaseDocNo_Copies.dat');
+ end;
+ end;
+ end;
+ CaseDocNo_CopiesList.SaveToFile(DeDir+'CaseDocNo_Copies.dat');
+ {if (not FileExists(DeDir+'CaseDocNo_Copies.dat') then
+ begin
+ CaseDocNo_CopiesList.Free;
+ for i := 0 to DocNoList.Count - 1 do
+ begin
+ CaseDocNo_CopiesList.Add('1');
+ CaseDocNo_CopiesList.SaveToFile(DeDir+'CaseDocNo_Copies.dat');
+ end;
+ end;}
+ if FileExists(SoDir+'AttContext.dat') then
+ begin
+ iAttFileList.LoadFromFile(SoDir+'AttContext.dat');
+ for i := 0 to iAttFileList.Count - 1 do
+ begin
+ AttFile := iAttFileList.Strings[i];
+ CopyFile(PWideChar(SoDir+AttFile),PWideChar(DeDir+AttFile),False);
+ end;
+ iAttFileList.SaveToFile(DeDir+'AttContext.dat');
+ end;
+
+
+ if FMode='ESCAN' then
+ begin
+ InitExistImgList(DeDir);
+ end;
+
+
+ finally
+ iFileList.Free;
+ FileList.Free;
+ DocNoList.Free;
+ iFile_DocDirList.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.FormCode2FormName(CaseID,FormCode:String):String; //用FormCode轉成文件名稱
+var
+ i,v,ln : Integer;
+ DelBarCode : String;
+ CusDocNo,CusDocName : String;
+begin
+ Result := '';
+ if (FormCode = '') or (FormCode = 'Attach') or (FormCode = 'S_Attach') then
+ Result := _Msg('未歸類')
+ //showmessage('a');
+ //stringtofile(FORM_INF_List.Text,'D:\121.txt');
+ Else If FindSQLData(FORM_INF_List,'T1.FORM_ID,T1.FORM_DESC','T1.FORM_ID',FormCode,0,FindResult) then
+ Result := GetFindResult('T1.FORM_DESC');
+
+ ////// 到自訂文件找//////
+ if Result = '' then
+ Result := GetCustomDocName(ImageSavePath+CaseID+'\',FormCode2DocNo(FormCode));
+ {for i := 0 to Cust_DocNoList.Count - 1 do
+ begin
+ v := Pos('_',Cust_DocNoList.Strings[i]);
+ ln := Length(Cust_DocNoList.Strings[i]);
+ CusDocNo := copy(Cust_DocNoList.Strings[i],1,v-1);
+ CusDocName := Copy(Cust_DocNoList.Strings[i],v+1,ln-v);
+ if CusDocNo = FormCode2DocNo(FormCode) then
+ Result := DocNo2DocName(CusDocNo);
+
+ end;}
+
+
+ {DelBarCode := '**'+FormCode;
+ for I := 0 to FormCodeList.Count - 1 do
+ begin
+ if FindDel then //要找下架的
+ begin
+ if (FormCode = FormCodeList.Strings[i]) or (DelBarCode = FormCodeList.Strings[i]) then
+ begin
+ Result := FormNameList.Strings[i];
+ Break;
+ end;
+ end
+ Else
+ begin
+ if (FormCode = FormCodeList.Strings[i]) or (DelBarCode = FormCodeList.Strings[i]) then
+ begin
+ Result := FormNameList.Strings[i];
+ Break;
+ end;
+ end;
+ end; }
+end;
+
+Function TCB_IMGPSScanX.FormCode2FileName(FormCode:String;List:TStrings):String; //用FormCode找出檔名(第一頁)
+var
+ i : Integer;
+ v,v1 : Integer;
+begin
+ Result := '';
+ for i := 0 to List.Count - 1 do
+ begin
+ V := pos('_',List.Strings[i]);
+ v1 := pos('.',List.Strings[i]);
+ if (FormCode = '') and (V = 0)then //FormCode 為空的則找附件出來
+ begin
+ Result := List.Strings[i];
+ Break;
+ end;
+ IF FormCode = Copy(List.Strings[i],v+1,v1-v-1) then
+ begin
+ Result := List.Strings[i];
+ Break;
+ end;
+ end;
+end;
+
+Function TCB_IMGPSScanX.FileName2FormCode(FileName:String):String; //從檔名取出FormCode
+var
+ v,v1 : Integer;
+begin
+ FileName := ExtractFileName(FileName);
+ v := Pos('_',FileName);
+ v1 := Pos('.',FileName);
+ if v > 0 then
+ begin
+ Result := Copy(FileName,v+1,v1-v-1);
+ end
+ Else //附件
+ begin
+ Result := '';
+ end;
+end;
+
+Function TCB_IMGPSScanX.FileName2FormName(CaseID,FileName:String):String; //從檔名取出文件名稱
+begin
+ Result := FormCode2FormName(CaseID,FileName2FormCode(FileName));
+end;
+
+Function TCB_IMGPSScanX.FileName2ScanPage(FileName:String):Integer; //從檔名轉出掃瞄頁數
+Var
+ v : Integer;
+ FName : String;
+begin
+ FName := ExtractFileName(FileName);
+ v := Pos('_',FName);
+ if v = 0 then //附件
+ v := pos('.',FName);
+ Result := Strtoint(Copy(FName,1,v-1));
+end;
+
+Function TCB_IMGPSScanX.FileName2NoQuene_Filename(FileName:String):String; //取出沒有序號的檔名
+var
+ v,v1 : Integer;
+ FName : String;
+begin
+ FName := ExtractFileName(FileName);
+ v := Pos('_',FName);
+ if v = 0 then //附件
+ v := pos('.',FName);
+ v1 := length(FName);
+ Result := Copy(FName,v,v1-v+1);
+end;
+
+Function TCB_IMGPSScanX.FileName2Index(FileName:String):Integer; //從檔名取出在ContextList的序號
+var
+ i : Integer;
+begin
+ for i := 0 to ContextList.Count - 1 do
+ begin
+ if FileName = ContextList.Strings[i] then
+ begin
+ Result := i;
+ Break;
+ end;
+ end;
+end;
+
+Function TCB_IMGPSScanX.FileName2NowDcoNo(FileName:String;CtList,DNList:TStrings):String; //從檔名取出歸屬的文件代號
+var
+ i : Integer;
+begin
+ for I := 0 to CTList.Count -1 do
+ begin
+ if FileName = CTList.Strings[i] then
+ begin
+ Result := DNList.Strings[i];
+ break;
+ end;
+ end;
+end;
+
+Function TCB_IMGPSScanX.FormCode2DocNo(FormCode:String):String; //FormCode轉Docno
+Var
+ i : Integer;
+begin
+ Result := '';
+ for i := 0 to FormID_List.Count-1 do
+ begin
+ if FormID_List.Strings[i] = FormCode then
+ begin
+ Result := DocNo_List.Strings[i];
+ Break;
+ end;
+
+ end;
+ if (FormCode <> '') and (Result = '') then //是自訂文件
+ begin
+ Result := Copy(FormCode,1,8); //20170224 DocNo 固定長度8碼
+ end;
+
+ {If FindSQLData(FORM_INF_List,'T1.DOC_NO','T1.FORM_ID',FormCode,0,FindResult) Then //20130403太慢了..換掉
+ begin
+ Result := GetFindResult('T1.DOC_NO');
+ end;}
+end;
+
+Function TCB_IMGPSScanX.FormCode2Version(FormCode:String):String; //FormCode轉版本
+begin
+ Result := Copy(FormCode,11,5);
+end;
+
+Function TCB_IMGPSScanX.FormCode2Page(FormCode:String):String; //FormCode轉頁數
+begin
+ Result := Copy(FormCode,9,2)
+end;
+
+Function TCB_IMGPSScanX.DocNo2DocName(CaseID,DocNo:String):String; //Docno轉Doc名稱
+var
+ i,v,ln : Integer;
+ CusDocNo,CusDocName : String;
+begin
+ Result := '';
+ if DocNo = AttName then
+ begin
+ Result := _Msg('未歸類');
+ end
+ Else
+ begin
+ If FindSQLData(Doc_Inf_List,'DOC_U_DESC','DOC_NO',DocNo,0,FindResult) Then
+ begin
+//ShowMessage(FindResult.Text);
+ Result := GetFindResult('DOC_U_DESC');
+ end;
+ end;
+
+ if Result = '' then //去自訂文件裡找
+ begin
+ Result := GetCustomDocName(ImageSavePath+CaseID+'\',DocNo);
+ {for i := 0 to Cust_DocNoList.Count - 1 do
+ begin
+ v := Pos('_',Cust_DocNoList.Strings[i]);
+ ln := length(Cust_DocNoList.Strings[i]);
+ CusDocNo := Copy(Cust_DocNoList.Strings[i],1,v-1);
+ CusDocName := Copy(Cust_DocNoList.Strings[i],v+1,ln-v);
+ if DocNo = CusDocNo then
+ begin
+ Result := CusDocName;
+ Break;
+ end;
+ end;}
+ end;
+
+end;
+
+Function TCB_IMGPSScanX.DocNo2FileName(DocNo:String;List:TStrings):String; //用DocNo找出檔名(第一頁)
+var
+ i : Integer;
+begin
+ Result := '';
+ for i := 0 to List.Count - 1 do
+ begin
+ IF DocNo = FormCode2DocNo(FileName2FormCode(List.Strings[i])) then
+ begin
+ Result := List.Strings[i];
+ Break;
+ end;
+ end;
+end;
+
+Function TCB_IMGPSScanX.FormCode2WorkNo(FormCode:String):String; //用FormCode取出作業別
+begin
+ Result := '';
+ If FindSQLData(FORM_INF_List,'T1.WORK_NO','T1.FORM_ID',FormCode,0,FindResult) Then
+ begin
+ Result := GetFindResult('T1.WORK_NO');
+ end;
+end;
+
+Function TCB_IMGPSScanX.DocNo2WorkNo(DocNo:String):String; //用DocNo取出作業別
+begin
+ Result := '';
+ If FindSQLData(Doc_Inf_List,'WORK_NO','DOC_NO',DocNo,0,FindResult) Then
+ begin
+ Result := GetFindResult('WORK_NO');
+ end;
+end;
+
+Function TCB_IMGPSScanX.DocNoNeedDiv(DocNo:String):Boolean; //是否是需分份數的文件代號
+var
+ NeedDiv : String;
+begin
+ Result := False;
+ If FindSQLData(Doc_Inf_List,'IS_DOC_DIV','DOC_NO',DocNo,0,FindResult) Then
+ begin
+ NeedDiv := GetFindResult('IS_DOC_DIV');
+ if NeedDiv = 'Y' then
+ Result := True;
+ end;
+end;
+
+Function TCB_IMGPSScanX.CaseNode2Info(Node:TTreeNode;Mode:Char):String; //案件Node取案件編號 Mode: I:Caseno;P:Page
+var
+ v,ln : Integer;
+begin
+ //XXXXXX-XX頁
+ V := Pos('-',Node.Text);
+ ln := Length(Node.Text);
+ case Mode of
+ 'I': Result := Copy(Node.Text,1,v-1); //CaseID
+ 'P': Result := Copy(Node.Text,v+1,ln-v-1); //CasePage
+ end;
+
+end;
+
+Function TCB_IMGPSScanX.DocNode2Info(Node:TTreeNode;Mode:Char):String; //文件Node取文件代號 Mode: I:Docno;N:Docname;P:Page;G:Group
+var
+ v,v1,v2,v3,ln :integer;
+begin
+ //文件名稱@組數{文件代號}-XX頁
+ V := PosEnd('@',Node.Text);
+ v1 := PosEnd('{',Node.Text);
+ v2 := PosEnd('}',Node.Text);
+ v3 := PosEnd('-',Node.Text);
+ ln := Length(Node.Text);
+ case Mode of
+ 'I': Result := Copy(Node.Text,v1+1,v2-v1-1); //DocNo
+ 'N': Result := Copy(Node.Text,1,v-1); //DocName
+ 'P': Result := Copy(Node.Text,v3+1,ln-v3-1); //DocPage
+ 'G': Result := Copy(Node.Text,v+1,v1-v-1); //DocGroup
+ end;
+end;
+
+Function TCB_IMGPSScanX.FormNode2Info(Node:TTreeNode;Mode:Char):String; //表單Node取表單代號 Mode: I:FormID;N:FormName;P:Page
+var
+ v,v1,v2,ln :integer;
+begin
+ //表單代號{表單名稱}-XX頁
+ v := Pos('{',Node.Text);
+ v1 := PosEnd('}',Node.Text);
+ v2 := PosEnd('-',Node.Text);
+ ln := Length(Node.Text);
+ case Mode of
+ 'I': Result := Copy(Node.Text,1,v-1); //FormID
+ 'N': Result := Copy(Node.Text,v1+1,v2-v1-1); //FormName
+ 'P': Result := Copy(Node.Text,v2+1,ln-v2-1); //Page
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.PriorPage(Page:Integer); //上一頁
+var
+ iISB : TImageScrollBox;
+begin
+ iISB := TImageScrollBox(FindComponent(ISBName+inttostr(Page-1)));
+ if iISB <> nil then
+ begin
+ ISBClick(iISB);
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.NextPage(Page:Integer); //下一頁
+var
+ iISB : TImageScrollBox;
+begin
+ iISB := TImageScrollBox(FindComponent(ISBName+inttostr(Page+1)));
+ if iISB <> nil then
+ begin
+ ISBClick(iISB);
+ end;
+end;
+
+Function TCB_IMGPSScanX.DocNoExistsinTree(CaseNode:TTreeNode;DocNo:String):Boolean; //是否己存在樹裡
+var
+ i : Integer;
+begin
+ Result := False;
+ for I := 0 to CaseNode.Count - 1 do
+ begin
+ if DocNo = DocNode2Info(CaseNode.Item[i],'I') Then
+ begin
+ Result := True;
+ Break;
+ end;
+ end;
+
+end;
+
+Function TCB_IMGPSScanX.DocnoNeedGroup(DocNo:String):Boolean; //傳入的DocNo是否需分組
+begin
+ Result := False;
+ If FindSQLData(Doc_Inf_List,'IS_DOC_DIV','DOC_NO',DocNo,0,FindResult) Then
+ begin
+ if GetFindResult('IS_DOC_DIV') = 'Y' Then
+ Result := True;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.DistinctFormCode(CaseID:String); //從案件裡的FormCode取出第一頁
+var
+ i,n : Integer;
+ LForm,OForm : String;
+ Addok : Boolean;
+ S : TStringlist;
+begin
+ S := TStringlist.Create;
+ try
+ S.LoadFromFile(ImageSavePath + CaseID+'\upload\Context.dat');
+ for i := 0 to S.Count - 1 do
+ begin
+LogFile1.LogToFile(logTimeString+S.Strings[i]+' ISExistImg='+BoolToStr(ISExistImg(ImageSavePath+CaseID+'\upload\'+S.Strings[i]),true));
+LogFile1.LogToFile(logTimeString+S.Strings[i]+' reSizeExistImgList='+BoolToStr(reSizeExistImgList.IndexOf(LoadFileGetMD5(ImageSavePath+CaseID+'\upload\'+S.Strings[i]))<>-1,true));
+ if FWH_category='N' then
+ begin
+ if (ISExistImg(ImageSavePath+CaseID+'\upload\'+S.Strings[i]))
+ or (reSizeExistImgList.IndexOf(LoadFileGetMD5(ImageSavePath+CaseID+'\upload\'+S.Strings[i]))<>-1) then
+ begin
+ Continue;
+ end;
+ end;
+
+ LForm := FileName2FormCode(S.Strings[i]);
+ AddOk := True;
+ for n := 0 to OMRFileList.Count - 1 do
+ begin
+ OForm := FileName2FormCode(OMRFileList.Strings[n]);
+ if (LForm <> '') and (LForm = OForm) then
+ begin
+ AddOk := False;
+ Break;
+ end;
+ end;
+ if AddOk then
+ begin
+ OMRFileList.Add(S.Strings[i]);
+ end;
+ end;
+ finally
+ S.Free;
+ end;
+
+end;
+
+
+Function TCB_IMGPSScanX.OMRCheckCase(CaseID:String):Boolean; //OMR檢核
+var
+ i,n,m,v,v1 : Integer;
+ XT,RelaXT,ValueXT : TXmltool;
+ OMRFormCode,OMRFile,OMRFormName,ColEName,ColCName,Site : String;
+ Pixel : Integer;
+ RelaFormCode,RelaFile,RelaFormName,RelaColEName,RelaColCName,RelaSite : String;
+ RelaDocNo,RelaDocName : string;
+ RelaPixel : Integer;
+ s : String;
+ nodename : String;
+ OMROK : Boolean;
+ CaseOk : Boolean;
+ ErrStr : String;
+ SiteRec,RelaSiteRec : String; //多組位置記錄
+ OMRValue : String;
+ MainFormID,MainDocNo,MainVersion : String; //主FormID
+ MainFormPage,CaseFormPage : Integer; //主要文件需要的頁數
+ NeedDocNoStr,NoDocNoStr : String; //相依 互斥文件字串
+ List : TStringlist;
+ FormCode : String;
+ FormDataPages : Integer;
+ NoSite : Boolean; //未定位
+ Anchor,Anchor1 : String;
+ OMROkCount : Integer;
+ //Casecheck : Boolean; //是否要做檢核
+ //AllCheck : Boolean; //是否要做完整檢核
+
+ ISB8W,ISB8H:integer;
+begin
+ ///OMRErrInfo 1: 必要文件 2:相依文件 3:互斥文件 4:必填 5:欄位有值附文件 6:欄位有值不附文件
+ /// 7: 欄位有值相關欄位也要有值 8:欄位有值要寫備註 9:停用日期 10:最大頁數
+ //Casecheck := True;
+ //Allcheck := True;
+ //if (FMode = 'ISCAN') then
+ //Allcheck := False;
+ CaseOk := True;
+ //if Casecheck then
+ //begin
+ DeleteFile(ImageSavePath+CaseID+'\upload\Checkerr.ini');
+ DeleteFile(ImageSavePath+CaseID+'\upload\CheckMemo.dat');
+ //DeleteFile(ImageSavePath+CaseID+'\upload\ReSize.dat');
+ DeleteFile(ImageSavePath+CaseID+'\upload\RemoveMemo.dat');
+ DeleteFile(ImageSavePath+CaseID+'\upload\OMRCheckOk.dat');
+ Memo1.Lines.Clear;
+ OMRFileList.Clear;
+
+ MainFormID := GetCaseFormID(ImageSavePath+CaseID+'\upload\');
+ List := TStringlist.Create;
+ try
+ //if AllCheck then
+ //begin
+ if GetCasePage(ImageSavePath,CaseID) =0 then
+ begin
+
+ end;
+//ShowMessage('MainFormID='+MainFormID);
+LogFile1.LogToFile(logTimeString+' '+FModeName+' '+CaseID+' '+'MainFormID='+MainFormID);
+ if MainFormID = ''then
+ begin
+ //20131203 yuu說不檢查這個,先拿掉 20170315 楷琳說未歸類要擋 20170726 因此有檢查必要FormID 所以 可以拿掉
+ {if FCheck_main_form='Y' then
+ begin
+ if (FMode <> 'SSCAN') AND (FMode<>'ESCAN') then //簽署章件會換主FormID,先跳過 20170629 ESCAN 也不檢查
+ begin
+ ErrStr:=_Msg('找不到分案文件'); //找不到主文件
+ OMRErr2ini(CaseID,ErrStr,'','','','','','',False,False,True);
+ CaseOk := false;
+//ShowMessage('AAAAA');
+ end;
+ end;
+ }
+ end
+ Else
+ begin
+ //////主要非主要文件//////
+ DistinctDocinCase(ImageSavePath+CaseID+'\upload\');
+//ShowMessage(DocNo_VerinCase.Text);
+//DocNo_VerinCase.Add('31A00101_1706A');
+LogFile1.LogToFile(logTimeString+' '+CaseID+' '+'DocNo_VerinCase.Text='+DocNo_VerinCase.Text);
+ if ModeNeedCheck(OMRErrInfo[1].Mode,FMode) then //是否要檢核
+ begin
+ for i := 0 to DocNo_VerinCase.Count - 1 do
+ begin
+ v := Pos('_', DocNo_VerinCase.Strings[i]);
+ v1 := length(DocNo_VerinCase.Strings[i]);
+ MainDocNo := Copy(DocNo_VerinCase.Strings[i],1,v-1); //FormCode2DocNo(MainFormID);
+ MainVersion :=Copy(DocNo_VerinCase.Strings[i],v+1,v1-v); //FormCode2Version(MainFormID);
+ MainFormPage := GetDataDocNoPage(MainDocNo,MainVersion); //資料庫記錄主文件頁數
+ CaseFormPage := CheckCaseDocNoPage(CaseID,MainDocNo,MainVersion,MainFormPage); //案件主文件的頁數
+LogFile1.LogToFile(logTimeString+CaseID+',MainDocNo='+MainDocNo+',MainVersion='+MainVersion+',MainFormPage='+IntToStr(MainFormPage)+',CaseFormPage='+IntToStr(CaseFormPage));
+ //CheckFirstDocNoPage
+ IF (MainFormPage > 0) and (MainFormPage <> CaseFormPage) then
+ begin
+ ErrStr:=MainDocNo+Format(OMRErrInfo[1].Info,[Inttostr(MainFormPage),Inttostr(CaseFormPage)]); //主要文件需有XX頁僅附XX頁
+ OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[1].Ignore,OMRErrInfo[1].Display);
+ if OMRErrInfo[1].Display then
+ CaseOk := false;
+ end;
+ end;
+ end;
+ //////主要非主要文件/////
+//showmessage(MainFormID);
+ MainDocNo := FormCode2DocNo(MainFormID);
+ MainVersion := FormCode2Version(MainFormID);
+ if FindSQLData(DM_FORM_INF_List,'DEPE_FORM_ID,MUTEX_FORM_ID','MAIN_FORM_ID,DOC_VERSION',MainDocNo+','+MainVersion,0,FindResult) then
+ begin
+ NeedDocNoStr := GetFindResult('DEPE_FORM_ID');
+ NoDocNoStr := GetFindResult('MUTEX_FORM_ID');
+ end
+ Else if FindSQLData(DM_FORM_INF_List,'DEPE_FORM_ID,MUTEX_FORM_ID','MAIN_FORM_ID,DOC_VERSION',MainDocNo+','+MainVersion,0,FindResult) then
+ begin
+ NeedDocNoStr := GetFindResult('DEPE_FORM_ID');
+ NoDocNoStr := GetFindResult('MUTEX_FORM_ID');
+ end;
+
+ //////相依文件/////
+ if ModeNeedCheck(OMRErrInfo[2].Mode,FMode) then //是否要檢核
+ begin
+ List.CommaText := NeedDocNoStr;
+ for I := 0 to List.Count - 1 do
+ begin
+ if not Case_DocNoExists(CaseID,List.Strings[i]) then //沒附相依文件
+ begin
+ if FWH_category='N' then
+ begin
+ if ISExistImg(ImageSavePath+CaseID+'\upload\'+List.Strings[i]) then
+ begin
+ Continue;
+ end;
+ end;
+ ErrStr:=Format(OMRErrInfo[2].Info,[DocNo2DocName(CaseID,List.Strings[i])]); //沒附相依文件
+ OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[2].Ignore,OMRErrInfo[2].Display);
+ if OMRErrInfo[2].Display then
+ CaseOk := false;
+ end;
+ end;
+ end;
+ //////相依文件/////
+
+ //////互斥文件/////
+ if ModeNeedCheck(OMRErrInfo[3].Mode,FMode) then //是否要檢核
+ begin
+ List.CommaText := NoDocNoStr;
+ for I := 0 to List.Count - 1 do
+ begin
+ if Case_DocNoExists(CaseID,List.Strings[i]) then //附了互斥文件
+ begin
+ if FWH_category='N' then
+ begin
+ if ISExistImg(ImageSavePath+CaseID+'\upload\'+List.Strings[i]) then
+ begin
+ Continue;
+ end;
+ end;
+ ErrStr:=Format(OMRErrInfo[3].Info,[DocNo2DocName(CaseID,List.Strings[i])]); //有附互斥文件
+ OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[3].Ignore,OMRErrInfo[3].Display);
+ if OMRErrInfo[3].Display then
+ CaseOk := false;
+ end;
+ end;
+ end;
+ //////互斥文件/////
+ end; //MainFormID結束
+ //end;
+ List.LoadFromFile(ImageSavePath + CaseID+'\upload\Context.dat');
+ for i := 0 to List.Count - 1 do
+ begin
+ FormCode := FileName2FormCode(List.Strings[i]);
+ /////未歸類///
+ {IF FormCode = 'Attach' Then //20140211 yuu說不檢查了
+ begin
+ ErrStr:=_Msg('尚有文件未歸類');
+ OMRErr2ini(CaseID,ErrStr,'','','','','','',False,False,True);
+ CaseOk := false;
+ end; }
+ /////未歸類//////
+
+ /////未註冊文件/////
+ {IF not FormIDExists(FormCode,False) then //未註冊文件
+ begin
+ ErrStr:=FormCode+_Msg('不為此業務的表單代碼');
+ OMRErr2ini(CaseID,ErrStr,'','','','',False,False,True);
+ CaseOk := false;
+ end }
+ /////未註冊文件/////
+ //////停用文件//
+ {Else} IF ModeNeedCheck(OMRErrInfo[9].Mode,FMode) and (not FormIDExists(FormCode,True,0)) and (not checkFormCodeIsCustom(ImageSavePath + CaseID+'\upload\',FormCode)) then //有停用的文件
+ begin
+//ShowMessage('AAAA');
+ ErrStr:=Format(OMRErrInfo[9].Info,[FormCode2FormName(CaseID,FormCode)]); //有停用文件
+ OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[9].Ignore,OMRErrInfo[9].Display);
+//ShowMessage('ErrStr='+ErrStr);
+ if OMRErrInfo[9].Display then
+ CaseOk := false;
+ end;
+ //////停用文件////
+ end;
+ finally
+ List.Free;
+ end;
+ //if AllCheck then
+ //begin
+ //////最大頁數///
+LogFile1.LogToFile(logTimeString+'最大頁數A段 '+CaseID+' '+'OMRFileList.Text='+OMRFileList.Text);
+ DistinctFormCode(CaseID);
+ if ModeNeedCheck(OMRErrInfo[10].Mode,FMode) then //是否要檢核
+ begin
+//ShowMessage('AAA'+OMRFileList.Text);
+LogFile1.LogToFile(logTimeString+'最大頁數B段 '+CaseID+' '+'OMRFileList.Text='+OMRFileList.Text);
+ For i := 0 to OMRFileList.Count - 1 do
+ begin
+ if FModeName='異動件' then Continue;
+
+ if FWH_category='N' then
+ begin
+ if ISExistImg(ImageSavePath+CaseID+'\upload\'+OMRFileList.Strings[i]) then
+ begin
+ Continue;
+ end;
+ end;
+ FormCode := FileName2FormCode(OMRFileList.Strings[i]);
+ FormDataPages := GetDataFormCodePages(FormCode);
+
+ IF (FormCode <> '') and (FormDataPages > 0) and (FindFormCodePages(CaseID,FormCode) > FormDataPages) then //有超過最大頁數的文件
+ begin
+ ErrStr:=Format(OMRErrInfo[10].Info,[FormCode2FormName(CaseID,FormCode),inttostr(FormDataPages)]); //有超過最大頁數文件
+ OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[10].Ignore,OMRErrInfo[10].Display);
+ if OMRErrInfo[10].Display then
+ CaseOk := false;
+ end;
+ end;
+ end;
+ /////最大頁數/////
+ //end;
+ ImageScrollBox1.FileName := '';
+ //if FWork_No = 'CW' then //理賠就不做下面的檢核了
+ //begin
+ //////OMR檢核///////
+ ContextList.LoadFromFile(ImageSavePath+CaseID+'\upload\Context.dat');
+ DistinctFormCode(CaseID);
+ ValueXT := TXmltool.Create;
+ Try
+//ShowMessage('必填'+OMRFileList.Text);
+LogFile1.LogToFile(logTimeString+'必填 '+CaseID+' '+'OMRFileList.Text='+OMRFileList.Text);
+ For i := 0 to OMRFileList.Count - 1 do
+ begin
+//ShowMessage('OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
+ if CheckRequiredColumnValues(FWork_NO,CaseID) then Continue;
+
+ OMRFile := OMRFileList.Strings[i];
+ OMRFormCode := FileName2FormCode(OMRFileList.Strings[i]);
+ OMRFormName := FormCode2FormName(CaseID,OMRFormCode);
+ Anchor := FormID2Anchor(OMRFormCode);
+ ///依十字定位點縮放////
+ ImageReSize_FormID(CaseID,OMRFile);
+ ////依十字定位點縮放///
+//Display1.Lines.Add('OMRFile='+OMRFile+',OMRFormCode='+OMRFormCode+',OMRFormName='+OMRFormName);
+LogFile1.LogToFile(logTimeString+'OMRFile='+OMRFile+',OMRFormCode='+OMRFormCode+',OMRFormName='+OMRFormName);
+//ShowMessage('KKKKK');
+ if not FileExists(CheckXmlPath+FWork_no+'\'+OMRFormCode+'.xml') then //沒有Xml就不用檢核
+ Continue;
+
+//ShowMessage('11638 OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
+ XT := TXmltool.Create(CheckXmlPath+FWork_no+'\'+OMRFormCode+'.xml');
+ RelaXT := TXmltool.Create;
+//ShowMessage('ModeNeedCheck='+BoolToStr(ModeNeedCheck(OMRErrInfo[4].Mode,FMode),true));
+ try
+ //*******必填********
+ if ModeNeedCheck(OMRErrInfo[4].Mode,FMode) then //是否要檢核
+ begin
+ if XT.SubNodes['/form/settype1/'].First then
+ Repeat
+ OMROK := False;
+ SiteRec := ''; //清掉
+ ColEName := XT.SubNodes['/form/settype1/'].NodeName;
+ ColCName := XT.Node['/form/settype1/'+ColEName+'/'].Attributes['coldesc'];
+ ColCName := Copy(ColCName,1,length(ColCName)-6);
+ if XT.SubNodes['/form/settype1/'+ColEName+'/'].First then
+ Repeat
+ nodename := XT.SubNodes['/form/settype1/'+ColEName+'/'].NodeName;
+ If nodename <> '@coldesc' then
+ begin
+ Pixel := Strtoint(XT.Node['/form/settype1/'+ColEName+'/'+nodename+'/'].Attributes['pixel']);
+ Site := XT.Node['/form/settype1/'+ColEName+'/'+nodename+'/'].Attributes['colxy'];
+ if SiteRec= '' then //記錄位置
+ SiteRec := Site
+ else
+ SiteRec := SiteRec+'@'+Site;
+ //有填就ok
+ //Showmessage(ColCName +','+ inttostr(OMRMpsV1.GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site))+','+inttostr(Pixel + SafePixel));
+//SafePixel:=90000;
+Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
+//FindPoint(ISB_BW.Graphic,UpLPoint,UpRPoint,DownLPoint,ANCHOR);
+ if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
+ begin
+ //Showmessage('oh');
+ OMROK := True;
+ Break;
+ end;
+ end
+ Else
+ begin
+ //ColCName := XT['/form/settype1/'+ColEName+'/'+nodename+'/'];
+ end;
+ Until not XT.SubNodes['/form/settype1/'+ColEName+'/'].Next;
+ if not OMROk then
+ begin
+ ErrStr:=Format(OMRErrInfo[4].Info,[ColCName]); //XX欄位未填寫
+ OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,'','',Anchor,Anchor1,False,OMRErrInfo[4].Ignore,OMRErrInfo[4].Display);
+ if OMRErrInfo[4].Display then
+ CaseOk := false;
+ end;
+ Until not XT.SubNodes['/form/settype1/'].Next ;
+ end;
+ //*******必填********
+//ShowMessage('11692 OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
+ //if AllCheck then
+ //begin
+ //*******有值相關文件的欄位也要有值*******
+ if ModeNeedCheck(OMRErrInfo[7].Mode,FMode) then //是否要檢核
+ begin
+ if XT.SubNodes['/form/settype3/'].First then
+ Repeat
+ SiteRec := '';
+ RelaSiteRec := '';
+ ColEName := XT.SubNodes['/form/settype3/'].NodeName;
+ ColCName := XT.Node['/form/settype3/'+ColEName+'/'].Attributes['coldesc'];
+ ColCName := Copy(ColCName,1,length(ColCName)-6);
+ Site := XT.Node['/form/settype3/'+ColEName+'/'].Attributes['colxy'];
+ if SiteRec= '' then //記錄位置
+ SiteRec := Site
+ else
+ SiteRec := SiteRec+'@'+Site;
+ Pixel := XT.Node['/form/settype3/'+ColEName+'/'].Attributes['pixel'];
+Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
+ if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
+ begin
+ ////有填寫////
+
+ if XT.SubNodes['/form/settype3/'+ColEName+'/'].First then
+ Repeat
+ RelaSiteRec := '';
+ nodename := XT.SubNodes['/form/settype3/'+ColEName+'/'].NodeName;
+ If (nodename <> '@coldesc') and (not XT.SubNodes['/form/settype3/'+ColEName+'/'].NodeIsAttr) then
+ begin
+ RelaFormCode := XT.node['/form/settype3/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
+ RelaColEName := XT.node['/form/settype3/'+ColEName+'/'+nodename+'/'].Attributes['rela_col_name'];
+ RelaColCName := XT.node['/form/settype3/'+ColEName+'/'+nodename+'/'].Attributes['relacoldesc'];
+ RelaColCName := Copy(RelaColCName,1,length(RelaColCName)-6);
+ RelaFile := FormCode2FileName(RelaFormCode,ContextList);
+ RelaFormName := FormCode2FormName(CaseID,RelaFormCode);
+ Anchor1 := FormID2Anchor(RelaFormCode);
+ RelaXT.LoadFromFile(CheckXmlPath+FWork_no+'\'+RelaFormCode+'.xml');
+Display1.Lines.Add(RelaFile+','+RelaFormName);
+//ShowMessage(RelaFile);
+//ShowMessage(ImageSavePath+CaseID+'\upload\'+RelaFile);
+ if RelaFile<>'' then
+ begin
+ ISB8.LoadFromFile(ImageSavePath+CaseID+'\upload\'+RelaFile,1); //20170815
+ ISB8W:= ISB8.Graphic.Width;
+ ISB8H:= ISB8.Graphic.Height;
+ FindPoint(ISB8.Graphic,UpLPoint,UpRPoint,DownLPoint,ISB8W,ISB8H,ANCHOR); //20170815 抓相關然欄位所在圖檔的定位
+ end;
+
+ OMROK := False;
+ //OMROK := False;
+ //if RelaXT.SubNodes['/form/settype2/'].First then
+ //Repeat
+ NoSite := True;
+ if RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].Count >0 then
+ NoSite := False;
+ if RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].First then
+ Repeat
+ nodename := RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].NodeName;
+ If nodename <> '@coldesc' then
+ begin
+ RelaPixel := Strtoint(RelaXT.Node['/form/settype2/'+RelaColEName+'/'+nodename+'/'].Attributes['pixel']);
+ RelaSite := RelaXT.Node['/form/settype2/'+RelaColEName+'/'+nodename+'/'].Attributes['colxy'];
+ if RelaSiteRec= '' then //記錄位置
+ RelaSiteRec := RelaSite
+ else
+ RelaSiteRec := RelaSiteRec+'@'+RelaSite;
+ if FileExists(ImageSavePath+CaseID+'\upload\'+RelaFile) then
+ begin
+Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
+ if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+RelaFile,RelaSite,Bt) > (RelaPixel + SafePixel) then
+ begin
+ OMROK := True;
+ Break;
+ end;
+ ///依十字定位點縮放////
+ ImageReSize_FormID(CaseID,OMRFile); //20170815 重新抓定位
+ ////依十字定位點縮放////
+ end;
+ end;
+
+ Until not RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].Next;
+ if not OMROk then
+ begin
+ if not FileExists(ImageSavePath+CaseID+'\upload\'+RelaFile) then
+ ErrStr:=Format(OMRErrInfo[7].Info,[ColCName,RelaColCName])+'('+_msg('未附')+RelaFormName+')' //XX欄位填寫時,XX欄位未填寫
+ Else if NoSite then
+ ErrStr:=Format(OMRErrInfo[7].Info,[ColCName,RelaColCName])+'('+_msg('未定位')+')'
+ Else
+ ErrStr:=Format(OMRErrInfo[7].Info,[ColCName,RelaColCName]); //XX欄位填寫時,XX欄位未填寫
+ OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,ImageSavePath+CaseID+'\upload\'+RelaFile,RelaSiteRec,Anchor,Anchor1,False,OMRErrInfo[7].Ignore,OMRErrInfo[7].Display);
+ if OMRErrInfo[7].Display then
+ CaseOk := false;
+ end;
+ //Until not RelaXT.SubNodes['/form/settype2/'].Next ;
+
+ end;
+ Until not XT.SubNodes['/form/settype3/'+ColEName+'/'].Next;
+ end;
+ Until not XT.SubNodes['/form/settype3/'].Next ;
+ end;
+ //*******有值相關文件的欄位也要有值*******
+//ShowMessage('11788 OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
+
+ //*******有值相關文件的欄位不能有值*******
+ if ModeNeedCheck(OMRErrInfo[11].Mode,FMode) then //是否要檢核
+ begin
+ if XT.SubNodes['/form/settype8/'].First then
+ Repeat
+ SiteRec := '';
+ RelaSiteRec := '';
+ OMROkCount := 0;
+ ColEName := XT.SubNodes['/form/settype8/'].NodeName;
+ ColCName := XT.Node['/form/settype8/'+ColEName+'/'].Attributes['coldesc'];
+ ColCName := Copy(ColCName,1,length(ColCName)-6);
+ Site := XT.Node['/form/settype8/'+ColEName+'/'].Attributes['colxy'];
+ if SiteRec= '' then //記錄位置
+ SiteRec := Site
+ else
+ SiteRec := SiteRec+'@'+Site;
+ Pixel := XT.Node['/form/settype8/'+ColEName+'/'].Attributes['pixel'];
+Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
+
+ if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
+ begin
+ ////有填寫// //
+ inc(OMROkCount);
+ end;
+ if XT.SubNodes['/form/settype8/'+ColEName+'/'].First then
+ Repeat
+ RelaSiteRec := '';
+ nodename := XT.SubNodes['/form/settype8/'+ColEName+'/'].NodeName;
+ If (nodename <> '@coldesc') and (not XT.SubNodes['/form/settype8/'+ColEName+'/'].NodeIsAttr) then
+ begin
+ RelaFormCode := XT.node['/form/settype8/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
+ RelaColEName := XT.node['/form/settype8/'+ColEName+'/'+nodename+'/'].Attributes['rela_col_name'];
+ RelaColCName := XT.node['/form/settype8/'+ColEName+'/'+nodename+'/'].Attributes['relacoldesc'];
+ RelaColCName := Copy(RelaColCName,1,length(RelaColCName)-6);
+ RelaFile := FormCode2FileName(RelaFormCode,ContextList);
+ RelaFormName := FormCode2FormName(CaseID,RelaFormCode);
+ Anchor1 := FormID2Anchor(RelaFormCode);
+ RelaXT.LoadFromFile(CheckXmlPath+FWork_no+'\'+RelaFormCode+'.xml');
+
+ if RelaFile<>'' then
+ begin
+ ISB8.LoadFromFile(ImageSavePath+CaseID+'\upload\'+RelaFile,1); //20170815
+ ISB8W:= ISB8.Graphic.Width;
+ ISB8H:= ISB8.Graphic.Height;
+ FindPoint(ISB8.Graphic,UpLPoint,UpRPoint,DownLPoint,ISB8W,ISB8H,ANCHOR); //20170815 抓相關然欄位所在圖檔的定位
+ end;
+
+ OMROK := False;
+ //OMROK := False;
+ //if RelaXT.SubNodes['/form/settype2/'].First then
+ //Repeat
+ NoSite := True;
+ if RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].Count >0 then
+ NoSite := False;
+ if RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].First then
+ Repeat
+ nodename := RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].NodeName;
+ If nodename <> '@coldesc' then
+ begin
+ RelaPixel := Strtoint(RelaXT.Node['/form/settype2/'+RelaColEName+'/'+nodename+'/'].Attributes['pixel']);
+ RelaSite := RelaXT.Node['/form/settype2/'+RelaColEName+'/'+nodename+'/'].Attributes['colxy'];
+ if RelaSiteRec= '' then //記錄位置
+ RelaSiteRec := RelaSite
+ else
+ RelaSiteRec := RelaSiteRec+'@'+RelaSite;
+ if FileExists(ImageSavePath+CaseID+'\upload\'+RelaFile) then
+ begin
+Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
+ if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+RelaFile,RelaSite,Bt) > (RelaPixel + SafePixel) then
+ begin
+ inc(OMROkCount);
+ //OMROK := True;
+ //Break;
+ end;
+ ///依十字定位點縮放////
+ ImageReSize_FormID(CaseID,OMRFile);
+ ////依十字定位點縮放////
+ end;
+ end;
+ //Else
+ //begin
+ //ColCName := XT['/form/settype1/'+ColEName+'/'+nodename+'/'];
+ //end;
+ Until not RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].Next;
+ if OMROkCount > 1 then
+ begin
+ if not FileExists(ImageSavePath+CaseID+'\upload\'+RelaFile) then
+ ErrStr:=Format(OMRErrInfo[11].Info,[ColCName,RelaColCName])+'('+_msg('未附')+RelaFormName+')' //XX欄位填寫時,XX欄位也填寫
+ Else if NoSite then
+ ErrStr:=Format(OMRErrInfo[11].Info,[ColCName,RelaColCName])+'('+_msg('未定位')+')'
+ Else
+ ErrStr:=Format(OMRErrInfo[11].Info,[ColCName,RelaColCName]); //XX欄位填寫時,XX欄位也填寫
+ OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,ImageSavePath+CaseID+'\upload\'+RelaFile,RelaSiteRec,Anchor,Anchor1,False,OMRErrInfo[7].Ignore,OMRErrInfo[7].Display);
+ if OMRErrInfo[11].Display then
+ CaseOk := false;
+ end;
+ //Until not RelaXT.SubNodes['/form/settype2/'].Next ;
+
+ end;
+ Until not XT.SubNodes['/form/settype8/'+ColEName+'/'].Next;
+ Until not XT.SubNodes['/form/settype8/'].Next ;
+ end;
+ //*******有值相關文件的欄位不能有值*******
+
+//ShowMessage('11889 OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
+
+ //*******有值相依文件*******
+ if ModeNeedCheck(OMRErrInfo[5].Mode,FMode) then //是否要檢核
+ begin
+ if XT.SubNodes['/form/settype4/'].First then
+ Repeat
+ SiteRec := '';
+ RelaSiteRec := '';
+ ColEName := XT.SubNodes['/form/settype4/'].NodeName;
+ ColCName := XT.Node['/form/settype4/'+ColEName+'/'].Attributes['coldesc'];
+ ColCName := Copy(ColCName,1,length(ColCName)-6);
+ Site := XT.Node['/form/settype4/'+ColEName+'/'].Attributes['colxy'];
+ if SiteRec= '' then //記錄位置
+ SiteRec := Site
+ else
+ SiteRec := SiteRec+'@'+Site;
+ Pixel := XT.Node['/form/settype4/'+ColEName+'/'].Attributes['pixel'];
+ Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
+
+ if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
+ begin
+ ////有填寫////
+ if XT.SubNodes['/form/settype4/'+ColEName+'/'].First then
+ Repeat
+ nodename := XT.SubNodes['/form/settype4/'+ColEName+'/'].NodeName;
+ If (nodename <> 'coldesc') and (not XT.SubNodes['/form/settype4/'+ColEName+'/'].NodeIsAttr) then
+ begin
+ {RelaFormCode := XT.Node['/form/settype4/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
+ RelaFile := FormCode2FileName(RelaFormCode);
+ RelaFormName := FormCode2FormName(RelaFormCode); }
+ RelaDocNo := XT.Node['/form/settype4/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
+ RelaFile := DocNo2FileName(RelaDocNo,ContextList);
+ RelaDocName := XT.Node['/form/settype4/'+ColEName+'/'+nodename+'/'].Attributes['relaformname'];
+ if RelaFile='' then
+ begin
+ ErrStr:=Format(OMRErrInfo[5].Info,[ColCName,RelaDocName]); //XX文件XX欄位填寫時,需附XX文件
+ OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,'','',Anchor,Anchor1,False,OMRErrInfo[5].Ignore,OMRErrInfo[5].Display);
+ if OMRErrInfo[5].Display then
+ CaseOk := false;
+ end;
+ end;
+ Until not XT.SubNodes['/form/settype4/'+ColEName+'/'].Next;
+ end;
+ Until not XT.SubNodes['/form/settype4/'].Next ;
+ end;
+ //*******有值相依文件*******
+
+ //*******有值互斥文件*******
+ if ModeNeedCheck(OMRErrInfo[6].Mode,FMode) then //是否要檢核
+ begin
+ if XT.SubNodes['/form/settype5/'].First then
+ Repeat
+ SiteRec := '';
+ RelaSiteRec := '';
+ ColEName := XT.SubNodes['/form/settype5/'].NodeName;
+ ColCName := XT.Node['/form/settype5/'+ColEName+'/'].Attributes['coldesc'];
+ ColCName := Copy(ColCName,1,length(ColCName)-6);
+ Site := XT.Node['/form/settype5/'+ColEName+'/'].Attributes['colxy'];
+ if SiteRec= '' then //記錄位置
+ SiteRec := Site
+ else
+ SiteRec := SiteRec+'@'+Site;
+ Pixel := XT.Node['/form/settype5/'+ColEName+'/'].Attributes['pixel'];
+ Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
+
+ if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
+ begin
+ ////有填寫////
+ if XT.SubNodes['/form/settype5/'+ColEName+'/'].First then
+ Repeat
+ nodename := XT.SubNodes['/form/settype5/'+ColEName+'/'].NodeName;
+ If (nodename <> 'coldesc') and (not XT.SubNodes['/form/settype5/'+ColEName+'/'].NodeIsAttr) then
+ begin
+ {RelaFormCode := XT.Node['/form/settype5/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
+ RelaFile := FormCode2FileName(RelaFormCode);
+ RelaFormName := FormCode2FormName(RelaFormCode);}
+ RelaDocNo := XT.Node['/form/settype5/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
+ RelaFile := DocNo2FileName(RelaDocNo,ContextList);
+ RelaDocName := XT.Node['/form/settype5/'+ColEName+'/'+nodename+'/'].Attributes['relaformname'];
+ if RelaFile<>'' then //有附 20130604看到(='')改的(未測)
+ begin
+ ErrStr:=Format(OMRErrInfo[6].Info,[ColCName,RelaDocName]); //XX文件XX欄位填寫時,不能附XX文件
+ OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,'','',Anchor,Anchor1,False,OMRErrInfo[6].Ignore,OMRErrInfo[6].Display);
+ if OMRErrInfo[6].Display then
+ CaseOk := false;
+ end;
+ end;
+ Until not XT.SubNodes['/form/settype5/'+ColEName+'/'].Next;
+ end;
+ Until not XT.SubNodes['/form/settype5/'].Next ;
+ end;
+ //*******有值互斥文件*******
+
+ //*******有值寫備註*******
+ if ModeNeedCheck(OMRErrInfo[8].Mode,FMode) then //是否要檢核
+ begin
+ if XT.SubNodes['/form/settype6/'].First then
+ Repeat
+ SiteRec := '';
+ ColEName := XT.SubNodes['/form/settype6/'].NodeName;
+ ColCName := XT.Node['/form/settype6/'+ColEName+'/'].Attributes['coldesc'];
+ ColCName := Copy(ColCName,1,length(ColCName)-6);
+ Site := XT.Node['/form/settype6/'+ColEName+'/'].Attributes['colxy'];
+ Pixel := XT.Node['/form/settype6/'+ColEName+'/'].Attributes['pixel'];
+
+ if SiteRec= '' then //記錄位置
+ SiteRec := Site
+ else
+ SiteRec := SiteRec+'@'+Site;
+
+ Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
+
+ if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
+ begin
+ ////有填寫////
+ if not FileExists(ImageSavePath+CaseID+'ScanMemo.dat') then
+ begin
+ ErrStr:=Format(OMRErrInfo[8].Info,[ColCName]); //XX文件XX欄位填寫時,需寫備註
+ OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,'','',Anchor,Anchor1,False,OMRErrInfo[8].Ignore,OMRErrInfo[8].Display);
+ if OMRErrInfo[8].Display then
+ CaseOk := false;
+ end;
+ end;
+ Until not XT.SubNodes['/form/settype6/'].Next ;
+ end;
+ //*******有值寫備註*******
+
+ //*******OMR帶值********
+ if XT.SubNodes['/form/settype7/'].First then
+ Repeat
+ ColEName := XT.SubNodes['/form/settype7/'].NodeName;
+ ValueXT['/content/'+ColEName+'/@savevalue'] := ''; //先給預設空白
+ if XT.SubNodes['/form/settype7/'+ColEName+'/'].First then
+ Repeat
+ nodename := XT.SubNodes['/form/settype7/'+ColEName+'/'].NodeName;
+ If nodename <> '@coldesc' then
+ begin
+ Pixel := Strtoint(XT.Node['/form/settype7/'+ColEName+'/'+nodename+'/'].Attributes['pixel']);
+ Site := XT.Node['/form/settype7/'+ColEName+'/'+nodename+'/'].Attributes['colxy'];
+ OMRValue := XT.Node['/form/settype7/'+ColEName+'/'+nodename+'/'].Attributes['getvalue'];
+
+ //有填就ok
+ Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
+
+ if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
+ begin
+ ValueXT['/content/'+ColEName+'/@savevalue'] := OMRValue; //有填就換成設定的值
+ Break;
+ end;
+ end;
+ Until not XT.SubNodes['/form/settype7/'+ColEName+'/'].Next;
+ Until not XT.SubNodes['/form/settype7/'].Next ;
+
+ //*******OMR帶值********
+ //end;
+ Finally
+ if (OMRValue <> '') then
+ ValueXT.SaveToFile(ImageSavePath+CaseID+'/GetValue.xml');
+ XT.Free;
+ RelaXT.Free;
+ end;
+ end;
+ //必填迴圈結束
+ Finally
+ ValueXT.Free;
+ end;
+ //end;
+ //end;
+ Result := CaseOk;
+end;
+
+Procedure TCB_IMGPSScanX.OMRErr2ini(CaseID,Reason,FileName,Site,RelaFileName,RelaSite,Anchor,Anchor1:String;Del,Ingnore,Display:Boolean); //OMR檢核失敗寫入ini
+var
+ ini : Tinifile;
+ Errcount : Integer;
+ S : TStringlist;
+begin
+ if Display then
+ begin
+ ini := Tinifile.Create(ImageSavePath + CaseID+'\upload\Checkerr.ini');
+ try
+ Errcount := ini.ReadInteger('OMRCount','Count',0); //透過Errcount來對應
+ inc(ErrCount);
+ ini.WriteString(inttostr(ErrCount),'Reason',Reason);
+ ini.WriteBool(inttostr(ErrCount),'Ingnore',Ingnore);
+ ini.writeString(inttostr(ErrCount),'FileName',FileName);
+ ini.WriteString(inttostr(ErrCount),'Site',Site);
+ ini.WriteString(inttostr(ErrCount),'RelaFileName',RelaFileName);
+ ini.WriteString(inttostr(ErrCount),'RelaSite',RelaSite);
+ ini.WriteString(inttostr(ErrCount),'Anchor',Anchor);
+ ini.WriteString(inttostr(ErrCount),'RelaAnchor',Anchor1);
+ ini.WriteBool(inttostr(ErrCount),'Del',Del);
+ ini.WriteInteger('OMRCount','Count',ErrCount);
+ finally
+ ini.Free;
+ end;
+ end
+ Else
+ begin
+ S := TStringlist.Create;
+ try
+ if FileExists(ImageSavePath + CaseID+'\CheckMemo.dat') then
+ S.LoadFromFile(ImageSavePath + CaseID+'\CheckMemo.dat');
+ S.Add(Reason);
+ S.SaveToFile(ImageSavePath + CaseID+'\CheckMemo.dat');
+ finally
+ S.Free;
+ end;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.OMRErrini2List(CaseID:String;ErrlistForm:TErrlistForm); //OMR檢核失敗從ini寫入ListView
+var
+ ini : Tinifile;
+ Errcount : Integer;
+ Del : Boolean;
+ i : Integer;
+begin
+ ini := Tinifile.Create(ImageSavePath + CaseID+'\upload\Checkerr.ini');
+ try
+ Errcount := ini.ReadInteger('OMRCount','Count',0);
+
+ for i := 1 to ErrCount do
+ begin
+ Del := ini.ReadBool(inttostr(i),'Del',False); //是否被移除了
+ if Not Del then
+ begin
+ With ErrlistForm.ErrListLV.Items.Add do
+ begin
+ Caption := ini.ReadString(inttostr(i),'Reason','');
+ SubItems.Add(inttostr(i));
+ end;
+ end;
+ end;
+ if Errlistform.ErrListLV.Items.Count > 0 then
+ Errlistform.ImmediateBt.Enabled := False;
+ finally
+ ini.Free;
+ end;
+end;
+
+function TCB_IMGPSScanX.OMRErrini2ListForLog(CaseID: String): String;
+var
+ ini : Tinifile;
+ Errcount : Integer;
+ Del : Boolean;
+ i,j : Integer;
+ ST,CaseList:TStringList;
+
+begin
+ Result:='';
+ //CaseList.dat
+ ST:=TStringList.Create;
+ CaseList:=TStringList.Create;
+ CaseList.LoadFromFile(ImageSavePath+'CaseList.dat');
+ for I := 0 to CaseList.Count - 1 do
+ begin
+ ini := Tinifile.Create(ImageSavePath + CaseList.Strings[i]+'\upload\Checkerr.ini');
+ try
+ Errcount := ini.ReadInteger('OMRCount','Count',0);
+
+ for j := 1 to ErrCount do
+ begin
+ Del := ini.ReadBool(inttostr(j),'Del',False); //是否被移除了
+ if Not Del then
+ begin
+ ST.Add(ini.ReadString(inttostr(j),'Reason','')) ;
+ end;
+ end;
+ finally
+ ini.Free;
+ end;
+ end;
+ Result:=ST.Text;
+ ST.Free;
+ CaseList.Free;
+end;
+
+
+Function TCB_IMGPSScanX.DownLanguage:Boolean; //下載多國語言檔
+begin
+ Result := True; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
+ //dnFile(HTTPSClient,FUrl+'Language.Lng','','',LngPath+'Language.Lng',FReWrite.Text,Memo1,False,DownImgStatus)
+ If not dnFile_Get(HTTPSClient,FUrl+'Language.Lng','','',LngPath+'Language.Lng',FReWrite,Memo1,False,'') Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ IF memo1.Lines.Strings[0] = '1' Then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+ Result := False;
+ Exit;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+ Result := False;
+ Exit;
+ end;
+
+end;
+
+procedure TCB_IMGPSScanX.view_image_FormCode(Path,FormCode:String;stpage,stview:integer); //用FormCode來找影像
+var i,p:integer;
+ ISB : TImageScrollBox;
+ lb : TLabel;
+ v ,v1 : Integer;
+ page : Integer;
+ List_FormCode,Err_FormCode: String;
+ iFormID : String;
+begin
+ ShowText := '影像顯示中,請稍候';
+ DataLoading(True,True);
+
+ IF FormCode = 'ShowAll' then //顯示所有的影像 (因為附件會傳空字串,所以用ShowAll)
+ begin
+ ClearView(1);
+ CreatePreViewISB(ContextList.Count);
+ For i := Stpage-1 to ContextList.Count -1 do
+ begin
+ ISB := TImageScrollBox(FindComponent(ISBName+intToStr(stview+i)));
+ ISB.AntiAliased := True;
+ if ISB.ZoomPercent > 100 then
+ ISB.AntiAliased := False;
+ ISB.LoadFromFile(Path+ContextList.Strings[i],1);
+
+ {GetScrollData(ISB,HS,VS,iRate);
+ if iRate = 0 then
+ ISB.ZoomMode := zmFittoPage
+ Else
+ ISB.ZoomPercent := iRate;
+ ISB.HorzScrollBar.Position := HS;
+ ISB.VertScrollBar.Position := VS;
+
+ List_FormCode := FileName2FormCode(ContextList.Strings[i]);
+ lb := TLabel(FindComponent('lb'+intToStr(stview)));
+ lb.Caption := Format(_Msg('第%s頁'),[Add_Zoo(i+1,3)]);
+ If List_FormCode = '' Then
+ lb.Caption := lb.Caption+'('+FormCode2FormName(List_FormCode)+')'
+ Else
+ lb.Caption := lb.Caption+'('+FormCode2FormName(List_FormCode)+'-'+List_FormCode+')';
+ Inc(Stview);
+ If ((VMode = 0) and (Stview>1))
+ or ((VMode = 1) and ((Stview>2)))
+ or ((VMode = 2) and ((Stview>4)))
+ or ((VMode = 3) and ((Stview>6)))
+ or ((VMode = 4) and ((Stview>8))) Then
+ break;
+ }
+ end;
+ FitPreViewISB;
+ end
+ Else //顯示指定FormCode的影像
+ begin
+ If (TreeView1.Selected <> nil) Then
+ begin
+ If Stpage = 0 Then
+ Stpage := 1;
+ Page := 0;
+ ClearView(stview);
+ If Stpage > ContextList.Count Then Exit;
+ For i := 0 to ContextList.Count -1 do
+ begin
+ List_FormCode := FileName2FormCode(ContextList.Strings[i]);
+ {iFormID := GetMainFormID(List_FormCode);
+ if iFormID <> '' then
+ List_FormCode := iFormID;}
+
+ Err_FormCode := 'NoCode';
+ if (List_Formcode <> '') and (not FormIDExists(List_Formcode,False,0)) then
+ Err_FormCode := 'Err';
+ IF (List_FormCode = FormCode) or (Err_FormCode=Formcode) or (FormCode2DocNo(List_FormCode) = FormCode) Then
+ begin
+ Inc(Page);
+ IF Page< Stpage Then
+ Continue;
+ ISB := TImageScrollBox(FindComponent('ISB'+intToStr(stview)));
+ ISB.AntiAliased := True;
+ if ISB.ZoomPercent > 100 then
+ ISB.AntiAliased := False;
+ ISB.LoadFromFile(Path+ContextList.Strings[i],1);
+
+ GetScrollData(ISB,HS,VS,iRate);
+ if iRate = 0 then
+ ISB.ZoomMode := zmFittoPage
+ Else
+ ISB.ZoomPercent := iRate;
+ ISB.HorzScrollBar.Position := HS;
+ ISB.VertScrollBar.Position := VS;
+ {if not SortMode then
+ begin
+ SetScrollData(MPSViewX,MPSViewX.HorzScrollBarPos,MPSViewX.VertScrollBarPos,MPSViewX.ZoomPercent);
+ end;}
+ //MPSViewX.ImageZoomMode := zmFullpage;
+ //MPSViewX.AntiAliased := True;
+ lb := TLabel(FindComponent('lb'+intToStr(stview)));
+ lb.Caption := Format(_Msg('第%s頁'),[Add_Zoo(i+1,3)]);
+ If List_FormCode = '' Then
+ lb.Caption := lb.Caption+'('+FormCode2FormName(NowCaseno,List_FormCode)+')'
+ Else
+ lb.Caption := lb.Caption+'('+FormCode2FormName(NowCaseNo,List_FormCode)+'-'+List_FormCode+')';
+ Inc(Stview);
+ end;
+ If ((VMode = 0) and (Stview>1))
+ or ((VMode = 1) and ((Stview>2)))
+ or ((VMode = 2) and ((Stview>4)))
+ or ((VMode = 3) and ((Stview>6)))
+ or ((VMode = 4) and ((Stview>8))) Then
+ break;
+ end;
+ end;
+ end;
+ ISB1Click(ISB1);
+
+
+ DataLoading(False,False);
+end;
+
+procedure TCB_IMGPSScanX.view_image_DocNo(Path,DocNo,FormID:String;Pages:integer); //用DocNo來找影像
+var i,n,p:integer;
+ ISB : TImageScrollBox;
+ lb : TLabel;
+ v ,v1 : Integer;
+ List_DocNo,Trans_DocNo,List_FormCode,Form_Page: String;
+ iDocNo : String;
+ iGroupNo,page,Ct,int1 : Integer;
+ ST1:TStringList;
+begin
+ ShowText := '影像顯示中,請稍候';
+ DataLoading(True,True);
+ST1:=TStringList.Create;
+//Display1.Lines.Clear;
+ IF DocNo = 'ShowAll' then //顯示所有的影像 (因為附件會傳空字串,所以用ShowAll)
+ begin
+ ClearView(1);
+ if GetCasePage(ImageSavePath,NowCaseno) > 30 then
+ begin
+ DataLoading(False,False);
+ Exit;
+ end;
+ CreatePreViewISB(GetCasePage(ImageSavePath,NowCaseno));
+//Showmessage(inttostr(GetCasePage(ImageSavePath,NowCaseno)));
+ Ct := 0;
+ For i := 0 to CaseDocNoList.Count-1 do
+ begin
+
+ if (FWH_category='N') and (FIs_In_Wh='Y') then
+ begin
+ if FileExists(ImageSavePath+NowCaseno+'\EditedDocDir.dat') then
+ begin
+ ST1.LoadFromFile(ImageSavePath+NowCaseno+'\EditedDocDir.dat');
+ end;
+ end;
+
+ iDocNo := CaseDocNoList.Strings[i];
+//ShowMessage('ST1.Count='+IntToStr(ST1.Count));
+ if ST1.Count<>0 then
+ begin
+ if ST1.IndexOf(iDocNo)<>-1 then
+ begin
+ end
+ else
+ begin
+ if not DocNoAppear(DocNoDir2DocNo(iDocNo)) then continue; //20170817 這不能被註解
+ end;
+ end
+ else
+ begin
+ if not DocNoAppear(DocNoDir2DocNo(iDocNo)) then continue; //20170817 這不能被註解
+ end;
+ ContextList.Clear;
+ if FileExists(Path+iDocNo+'\Context.dat') then
+ ContextList.LoadFromFile(Path+iDocNo+'\Context.dat');
+//ShowMessage('ContextList='+ContextList.Text);
+ for n := 0 to ContextList.Count - 1 do
+ begin
+
+ if (FWH_category='N') and (FIs_In_Wh='Y') then
+ begin
+ if ISExistImg(Path+iDocNo+'\'+ContextList.Strings[n]) then
+ begin
+
+ if not DocNoIs_In_WH(Copy(iDocNo,1,8)) then
+ begin
+ Continue;
+ end;
+ end;
+ end;
+
+ inc(Ct);
+ ISB := TImageScrollBox(FindComponent(ISBName+intToStr(Ct)));
+ ISB.AntiAliased := True;
+ if ISB.ZoomPercent > 100 then
+ ISB.AntiAliased := False;
+ ISB.LoadFromFile(Path+iDocNo+'\'+ContextList.Strings[n],1);
+
+ DpiResize(ISB.Graphic,36,False);
+ ISB.Redraw(true);
+
+ end;
+
+ end;
+ //if DirectoryExists(Path+'Attach') then
+ if DirectoryExists(Path+AttName) then
+ begin
+ //iDocNo := 'Attach';
+ iDocNo := AttName;
+ ContextList.Clear;
+ if FileExists(Path+iDocNo+'\Context.dat') then
+ ContextList.LoadFromFile(Path+iDocNo+'\Context.dat');
+ for n := 0 to ContextList.Count - 1 do
+ begin
+ inc(Ct);
+ ISB := TImageScrollBox(FindComponent(ISBName+intToStr(Ct)));
+ ISB.AntiAliased := True;
+ if ISB.ZoomPercent > 100 then
+ ISB.AntiAliased := False;
+ ISB.LoadFromFile(Path+iDocNo+'\'+ContextList.Strings[n],1);
+ end;
+ end;
+
+ FitPreViewISB;
+
+ end
+ Else if (DocNo <> '') and (FormID = '') then //顯示指定DocNo+組別的影像 附件傳 Attach
+ begin //顯示 文件層下的影像
+ iDocNo := DocNo;
+ ContextList.Clear;
+ if FileExists(Path+iDocNo+'\Context.dat') then
+ ContextList.LoadFromFile(Path+iDocNo+'\Context.dat');
+
+//ShowMessage('ContextList.Count='+IntToStr(ContextList.Count));
+ CreatePreViewISB(ContextList.Count);
+//ShowMessage(IntToStr(ContextList.Count));
+ int1:=0;
+//ShowMessage(BoolToStr(DocNoIs_In_WH(Copy(iDocNo,1,8)),true));
+ For i := 0 to ContextList.Count -1 do
+ begin
+ if (FWH_category='N') and (FIs_In_Wh='Y') then
+ begin
+ if ISExistImg(Path+iDocNo+'\'+ContextList.Strings[i]) then
+ begin
+
+ if not DocNoIs_In_WH(Copy(iDocNo,1,8)) and ( iDocNo<>'Attach') then
+ begin
+ inc(int1);
+ Continue;
+ end;
+ end;
+ end;
+//ShowMessage(Path+iDocNo+'\'+ContextList.Strings[i]);
+ ISB := TImageScrollBox(FindComponent(ISBName+intToStr(i+1-int1)));
+ ISB.AntiAliased := True;
+ if ISB.ZoomPercent > 100 then
+ ISB.AntiAliased := False;
+ ISB.LoadFromFile(Path+iDocNo+'\'+ContextList.Strings[i],1);
+ DpiResize(ISB.Graphic,36,False);
+ ISB.Redraw(true);
+ end;
+ FitPreViewISB;
+ end
+ Else if (FormID <> '') {and (FormID <> 'Attach')} then //顯示指定FormID的影像
+ begin
+ If (TreeView1.Selected <> nil) Then
+ begin
+ iDocNo := DocNo;
+ ContextList.Clear;
+ if FileExists(Path+iDocNo+'\Context.dat') then
+ ContextList.LoadFromFile(Path+iDocNo+'\Context.dat');
+ iGroupNo := 0;
+ page := 0;
+ Ct := 0;
+ CreatePreViewISB(Pages);
+//ShowMessage('formID page'+IntToStr(Pages)+', ContextList='+ContextList.Text);
+ For i := 0 to ContextList.Count -1 do
+ begin
+ if FileName2FormCode(ContextList.Strings[i]) = FormID then
+ begin
+ if (FWH_category='N') and (FIs_In_Wh='Y') then
+ begin
+//ShowMessage(Path+iDocNo+'\'+ContextList.Strings[i]);
+//ShowMessage(BoolToStr(ISExistImg(Path+iDocNo+'\'+ContextList.Strings[i]),true));
+ if ISExistImg(Path+iDocNo+'\'+ContextList.Strings[i]) then
+ begin
+ if not DocNoIs_In_WH(FormCode2DocNo(FormID)) then
+ Continue;
+ end;
+ end;
+ inc(Ct);
+ ISB := TImageScrollBox(FindComponent(ISBName+intToStr(Ct)));
+//ShowMessage(ISB.Name);
+ ISB.AntiAliased := True;
+ if ISB.ZoomPercent > 100 then
+ ISB.AntiAliased := False;
+ ISB.LoadFromFile(Path+iDocNo+'\'+ContextList.Strings[i],1);
+ DpiResize(ISB.Graphic,36,False);
+ ISB.Redraw(true);
+
+ //NowShowFileList.Add(ContextList.Strings[i]);
+ end;
+ end;
+ FitPreViewISB;
+ end;
+ end;
+
+ if FindComponent(ISBName+'1') <> nil then
+ begin
+ ISBClick(TImageScrollBox(FindComponent(ISBName+'1')));
+ end;
+ ISB1Click(ISB1);
+ DataLoading(False,False);
+end;
+
+Function TCB_IMGPSScanX.ShapeName2PreViewISBName(SP:TShape):String; //轉出指定PreViewISBName
+begin
+ Result := ISBName+Copy(SP.Name,3,length(SP.Name)-2);
+end;
+
+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;
+
+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;
+
+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;
+
+procedure TCB_IMGPSScanX.SpeedButton17Click(Sender: TObject);
+begin
+ ISB1.ZoomMode := zmFitHeight;
+end;
+
+procedure TCB_IMGPSScanX.SpeedButton18Click(Sender: TObject);
+begin
+ ISB1.ZoomMode := zmFitWidth;
+end;
+
+procedure TCB_IMGPSScanX.SpeedButton19Click(Sender: TObject);
+begin
+ ISB1.ZoomMode := zmOriginalSize;
+end;
+
+procedure TCB_IMGPSScanX.SpeedButton20Click(Sender: TObject);
+begin
+ ISB1.ZoomMode := zmFittoPage;
+end;
+
+procedure TCB_IMGPSScanX.SpeedButton21Click(Sender: TObject);
+begin
+ ISB1.ZoomMode := zmPercent;
+ ISB1.ZoomPercent := 50;
+end;
+
+procedure TCB_IMGPSScanX.SpeedButton22Click(Sender: TObject);
+begin
+ ISB1.ZoomMode := zmPercent;
+ ISB1.ZoomPercent := 25;
+end;
+
+procedure TCB_IMGPSScanX.SpeedButton3Click(Sender: TObject);
+begin
+ ISB1.ZoomMode := zmFullPage;
+end;
+
+Procedure TCB_IMGPSScanX.CreatePreViewISB(Count:Integer);
+var
+ ISB : TImageScrollBox;
+ Panel : TPanel;
+ i,W,H : Integer;
+ myDate : TDateTime;
+begin
+ FreePreViewISB;
+ ScrollBox1.HorzScrollBar.Visible := False;
+ W := 150;
+ H := 250;
+ for I := 1 to Count do
+ begin
+
+ if FindComponent('M_Pl'+inttostr(i))=nil then
+ begin
+ Panel := TPanel.Create(Self);
+ Panel.Name := 'M_Pl'+inttostr(i);//FormatDateTime('yyyymmddhhnnsszzz', now)
+ Panel.Left := 4;
+ Panel.Top := (i-1)*H+(6*i);
+ Panel.Height := H;
+ Panel.Width := W;
+ Panel.Parent := ScrollBox1;
+ Panel.Caption :='';
+
+ if FindComponent(ISBName+inttostr(i))=nil then
+ begin
+ ISB := TImageScrollBox.Create(Self);
+ ISB.Name := ISBName+inttostr(i);
+ ISB.Parent := Panel;
+ ISB.Align := alClient;
+ ISB.ZoomMode := zmFullPage;
+ ISB.DragMode := dmAutomatic;
+ ISB.MouseMode := mmuser;
+ ISB.OnImageClick := ISBClick;
+ ISB.OnImageMouseMove := ISBMouseMove;
+ ISB.PopupMenu := PopupMenu6;
+ ISB.OnImageMouseDown := ISBImageMouseDown;
+ ISB.OnImageMouseUp := ISBImageMouseUp;
+ ISB.OnEndDrag := ISBEndDrag;
+ ISB.OnDragDrop := ISBDragDrop;
+ ISB.OnDragOver := ISBDragOver;
+ end;
+ end;
+
+ end;
+
+end;
+
+Procedure TCB_IMGPSScanX.FreePreViewISB;
+var
+ i : Integer;
+begin
+try
+ For i:= ComponentCount -1 downto 0 do
+ begin
+ IF (Components[i] is TImageScrollBox) and (Components[i]<>nil) Then
+ begin
+ IF Pos(ISBName,Components[i].Name) > 0 Then
+ Components[i].Free;
+ end
+ Else If (Components[i] is TPanel) and (Components[i]<>nil) Then
+ begin
+ IF Pos('M_Pl',Components[i].Name) > 0 Then
+ Components[i].Free;
+ end
+ Else If (Components[i] is TShape) and (Components[i]<>nil) Then
+ begin
+ IF Pos('SP',Components[i].Name) > 0 Then
+ Components[i].Free;
+ end;
+ end;
+ Application.ProcessMessages;
+except on E: Exception do
+end;
+
+ //showmessage(inttostr(Count));
+end;
+
+Procedure TCB_IMGPSScanX.FitPreViewISB;
+var
+ i : Integer;
+ iISB : TImageScrollBox;
+ iPanel : TPanel;
+ T,H : Integer;
+begin
+ T := 0;
+ i := 1;
+
+ while FindComponent(ISBName+inttostr(i)) <> nil do
+ begin
+ iISB := TImageScrollBox(FindComponent(ISBName+inttostr(i)));
+ iISB.Parent.Height := 250;
+ iISB.Parent.Top := T+4;
+ iISB.Parent.Height := iISB.DisplayedGraphic.Height;
+ H := iISB.Parent.Height;
+ T := iISB.Parent.Top+H;
+ inc(i);
+ end;
+
+
+ {For i:= 1 to Count do
+ begin
+ if TImageScrollBox(FindComponent(ISBName+inttostr(i))) = nil then Break;
+
+
+ iISB := TImageScrollBox(FindComponent(ISBName+inttostr(i)));
+ iISB.Parent.Height := H;
+ iISB.Parent.Top := T+4;
+ iISB.Parent.Height := iISB.DisplayedGraphic.Height;
+ H := iISB.Parent.Height;
+ T := iISB.Parent.Top+H;
+ end;}
+
+end;
+
+Procedure TCB_IMGPSScanX.PaintShape(FromImg,ToImg:TImageScrollBox); //畫有被選取的影像
+var
+ i,F_No,T_No : Integer;
+ SP : TShape;
+ ISB : TImageScrollBox;
+ Function GetImgNo(iISB:TImageScrollBox):Integer;
+ begin
+ Result := strtoint(Copy(iISB.Name,length(ISBName)+1,length(iISB.Name)-length(ISBName))); //'PreViewISB'
+ end;
+begin
+ IF ToImg = nil Then //只畫單一個
+ begin
+ ISB := TImageScrollBox(FindComponent(ISBName+inttostr(GetImgNo(FromImg))));
+ if TShape(FindComponent('SP'+inttostr(GetImgNo(FromImg)))) = nil then
+ begin
+
+ SP := TShape.Create(self);
+ SP.Pen.Color := clblue;
+ SP.Pen.Width := 3;
+ SP.Parent := ScrollBox1;
+ SP.Name := 'SP'+inttostr(GetImgNo(FromImg));
+ SP.Left := ISB.Parent.Left-4;
+ SP.Top := ISB.Parent.Top -4;
+ SP.Width := ISB.Parent.Width + 8;
+ SP.Height := ISB.Parent.Height + 8;
+ end;
+ end
+ Else
+ begin
+ FreeShapeobj(nil);
+ IF GetImgNo(FromImg) <= GetImgNo(ToImg) Then
+ begin
+ F_No := GetImgNo(FromImg);
+ T_No := GetImgNo(ToImg);
+ end
+ Else
+ begin
+ F_No := GetImgNo(ToImg);
+ T_No := GetImgNo(FromImg);
+ end;
+ For i := F_No to T_No do
+ begin
+ ISB := TImageScrollBox(FindComponent(ISBName+inttostr(i)));
+ SP := TShape.Create(self);
+ SP.Pen.Color := clblue;
+ SP.Pen.Width := 3;
+ SP.Parent := ScrollBox1;
+ SP.Name := 'SP'+inttostr(i);
+ SP.Left := ISB.Parent.Left-4;
+ SP.Top := ISB.Parent.Top -4;
+ SP.Width := ISB.Parent.Width + 8;
+ SP.Height := ISB.Parent.Height + 8;
+ end;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.FreeShapeobj(SelectISB : TImageScrollBox);
+var
+ i : Integer;
+begin
+ IF SelectISB = nil then //全Free;
+ begin
+ For i:= ComponentCount -1 downto 0 do
+ begin
+ IF Components[i] is TShape Then
+ begin
+ IF Pos('SP',Components[i].Name) > 0 Then
+ Components[i].Free;
+ end;
+ end;
+ end
+ Else //只Free指定的
+ begin
+ TShape(FindComponent('SP'+Copy(SelectISB.Name,length(ISBName)+1,length(SelectISB.Name)-length(ISBName)))).Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.ISBClick(Sender : TObject);
+var
+ v,ln:Integer;
+begin
+ if (GetKeyState(VK_SHIFT) < 0) Then
+ begin
+ PaintShape(SelectISB,TImageScrollBox(Sender));
+ SelectISB := TImageScrollBox(Sender);
+ end
+ Else if (GetKeyState(VK_CONTROL) < 0) Then
+ begin
+ SelectISB := TImageScrollBox(Sender);
+ IF TShape(FindComponent('SP'+Copy(SelectISB.Name,length(ISBName)+1,length(SelectISB.Name)-length(ISBName)))) = nil Then
+ PaintShape(SelectISB,nil)
+ else
+ FreeShapeobj(SelectISB);
+ end
+ Else
+ begin
+ FreeShapeobj(nil);
+ SelectISB := TImageScrollBox(Sender);
+ PaintShape(SelectISB,nil);
+ end;
+ GetSelectImageFile;
+
+ v := length(ISBName);
+ ln := length(SelectISB.Name);
+ SelectPage := Strtoint(Copy(SelectISB.Name,v+1,ln-v));
+ ISB1.ZoomMode := zmFittoPage;
+//ShowMessage('SelectISB.FileName='+SelectISB.FileName);
+ //if SelectISB.FileName='' then exit;
+
+ ISB1.LoadFromFile(SelectISB.FileName,1);
+ if (ISB1.Graphic.ImageFormat <> ifBlackWhite) and (SmoothCB.Checked)then
+ Image_Smooth(ISB1.Graphic);
+ ISB1.Redraw(True);
+ ISB1Click(ISB1);
+end;
+
+Procedure TCB_IMGPSScanX.ISBMouseMove(Sender: TObject; Shift: TShiftState;
+ X, Y: Integer);
+begin
+ //Edit1.SetFocus;
+ if Draging then
+ begin
+ if not (TShape(FindComponent('SP'+Copy(TImageScrollBox(Sender).Name,length(ISBName)+1,length(TImageScrollBox(Sender).Name)-length(ISBName)))) = nil) then
+ begin
+ SelectISB.BeginDrag(False);
+ Draging := False;
+ end;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.ISBImageMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+var
+ v,ln:Integer;
+begin
+ if Button = TMouseButton(mbLeft) Then
+ begin
+ Draging := True;
+ //if SelectISB <> nil then
+
+ //if not Draging then
+ //begin
+
+ end;
+ //end;
+
+ {if not (TShape(FindComponent('SP'+Copy(TImageScrollBox(Sender).Name,length(ISBName)+1,length(TImageScrollBox(Sender).Name)-length(ISBName)))) = nil) then
+ begin
+ //Showmessage('SP'+Copy(TImageScrollBox(Sender).Name,length(ISBName)+1,length(TImageScrollBox(Sender).Name)));
+ if (Button = TMouseButton(mbLeft)) and (GetKeyState(VK_CONTROL) >= 0) then
+ begin
+ if SelectISB <> nil then
+ SelectISB.BeginDrag(False);
+ end;
+ end;
+ //if (TShape(FindComponent('SP'+Copy(TImageScrollBox(Sender).Name,length(ISBName)+1,length(TImageScrollBox(Sender).Name)-length(ISBName)))) = nil) then
+ //begin
+ //else
+ //begin
+ if not Draging then
+ begin
+ if (GetKeyState(VK_SHIFT) < 0) Then
+ begin
+ PaintShape(SelectISB,TImageScrollBox(Sender));
+ SelectISB := TImageScrollBox(Sender);
+ end
+ Else if (GetKeyState(VK_CONTROL) < 0) Then
+ begin
+ SelectISB := TImageScrollBox(Sender);
+ IF TShape(FindComponent('SP'+Copy(SelectISB.Name,length(ISBName)+1,length(SelectISB.Name)-length(ISBName)))) = nil Then
+ PaintShape(SelectISB,nil)
+ else
+ FreeShapeobj(SelectISB);
+ end
+ Else
+ begin
+ FreeShapeobj(nil);
+ SelectISB := TImageScrollBox(Sender);
+ PaintShape(SelectISB,nil);
+ end;
+ v := length(ISBName);
+ ln := length(SelectISB.Name);
+ SelectPage := Strtoint(Copy(SelectISB.Name,v+1,ln-v));
+ ISB1.ZoomMode := zmFittoPage;
+ ISB1.LoadFromFile(SelectISB.FileName,1);
+ ISB1Click(ISB1);
+ end;
+ //end;
+ //end
+ //Else
+ //begin
+
+ //end; }
+
+ {if (Button = TMouseButton(mbRight)) and (TShape(FindComponent('SP'+Copy(TImageScrollBox(Sender).Name,length(ISBName)+1,length(TImageScrollBox(Sender).Name)-length(ISBName)))) = nil) then
+ begin
+ //ISBClick(Sender);
+ end;
+ if (Button = TMouseButton(mbLeft)) then
+ begin
+
+ end; }
+end;
+
+procedure TCB_IMGPSScanX.ISBImageMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+begin
+ Draging := False;
+end;
+
+procedure TCB_IMGPSScanX.ISBEndDrag(Sender, Target: TObject; X, Y: Integer);
+begin
+ TreeView1Click(self);
+end;
+
+procedure TCB_IMGPSScanX.ISBDragDrop(Sender, Source: TObject; X, Y: Integer);
+var
+ fp,tp : Integer;
+begin
+ fp := FileName2ScanPage(TimageScrollBox(Source).FileName);
+ tp := FileName2ScanPage(TimageScrollBox(Sender).FileName);
+ MoveImage_Drag(DisplayPath+NowDocDir+'\',fp,tp );
+
+end;
+
+procedure TCB_IMGPSScanX.ISBDragOver(Sender, Source: TObject; X, Y: Integer;
+ State: TDragState; var Accept: Boolean);
+var
+ So : Boolean;
+begin
+ {if (TObject(Source) is TImageScrollBox) and (TObject(Sender) is TImageScrollBox) then
+ begin
+ Label3.Caption := TImageScrollBox(Source).FileName+#13+TImageScrollBox(Sender).FileName;
+ end; }
+
+ So := False;
+ if TObject(Source) is TImageScrollBox then
+ So := True;
+ Accept := True;
+ if not So
+ or (TImageScrollBox(Source).FileName = TImageScrollBox(Sender).FileName)
+ or (TreeView1.Selected.Level <> 2)
+ Then
+ Accept := False;
+end;
+
+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;
+
+Function TCB_IMGPSScanX.GetCaseFormID(Path:String):String; //取案件的主FormID
+var i,n : Integer;
+ FileFormID : String;
+begin
+ Result := '';
+ ContextList.LoadFromFile(Path+'Context.dat');
+ for I := 0 to ContextList.Count - 1 do
+ begin
+ FileFormID := FileName2FormCode(ContextList.Strings[i]);
+
+ if DivPageFormIDList.IndexOf(FileFormID)<>-1 then //20170509 跳過分案頁的formid
+ begin
+ Continue;
+ end;
+ if FindDivFormCode(FileFormID) then
+ begin
+ Result := FileFormID;
+ Break;
+ end;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.CreateFormID_FormName(Path,CaseID:String); //產生FormID_FormName.dat
+var i : Integer;
+ S : TStringlist;
+ FormID : String;
+ FormName : String;
+begin
+ S := TStringlist.Create;
+ try
+ for I := 0 to ContextList.Count - 1 do
+ begin
+ FormID := FileName2FormCode(ContextList.Strings[i]);
+ FormName := FormCode2FormName(CaseID,FormID);
+ S.Add(FormID+'_'+FormName);
+ end;
+ S.SaveToFile(Path + 'FormCode_Name.dat',TEnCoding.UTF8);
+ finally
+ S.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.CreateDocNo_DocName(Path,CaseID:String); //產生DocNo_DocName.dat
+var
+ i : Integer;
+ S : TStringlist;
+ Doc_Name : String;
+begin
+ S := TStringlist.Create;
+ try
+ DistinctDocNoinCase(Path);
+ for i := 0 to CaseDocNoList.Count - 1 do
+ begin
+ Doc_Name := CaseDocNoList.Strings[i]+'_'+DocNo2DocName(CaseID,CaseDocNoList.Strings[i]);
+ if not DocnoNeedGroup(CaseDocNoList.Strings[i]) Then //不用分組的加*號給智豪
+ Doc_Name := '*'+Doc_Name;
+ S.Add(Doc_Name);
+ end;
+ S.SaveToFile(Path+'DocNo_Name.dat',TEnCoding.UTF8);
+ finally
+ S.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.CreateIn_WH(CaseID:String); //產生In_WH.dat
+var
+ i,n : Integer;
+ DocDirList,In_WH_List : TStringlist;
+ iDocNo : String;
+begin
+ DocDirList := TStringlist.Create;
+ In_WH_List := TStringlist.Create;
+ try
+ if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then
+ DocDirList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+ for i := 0 to DocDirList.Count - 1 do
+ begin
+ iDocNo := DocNoDir2DocNo(DocDirList.Strings[i]);
+ for n := 0 to IN_WH_DocNoList.Count - 1 do
+ begin
+ if (iDocNo = IN_WH_DocNoList.Strings[n]) or (Copy(iDocNo,1,5)='ZZZZZ') then
+ begin
+ In_WH_List.Add(DocDirList.Strings[i]);
+ Break;
+ end;
+ end;
+ end;
+ In_WH_List.SaveToFile(ImageSavePath+CaseID+'\In_Wh.dat');
+
+ finally
+ DocDirList.Free;
+ In_WH_List.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.CreateDocNo_Info(CaseID:String):String; //產生 DocNo[tab]份數[tab]總頁數[tab]是否異動[換行]DocNo[tab]份數[tab]總頁數[tab]是否異動
+var
+ i,n : Integer;
+ DocDirList,DocDir_CopiesList,FileList,C_DocNoList : TStringlist;
+ DocNo,iDocDir,iDocNo,iEdit:String;
+ icopys,ipages : integer;
+ S,S1 : TStringlist;
+ Str : String;
+begin
+ DocDirList := TStringlist.Create;
+ DocDir_CopiesList := TStringlist.Create;
+ FileList := TStringlist.Create;
+ C_DocNoList := TStringlist.Create;
+ try
+ Str := '';
+ if Not FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then Exit;
+
+ DocDirList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+
+ if DocDirList.Count =0 then exit;//20170222 新加
+
+
+ DocDir_CopiesList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat');
+ while DocDirList.Count > 0 do
+ begin
+ iDocDir := DocDirList.Strings[0];
+ DocNo := DocNoDir2DocNo(iDocDir);
+ if Copy(iDocDir,1,5) <> 'ZZZZZ' then //不為自定文件
+ begin
+ //icopys := 1;
+ icopys := GetDocNoCount(CaseID,DocNo);
+ ipages := GetDocDir_Page(CaseID,iDocDir);
+ iEdit := GetDocNoEdit(CaseID,DocNo,'');
+ for i := DocDirList.Count - 1 downto 1 do
+ begin
+ iDocDir := DocDirList.Strings[i];
+ iDocNo := DocNoDir2DocNo(iDocDir);
+ if iDocNo = DocNo then
+ begin
+ //inc(icopys);
+ ipages := ipages + GetDocDir_Page(CaseID,iDocDir);
+ DocDirList.Delete(i);
+ end;
+ end;
+ if str = '' then
+ Str := Format('%s'+#9+'%d'+#9+'%d'+#9+'%s',[DocNo,iCopys,iPages,iEdit])
+ else
+ Str := Str+#13#10+ Format('%s'+#9+'%d'+#9+'%d'+#9+'%s',[DocNo,iCopys,iPages,iEdit]);
+ end;
+ DocDirList.Delete(0);
+ end;
+
+
+ finally
+ DocDirList.Free;
+ DocDir_CopiesList.Free;
+ FileList.Free;
+ C_DocNoList.Free;
+ end;
+ Result := Str;
+
+ {S := TStringlist.Create;
+ S1 := TStringlist.Create;
+ try
+ S.LoadFromFile(Path+'Context.dat');
+ S1.LoadFromFile(Path+'Context_DocNo.dat');
+ for i := 0 to CaseDocNoList.Count - 1 do
+ begin
+ iDocNo := CaseDocNoList.Strings[i];
+ iCopys := GetDocNo_Count(Path,iDocNo);
+ iPages := GetDocNo_Page(Path,iDocNo);
+ if str = '' then
+ Str := Format('%s,%d,%d',[iDocNo,iCopys,iPages])
+ else
+ Str := Str+';'+ Format('%s,%d,%d',[iDocNo,iCopys,iPages]);
+ end;
+ Result := Str;
+
+ finally
+ S.Free;
+ S1.Free;
+ end; }
+end;
+
+Function TCB_IMGPSScanX.CreateCustDocNo_Info(CaseID:String):String; //產生自訂文件 DocName[tab]份數[tab]總頁數[tab]是否異動[#13#10]DocName[tab]份數[tab]總頁數[tab]是否異動
+var
+ i,n : Integer;
+ DocDirList,FileList : TStringlist;
+ DocNo,DocName,iDocDir,iDocNo,iEdit:String;
+ icopys,ipages : integer;
+ S,S1 : TStringlist;
+ Str : String;
+begin
+ DocDirList := TStringlist.Create;
+ FileList := TStringlist.Create;
+ try
+ Str := '';
+ if Not FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then Exit;
+ DocDirList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+//ShowMessage(DocDirList.Text);
+ while DocDirList.Count > 0 do
+ begin
+ iDocDir := DocDirList.Strings[0];
+ DocNo := DocNoDir2DocNo(iDocDir);
+ if Copy(iDocDir,1,5) = 'ZZZZZ' then //是自定文件
+ begin
+ //icopys := 1;
+ DocName := GetCustomDocName(ImageSavePath+CaseID+'\',DocNo);
+ icopys := GetDocNoCount(CaseID,DocNo);
+ ipages := GetDocDir_Page(CaseID,iDocDir);
+ iEdit := GetDocNoEdit(CaseID,DocNo,DocName);
+ for i := DocDirList.Count - 1 downto 1 do
+ begin
+ iDocDir := DocDirList.Strings[i];
+ iDocNo := DocNoDir2DocNo(iDocDir);
+ if iDocNo = DocNo then
+ begin
+ //inc(icopys);
+ ipages := ipages + GetDocDir_Page(CaseID,iDocDir);
+ DocDirList.Delete(i);
+ end;
+ end;
+ DocName := GetCustomDocName(ImageSavePath+CaseID+'\',DocNo);
+ if str = '' then
+ Str := Format('%s'+#9+'%d'+#9+'%d'+#9+'%s',[DocName,iCopys,iPages,iEdit])
+ else
+ Str := Str+#13#10+ Format('%s'+#9+'%d'+#9+'%d'+#9+'%s',[DocName,iCopys,iPages,iEdit]);
+ end;
+ DocDirList.Delete(0);
+ end;
+ finally
+ DocDirList.Free;
+ FileList.Free;
+ end;
+ Result := Str;
+end;
+
+Function TCB_IMGPSScanX.CreateDocnoFrom_Info(CaseID:String):String; //產生被引進的保管袋文件資訊 Docno[tab]份數[tab]案件編號#13#10Docno[tab]份數[tab]案件編號
+var
+ i,n : Integer;
+ DocDirList,DocDir_CopiesList,FileList : TStringlist;
+ DocNo,iDocDir,iDocNo,iEdit:String;
+ FromCaseID : string;
+ icopys,ipages : integer;
+ S,S1 : TStringlist;
+ Str : String;
+begin
+ DocDirList := TStringlist.Create;
+ DocDir_CopiesList := TStringlist.Create;
+ FileList := TStringlist.Create;
+ try
+ Str := '';
+ if Not FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then Exit;
+ DocDirList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+
+ if DocDirList.Count=0 then exit;//20170222 新加
+
+
+ DocDir_CopiesList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat');
+ while DocDirList.Count > 0 do
+ begin
+ iDocDir := DocDirList.Strings[0];
+ DocNo := DocNoDir2DocNo(iDocDir);
+ if (Copy(iDocDir,1,5) <> 'ZZZZZ') then //不為自定文件
+ begin
+ //icopys := 1;
+ //icopys := GetDocNoCount(CaseID,DocNo);
+ icopys := GetDocDirCopies(CaseID,iDocDir);
+ ipages := GetDocDir_Page(CaseID,iDocDir);
+ iEdit := GetDocNoEdit(CaseID,DocNo,'');
+ FromCaseID := GetUseCase('F',ImageSavePath+CaseID+'\',iDocDir);
+ if FromCaseID <> '' then
+ begin
+ for i := DocDirList.Count - 1 downto 1 do
+ begin
+ iDocDir := DocDirList.Strings[i];
+ iDocNo := DocNoDir2DocNo(iDocDir);
+ if (iDocNo = DocNo) and (GetUseCase('F',ImageSavePath+CaseID+'\',iDocDir)<>'') then
+ begin
+ FromCaseID := GetUseCase('F',ImageSavePath+CaseID+'\',iDocDir);
+ //inc(icopys);
+ icopys := icopys + GetDocDirCopies(CaseID,iDocDir);
+ ipages := ipages + GetDocDir_Page(CaseID,iDocDir);
+ DocDirList.Delete(i);
+ end;
+ end;
+ if str = '' then
+ Str := Format('%s'+#9+'%d'+#9+'%s',[DocNo,iCopys,FromCaseID])
+ else
+ Str := Str+#13#10+ Format('%s'+#9+'%d'+#9+'%s',[DocNo,iCopys,FromCaseID]);
+ end;
+ end;
+ DocDirList.Delete(0);
+ end;
+ finally
+ DocDirList.Free;
+ DocDir_CopiesList.Free;
+ FileList.Free;
+ end;
+ Result := Str;
+end;
+
+Function TCB_IMGPSScanX.CreateCustDocNoFrom_Info(CaseID:String):String; //產生被引進的自定文件資訊 Docno[tab]份數[tab]案件編號#13#10Docno[tab]份數[tab]案件編號
+var
+ i,n : Integer;
+ DocDirList,FileList : TStringlist;
+ DocNo,DocName,iDocDir,iDocNo,iEdit:String;
+ FromCaseID : string;
+ icopys,ipages : integer;
+ S,S1 : TStringlist;
+ Str : String;
+begin
+ DocDirList := TStringlist.Create;
+ FileList := TStringlist.Create;
+ try
+ Str := '';
+ if Not FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then Exit;
+ DocDirList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+ while DocDirList.Count > 0 do
+ begin
+ iDocDir := DocDirList.Strings[0];
+ DocNo := DocNoDir2DocNo(iDocDir);
+ if Copy(iDocDir,1,5) = 'ZZZZZ' then //是自定文件
+ begin
+ //icopys := 1;
+ //icopys := GetDocNoCount(CaseID,DocNo);
+ icopys := GetDocDirCopies(CaseID,iDocDir);
+ ipages := GetDocDir_Page(CaseID,iDocDir);
+ iEdit := GetDocNoEdit(CaseID,DocNo,DocName);
+ FromCaseID := GetUseCase('F',ImageSavePath+CaseID+'\',iDocDir);
+ if FromCaseID <> '' then
+ begin
+ for i := DocDirList.Count - 1 downto 1 do
+ begin
+ iDocDir := DocDirList.Strings[i];
+ iDocNo := DocNoDir2DocNo(iDocDir);
+ if (iDocNo = DocNo) and (GetUseCase('F',ImageSavePath+CaseID+'\',iDocDir)<>'') then
+ begin
+ FromCaseID := GetUseCase('F',DisplayPath,iDocDir);
+ //inc(icopys);
+ ipages := ipages + GetDocDir_Page(CaseID,iDocDir);
+ DocDirList.Delete(i);
+ end;
+ end;
+ DocName := GetCustomDocName(ImageSavePath+CaseID+'\',DocNo);
+ if str = '' then
+ Str := Format('%s'+#9+'%d'+#9+'%s',[DocName,iCopys,FromCaseID])
+ else
+ Str := Str+#13#10+ Format('%s'+#9+'%d'+#9+'%s',[DocName,iCopys,FromCaseID]);
+ end;
+ end;
+ DocDirList.Delete(0);
+ end;
+ finally
+ DocDirList.Free;
+ FileList.Free;
+ end;
+ Result := Str;
+end;
+
+Function TCB_IMGPSScanX.CreateAttach_Info(CaseID:String):String; //產生是否有Attach Y:有 N:沒有
+begin
+ Result := 'N';
+ if GetDocDir_Page(CaseID,AttName) > 0 Then
+ Result := 'Y';
+end;
+
+Function TCB_IMGPSScanX.GetDocNoEdit(CaseID,DocNo,DocName:String):String; //取出DocNo是否被異動 (Y/N)
+var
+ i : Integer;
+ EditedDocDirList : TStringlist;
+ C_DocNoList,C_DocNameList : TStringlist;
+begin
+ Result := 'N';
+ EditedDocDirList := TStringlist.Create;
+ C_DocNoList := TStringlist.Create;
+ C_DocNameList := TStringlist.Create;
+ try
+ if FileExists(ImageSavePath+CaseID+'\EditedDocDir.dat') then
+ EditedDocDirList.LoadFromFile(ImageSavePath+CaseID+'\EditedDocDir.dat');
+ C_DocNoList.StrictDelimiter := True;
+ C_DocNoList.Delimiter := #9;
+ C_DocNoList.DelimitedText := FC_DocNoList;
+ C_DocNameList.StrictDelimiter := True;
+ C_DocNameList.Delimiter := #9;
+ C_DocNameList.DelimitedText := FC_DocNameList;
+
+ //Showmessage(C_DocNoList.Text);
+ if (DocName = '') and (C_DocNoList.IndexOf(DocNo)=-1 ) then
+ Result := 'Y';
+ if (DocName <> '') and (C_DocNameList.IndexOf(DocName)=-1) then
+ Result := 'Y';
+ for i := 0 to EditedDocDirList.Count - 1 do
+ begin
+ if (DocNo = DocNoDir2DocNo(EditedDocDirList.Strings[i])) then
+ begin
+ Result := 'Y';
+ Break;
+ end;
+ end;
+ finally
+ EditedDocDirList.Free;
+ C_DocNoList.Free;
+ C_DocNameList.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetDocNo_Count(Path,DocNo:String):Integer; //取出文件份數
+var
+ i : Integer;
+ iCopys : integer;
+ S,S1 : TStringlist;
+ iFormID : String;
+ DocFirst : Boolean;
+begin
+ Result := 0;
+ if not DocnoNeedGroup(DocNo) then
+ begin
+ Result := 1;
+ Exit;
+ end;
+
+ S := TStringlist.Create;
+ S1 := TStringlist.Create;
+ try
+ S.LoadFromFile(Path+'Context.dat');
+ S1.LoadFromFile(Path+'Context_DocNo.dat');
+ iCopys := 0;
+
+ for i := 0 to S.Count - 1 do
+ begin
+ iFormID := FileName2FormCode(S.Strings[i]);
+ DocFirst := False;
+ if FormCode2Page(iFormID) = '01' then
+ DocFirst := True;
+ if ((iCopys = 0) or DocFirst) and (Docno = S1.Strings[i]) then
+ begin
+ inc(iCopys);
+ end;
+ end;
+ Result := iCopys;
+ finally
+ S.Free;
+ S1.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetDocNo_Page(Path,DocNo:String):Integer; //取出文件總頁數
+var
+ i : Integer;
+ ipages : integer;
+ S,S1 : TStringlist;
+begin
+ Result := 0;
+ S := TStringlist.Create;
+ S1 := TStringlist.Create;
+ try
+ S.LoadFromFile(Path+'Context.dat');
+ S1.LoadFromFile(Path+'Context_DocNo.dat');
+ iPages := 0;
+ for i := 0 to S.Count - 1 do
+ begin
+ if Docno = S1.Strings[i] then
+ begin
+ inc(iPages);
+ end;
+ end;
+ Result := ipages;
+ finally
+ S.Free;
+ S1.Free;
+ end;
+end;
+
+Function TCB_IMGPSScanX.FormIDExists(FormCode:String;CheckDate:Boolean;index:Integer):Boolean; //檢查FormID是否存在
+var
+ STDate,SPDate : String;
+ Docno,Version : String;
+begin
+ Result := False;
+ If FormCode = '' then //附件不檢查
+ begin
+ Result := True;
+ Exit;
+ end;
+ if CheckDate then //要檢查日期
+ begin
+ STDate := '00000000'; //沒設定
+ SPDate := '99999999'; //沒設定
+
+ IF FindSQLData(FORM_INF_List,'T1.FORM_ID,T1.DOC_NO','T1.FORM_ID',FormCode,index,FindResult) then
+ begin
+ DocNo := GetFindResult('T1.DOC_NO');
+ Version := FormCode2Version(FormCode);
+ if FindSQLData(Doc_Inf_List,'START_DATE,STOP_DATE','DOC_NO,DOC_VERSION',DocNo+','+Version,0,FindResult) then
+ begin
+ Result := True;
+ STDate := GetFindResult('START_DATE');
+ SPDate := GetFindResult('STOP_DATE');
+ if STDate = '' then STDate := '00000000'; //沒設定
+ if SPDate = '' then SPDate := '99999999'; //沒設定
+ if (ServerDate < STDate) or (ServerDate > SPDate) then
+ Result := False;
+ end;
+ end;
+ end
+ Else
+ begin
+ Result := FindSQLData(FORM_INF_List,'T1.FORM_ID','T1.FORM_ID',FormCode,index,FindResult);
+ end;
+end;
+
+Function TCB_IMGPSScanX.Case_DocNoExists(CaseID,Docno:String):Boolean; //Docno是否存在案件裡
+var
+ i : Integer;
+ S : TStringlist;
+ iDocNo : String;
+begin
+ Result := False;
+ S := TStringlist.Create;
+ try
+ S.LoadFromFile(ImageSavePath + CaseID+'\Context.dat');
+ for i := 0 to S.Count - 1 do
+ begin
+ iDocNo := FormCode2DocNo(FileName2FormCode(S.Strings[i]));
+ if Docno = iDocNo then
+ begin
+ Result := True;
+ Break;
+ end;
+ end;
+ finally
+ S.Free;
+ end;
+
+end;
+
+procedure TCB_IMGPSScanX.CB1Click(Sender: TObject);
+begin
+ TwainShowUI := CB1.Checked;
+end;
+
+Procedure TCB_IMGPSScanX.ReSortFileName(Path:String); //檔名重新排序
+var
+ i : Integer;
+ OldName,NewName : String;
+ Filelist : TStringlist;
+begin
+ Filelist := TStringlist.Create;
+ try
+ if FileExists(Path+'Context.dat') then
+ begin
+ Filelist.LoadFromFile(Path+'Context.dat');
+ for i := 0 to Filelist.Count - 1 do
+ begin
+ OldName := Filelist.Strings[i];
+ //NewName := Add_Zoo(i+1,3)+Copy(OldName,4,length(OldName)-3);
+ NewName := Add_Zoo(i+1,3)+FileName2NoQuene_Filename(OldName);
+//ShowMessage(OldName+#10#13+NewName);
+ ReNameFile(Path+OldName,Path+NewName);
+ Filelist.Strings[i] := NewName;
+ end;
+ Filelist.SaveToFile(Path+'Context.dat');
+ ContextList.LoadFromFile(Path+'Context.dat');
+ end;
+ finally
+ Filelist.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.ReSortFileName_New(Path:String); //檔名重新排序
+var
+ i : Integer;
+ OldName,NewName : String;
+ Filelist : TStringlist;
+begin
+ Filelist := TStringlist.Create;
+ try
+ if FileExists(Path+'Context.dat') then
+ begin
+ Filelist.LoadFromFile(Path+'Context.dat');
+ for i := Filelist.Count - 1 downto 0 do
+ begin
+ OldName := Filelist.Strings[i];
+ //NewName := Add_Zoo(i+1,3)+Copy(OldName,4,length(OldName)-3);
+ NewName := Add_Zoo(i+1,3)+FileName2NoQuene_Filename(OldName);
+ ReNameFile(Path+OldName,Path+NewName);
+ Filelist.Strings[i] := NewName;
+ end;
+ Filelist.SaveToFile(Path+'Context.dat');
+ ContextList.LoadFromFile(Path+'Context.dat');
+ end;
+ finally
+ Filelist.Free;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.ReSortFileName2Scanlist(Path:String); //檔名重新排序給Scanlist.dat
+var
+ i : Integer;
+ OldName,NewName : String;
+ S : TStringlist;
+begin
+ S := TStringlist.Create;
+ try
+ if FileExists(Path+'scanlist.dat') then
+ S.LoadFromFile(Path+'scanlist.dat');
+ for i := 0 to S.Count - 1 do
+ begin
+ OldName := S.Strings[i];
+ //NewName := Add_Zoo(i+1,3)+Copy(OldName,4,length(OldName)-3);
+ NewName := Add_Zoo(i+1,3)+FileName2NoQuene_Filename(OldName);
+ //ReNameFile(Path+OldName,Path+NewName);
+ S.Strings[i] := NewName;
+ end;
+ S.SaveToFile(Path+'scanlist.dat');
+ finally
+ S.Free;
+ end;
+end;
+
+
+Function TCB_IMGPSScanX.GetOMRCheckSet : Boolean; //下載OMR檢核XML檔
+var
+ SendData : String;
+ LastDateTime : String;
+ S : TStringlist;
+begin
+ Result := True;
+ S := TStringlist.Create;
+ Try
+ if FileExists(CheckXmlPath+'OMRSet.zip') then
+ DeleteFile(CheckXmlPath+'OMRSet.zip');
+
+ LastDateTime := '00000000000000';
+ if FileExists(CheckXmlPath+'LastDateTime.dat') then
+ begin
+ S.LoadFromFile(CheckXmlPath+'LastDateTime.dat');
+ LastDateTime := S.Strings[0];
+ end;
+
+ SendData := 'settype=3&lastupdate='+LastDateTime;
+ if not dnFile_Get(HTTPSClient,Furl,'service/imgpsc/IMGPSC01/settings',SendData,CheckXmlPath+'OMRSet.zip',FReWrite,Memo1,False,DownImgStatus) then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ if FileExists(CheckXmlPath+'OMRSet.zip') then //有更新
+ begin
+ ExecuteUnZip(CheckXmlPath+'OMRSet.zip',CheckXmlPath,True);
+ S.Clear;
+ S.Add(ServerDate+GetBalance2Time(Balance));
+ S.SaveToFile(CheckXmlPath+'LastDateTime.dat');
+ end
+ Else
+ begin
+ if (Memo1.Lines.Strings[0] = 'nodata') Then //沒更新
+ begin
+ Result := True;
+ end
+ Else if (Memo1.Lines.Strings[0] = '1') Then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+ Result := False;
+ Exit;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+ Result := False;
+ Exit;
+ end;
+ end;
+
+ Finally
+ S.Free;
+ End;
+
+end;
+
+Function TCB_IMGPSScanX.GetKeyinSet : Boolean; //取登打設定
+var
+ SendData : String;
+ LastDateTime : String;
+ S : TStringlist;
+begin
+ Result := True;
+ S := TStringlist.Create;
+ Try
+ if FileExists(SitePath+'KeyinSet.zip') then
+ DeleteFile(SitePath+'KeyinSet.zip');
+
+ LastDateTime := '00000000000000';
+ if FileExists(SitePath+'LastDateTime.dat') then
+ begin
+ S.LoadFromFile(SitePath+'LastDateTime.dat');
+ LastDateTime := S.Strings[0];
+ end;
+ SendData := 'settype=2&lastupdate='+LastDateTime;
+ if not dnFile_Get(HTTPSClient,Furl,'service/imgpsc/IMGPSC01/settings',SendData,SitePath+'KeyinSet.zip',FReWrite,Memo1,False,DownImgStatus) then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ if FileExists(SitePath+'KeyinSet.zip') then //有更新
+ begin
+ ExecuteUnZip(SitePath+'KeyinSet.zip',SitePath,True);
+ S.Clear;
+ S.Add(ServerDate+GetBalance2Time(Balance));
+ S.SaveToFile(SitePath+'LastDateTime.dat');
+ end
+ Else
+ begin
+ if (Memo1.Lines.Strings[0] = 'nodata') Then //沒更新
+ begin
+ Result := True;
+ end
+ Else if (Memo1.Lines.Strings[0] = '1') Then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+ Result := False;
+ Exit;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+ Result := False;
+ Exit;
+ end;
+ end;
+
+ Finally
+ S.Free;
+ End;
+
+end;
+
+
+Function TCB_IMGPSScanX.CaseAsk(CaseID: string):Integer;
+var
+ SendData : String;
+begin
+//Memo1.Clear;
+ SendData := 'data='+HTTPEncode(UTF8Encode(FData))+'&verify='+FVerify+'&case_no='+CaseID+'&work_no='+FWork_no;
+ if (FMode = 'NSCAN') or (FMode = 'DSCAN') then
+ begin
+//ShowMessage('JJJJJ');
+ If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC05/isnew',SendData,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := -1;
+ Exit;
+ end;
+ end;
+//ShowMessage(SendData);
+
+ IF memo1.Lines.Strings[0] <> '0' Then
+ begin
+ HttpErrStr := _Msg('')+memo1.Lines.Strings[1]+'。';
+ Result := -1;
+ Exit;
+ end
+ Else
+ begin
+ if (memo1.Lines.Count < 2) then
+ begin
+ HttpErrStr := _Msg('')+'OCX:Index Count error';
+ Result := -1;
+ Exit;
+ end
+ Else
+ begin
+ if memo1.Lines.Strings[1] = '0' then
+ begin
+ Result := 0;
+ end
+ Else if memo1.Lines.Strings[1] = '1' then
+ Result := 1
+ Else
+ begin
+ HttpErrStr := _Msg('')+'OCX:Value error';
+ Result := -1;
+ Exit;
+ end;
+ end;
+ end;
+end;
+
+Function TCB_IMGPSScanX.CaseComplete(Path,CaseID:String;MainCase:Boolean):Boolean; //通知傳送完成
+var
+ OMRValue,Batchnum,Usermemo,Checkmemo,UpformID,ReMoveMemo: String;
+ Case_type,Handle_no,Format_id,Cen_Uid,Cen_Cliname,Cen_Platno,Cen_Apolyno,Case_priority : String;
+ Pages : Integer;
+ EnCodeDateTime : String;
+ SendData : String;
+ S : TStringlist;
+ i,v,v1 : Integer;
+ UpSortID : String;
+begin
+ Result := True;
+ S := TStringlist.Create;
+ try
+ EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+
+ UpformID := GetCaseFormID(Path);
+
+
+ Case_type := '0';
+ if FileExists(Path+'Context.dat') then //掃描頁數
+ begin
+ S.LoadFromFile(Path+'Context.dat');
+ Pages := S.Count;
+ end;
+ if not FileExists(ImageSavePath+CaseID+'\CaseIndex.dat') then //如果沒這個檔就重產生預設值
+ begin
+ ClearCaseIndex;
+ WriteCaseIndex(ImageSavePath+CaseID+'\');
+ end;
+ {if FileExists(ImageSavePath+CaseID+'\CaseIndex.dat') then
+ begin
+ S.LoadFromFile(ImageSavePath+CaseID+'\CaseIndex.dat');
+
+ Handle_No := S.Strings[0]; //經辦代號
+ Cen_Uid := S.Strings[1]; //被保人ID
+ Cen_Cliname := S.Strings[2]; //被保人姓名
+ Cen_Platno := S.Strings[3]; //車號
+ Case_Priority := S.Strings[4];//案件等級
+ if FMode = 'SSCAN' then //簽署章件的時候一律傳Format_ID
+ begin
+ Format_ID := S.Strings[5]; //主鍵值 (報價單號or續保單號or保單號碼or保險證號)
+ end
+ Else
+ begin
+ if (Length(UpformID) = 12) and (UpformID[2] = '-') then
+ Format_ID := S.Strings[5] //主鍵值 (報價單號or續保單號or保單號碼or保險證號)
+ else
+ Cen_Apolyno := S.Strings[5]; //強制證號
+ end;
+ if (FMode = 'MSCAN') and (length(Format_ID) = 16) and (Copy(Format_ID,1,2) = '05') then
+ begin
+ Format_ID := Copy(Format_ID,3,14); //20130606 yuu說監理站件的主鍵值為16碼且開開為05的要去掉
+ end;
+
+ end; }
+ if FileExists(ImageSavePath+CaseID+'\GetValue.xml') then //掃描帶值
+ begin
+ S.LoadFromFile(ImageSavePath+CaseID+'\GetValue.xml');
+ OMRValue := Trim(S.Text);
+ end;
+ if MainCase then //雙主約的主要案件
+ begin
+ if FileExists(ImageSavePath+CaseID+'\Batchnum.dat') then
+ begin
+ S.LoadFromFile(ImageSavePath+CaseID+'\Batchnum.dat');
+ Batchnum := Trim(S.Text);
+ end;
+ end
+ Else //雙主約的第二案件
+ begin
+ if FileExists(ImageSavePath+CaseID+'\SecBatchnum.dat') then
+ begin
+ S.LoadFromFile(ImageSavePath+CaseID+'\SecBatchnum.dat');
+ Batchnum := Trim(S.Text);
+ end;
+ end;
+ if FileExists(ImageSavePath+CaseID+'\Scan_Memo.dat') then
+ begin
+ S.LoadFromFile(ImageSavePath+CaseID+'\Scan_Memo.dat');
+ Usermemo := Trim(S.Text);
+ end;
+ if FileExists(ImageSavePath+CaseID+'\CheckMemo.dat') then
+ begin
+ S.LoadFromFile(ImageSavePath+CaseID+'\CheckMemo.dat');
+ Checkmemo := Trim(S.Text);
+ end;
+
+ if FileExists(ImageSavePath+CaseID+'\RemoveMemo.dat') then
+ begin
+ S.LoadFromFile(ImageSavePath+CaseID+'\RemoveMemo.dat');
+ ReMoveMemo := Trim(S.Text);
+ end;
+
+
+ finally
+ S.Free;
+ end;
+ case_priority:='0';
+ if (FMode = 'NSCAN') or (FMode = 'ASCAN') or (FMode = 'DSCAN') or (FMode = 'SSCAN') or (FMode = 'MSCAN') or (FMode = 'RI_SCAN') then
+ begin
+ SendData := 'checktime='+EnCodeDateTime
+ +'&work_no='+FWork_No //作業別
+ +'&case_id='+CaseID //受理編號
+ +'&form_id='+UpformID //表單代號
+ +'&scan_page='+inttostr(pages) //掃描頁數
+ +'&scan_get_value='+HTTPEncode(UTF8Encode(OMRValue)) //掃描帶值
+ +'&case_priority='+case_priority //案件等級
+ +'&batch_no='+batchnum //車隊批號
+ +'&user_memo='+HTTPEncode(UTF8Encode(usermemo)) //使用者註記
+ +'&check_memo='+HTTPEncode(UTF8Encode(checkmemo)) //檢核註記
+ +'&remove_memo='+HTTPEncode(UTF8Encode(ReMoveMemo)) //檢核移除註記
+ +'&case_type='+Case_type //進件種類 進件0 歸檔1
+ +'&handle_no='+Handle_no //經辦代號
+ +'&format_id='+Format_id //案件主鍵值
+ +'&cen_uid='+Cen_Uid //被保人ID
+ +'&cen_cliname='+HTTPEncode(UTF8Encode(Cen_Cliname)) //被保人姓名
+ +'&cen_platno='+Cen_Platno //車牌
+ +'&cen_apolyno='+Cen_Apolyno //強制證號
+ +'&has_authorize='+Has_Authorize; //是否有授權書影像
+ Showmessage(SendData);
+ if not RejectCase then
+ begin
+ If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC05',SendData,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ end
+ Else
+ begin
+ If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC06',SendData,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ end;
+
+
+ end
+ Else if FMode = 'ISCAN' then
+ begin
+ SendData := 'checktime='+EnCodeDateTime
+ +'&work_no='+FWork_No
+ +'&case_id='+CaseID
+ +'&form_id='+UpformID
+ +'&format_id='+Format_id
+ +'&scan_page='+inttostr(pages)
+ +'&user_memo='+HTTPEncode(UTF8Encode(usermemo))
+ +'&check_memo='+HTTPEncode(UTF8Encode(checkmemo))
+ +'&remove_memo='+HTTPEncode(UTF8Encode(ReMoveMemo))
+ +'&has_authorize='+Has_Authorize; //是否有授權書影像
+ //Showmessage(SendData);
+ If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC08',SendData,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ end
+ Else if FMode = 'FSCAN' then
+ begin
+ SendData := 'checktime='+EnCodeDateTime
+ +'&work_no='+FWork_No
+ +'&case_id='+CaseID
+ +'&scan_page='+inttostr(pages)
+ +'&user_memo='+HTTPEncode(UTF8Encode(usermemo))
+ +'&check_memo='+HTTPEncode(UTF8Encode(checkmemo))
+ +'&remove_memo='+HTTPEncode(UTF8Encode(ReMoveMemo))
+ +'&has_authorize='+Has_Authorize; //是否有授權書影像
+ If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC09',SendData,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ end
+ Else if FMode = 'RSCAN' then
+ begin
+ SendData := 'checktime='+EnCodeDateTime
+ +'&act=rescan'
+ +'&workno='+FWork_No
+ +'&caseid='+CaseID
+ +'&formid='+UpformID
+ +'&scanpage='+inttostr(pages)
+ // +'&areano='+FUserArea
+ +'&scangetvalue='+HTTPEncode(UTF8Encode(OMRValue))
+ +'&usermemo='+HTTPEncode(UTF8Encode(usermemo))
+ +'&checkmemo='+HTTPEncode(UTF8Encode(checkmemo))
+ +'&removememo='+HTTPEncode(UTF8Encode(ReMoveMemo))
+ +'&has_authorize='+Has_Authorize; //是否有授權書影像
+ If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC01',SendData,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ end
+ Else if FMode = 'ESCAN' then
+ begin
+ SendData := 'checktime='+EnCodeDateTime
+ +'&act=escan'
+ +'&workno='+FWork_No
+ +'&caseid='+CaseID
+ +'&formid='+UpformID
+ +'&scanpage='+inttostr(pages)
+ +'&batchnum='+batchnum
+ +'&usermemo='+HTTPEncode(UTF8Encode(usermemo))
+ +'&checkmemo='+HTTPEncode(UTF8Encode(checkmemo))
+ +'&removememo='+HTTPEncode(UTF8Encode(ReMoveMemo))
+ +'&has_authorize='+Has_Authorize; //是否有授權書影像
+ If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC01',SendData,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ end;
+
+ if Memo1.Lines.Strings[0] <> '0'then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+Memo1.Lines.Strings[1];
+ Result := False;
+ Exit;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.Timer1Timer(Sender: TObject);
+var
+ StampDate,StampTime : String;
+ i: Integer;
+begin
+ Timer1.Enabled := False;
+ //FIs_In_Wh:='Y'; /// test 記得關掉
+ //FWH_category :='N'; // test 記得關掉
+// FImgDelete := 'Y'; //test 記得關掉
+ //Showmessage('a');
+ //self.FIs_OldCase := 'Y';
+ PageLVclear := True;
+ InitialOk := False;
+
+ FMaxUploadSize:='10';
+ FJpgCompression:=50;
+ //FMode := 'DSCAN' ;
+ //FIs_In_Wh := 'Y';
+ if FIs_In_Wh = 'Y' then
+ AttName := 'Attach' //入庫附件
+ else
+ AttName := 'S_Attach'; //Smartlending 附件
+//ShowMessage('1111111');
+ if FMode = 'SAMPLESCAN' then
+ begin
+ NewScanBtn.Visible := False;
+ PJLinkedMenuSpeedButton2.Visible := False;
+ AddScanBtn.Visible := False;
+ CheckCaseBtn.Visible := False;
+ Panel18.Visible := False;
+ TransBtn.Visible := False;
+ FC6.Visible := False;
+ SampleScanBtn.Visible := True;
+ Panel1.Visible := True;
+ Panel6.Visible := True;
+ ScanDuplexCB.Visible := False; //雙面掃描
+ end
+ Else if (FMode = 'NSCAN') then
+ begin
+ Panel18.Visible := True;
+ Panel1.Visible := True;
+ Panel6.Visible := True;
+ Panel21.Visible := True;
+ Panel23.Visible := True;
+
+ AttFileGB.Visible := True;
+ Splitter2.Visible := True;
+ ScanDuplexCB.Visible := True; //雙面掃描
+ end
+ Else if FMode = 'FSCAN' then
+ begin
+ Panel1.Visible := True;
+ //Panel6.Visible := True;
+ end
+ Else
+ begin
+ Panel18.Visible := True;
+ Panel1.Visible := True;
+ Panel6.Visible := True;
+ Panel21.Visible := True;
+ Panel23.Visible := True;
+ AttFileGB.Visible := True;
+ Splitter2.Visible := True;
+ end;
+ DisplayMode(1,1,1,Panel9);
+ Application.ProcessMessages;
+ StatusBar1.Panels[0].Text := 'Ver'+GetCurrentVersionNo;
+ StatusBar1.Panels[1].Text := _Msg('登入人員:')+FUserName;
+ if FPrintyn = 'Y' then
+ PrtLB.Visible := True;
+
+ initParameter; //20170222 針對新加的parameter 作初始化參數
+ InitScrollRec;
+ If FUrl = '' then
+ begin
+ Showmessage(_Msg('URL不能為空白,請洽詢程式人員'));
+ Exit;
+ end;
+ if FUrl[length(FUrl)]<>'/' then
+ FUrl := FUrl + '/';
+
+ if FWork_no='' then
+ begin
+ Showmessage(_Msg('業務別不能為空白,請洽詢程式人員'));
+ Exit;
+ end;
+
+ if CaseIDLength = 0 then
+ begin
+ Showmessage(_Msg('案件編號長度限制不能為空白,請洽詢程式人員'));
+ //Exit; //測試時不退出
+ end;
+
+ //********清單區********
+
+ Doc_Inf_List := TStringList.Create; //Doc_Inf 清單 Docno + 版本為key
+ DM_FORM_INF_List := TStringList.Create; //DM_FORM_INF 清單 Docno + 版本為key
+ FORM_INF_List := TStringList.Create; //FORM_INF的清單
+ CHECK_RULE_INF_List := TStringList.Create; //CHECK_RULE_INF 清單
+ MEMO_INF_List := TStringList.Create; //MEMO_INF 清單
+ WORK_INF_List := TStringList.Create; //WORK_INF 清單
+ LASTEST_FORM_INF_List := TStringList.Create; // LASTEST_FORM_INF 清單
+ FindResult := TStringlist.Create; //找SQLData的結果
+
+ OMRFileList := TStringList.Create; //要OMR檢核的文件(只檢查每種Form的第一頁)
+ FormCode_PageSize := TStringList.Create; //文件的預設大小 FormCode_Height_Width
+ DocNo_NeedDoc := TStringList.Create; //有Docno時要相依的文件 DocNo_相依文件_相依文件
+ DocNo_NoDoc := TStringList.Create; //有Docno時互斥的文件 DocNo_互斥文件_互斥文件
+ DocNo_VerinCase := TStringList.Create; //案件裡的DocNo+版本的清單
+ CaseDocNoList := TStringlist.Create; //案件裡的DocNo清單
+ CaseDocNo_CopiesList := TStringlist.Create; //案件裡的DocNo份數清單
+ CaseList := TStringList.Create; //記錄掃瞄案件的順序
+ Context_DocnoList := TStringlist.Create; //案件裡的檔案Docno清單
+ ContextList := TStringlist.Create; //案件裡的檔案清單
+ AttContextList := TStringlist.Create; //案件裡的附加檔案清單
+ NoSaveBarCodeList := TStringlist.Create; //不儲存的條碼清單
+ FormID_List := TStringlist.Create; //FormID清單
+ DocNo_List := TStringlist.Create; //DocNo清單
+ NowShowFileList := TStringlist.Create; //目前顯示的影像清單
+ NowSelectFileList := TStringlist.Create; //目前被點選的影像清單
+ Cust_DocNoList := TStringlist.Create; //自行定義的文件名稱
+ IN_WH_DocNoList := TStringlist.Create; //入庫的文件清單
+ GuideFormIDList := TStringlist.Create; //要當導引頁表單清單
+ DivPageFormIDList := TStringList.Create; //要當分案頁表單清單
+ LastInitFormidList :=TStringList.Create;
+ LastAddFormidList := TStringList.Create;
+ SampleFormIDList := TStringList.Create;//20170627 加入
+ ExistImgList := TStringList.Create; //20170724 新增
+ reSizeExistImgList :=TStringList.Create; //20171012 新增
+ //********清單區********
+
+ ShowText := _Msg('資料載入中,請稍候');
+ DataLoading(True,True);
+
+ IF not GetServerDate Then
+ begin
+ Showmessage(_Msg('取主機時間時,網路發生錯誤!!')+HttpErrStr);
+ DataLoading(False,False);
+ Exit;
+ end;
+
+ if FMode='SAMPLESCAN' then
+ begin
+ IF not GetSampleInf Then //取已存在sample
+ begin
+ Showmessage(_Msg('取存在範本資訊時,網路發生錯誤!!')+HttpErrStr);
+ DataLoading(False,False);
+ Exit;
+ end;
+ end;
+
+
+
+//ShowMessage('GetServerDate '+ServerDate+' , '+ServerTime);
+ ////下載系統資訊////
+ IF not GetSetInf1 Then //取DOC_INF 文件資訊
+ begin
+ Showmessage(_Msg('取文件資訊時,網路發生錯誤!!')+HttpErrStr);
+ DataLoading(False,False);
+ Exit;
+ end;
+//ShowMessage('GetSetInf1');
+ //showmessage(self.Doc_Inf_List.Text);
+ IF not GetSetInf2 Then //取DM_FORM_INF 相依互斥資訊
+ begin
+ Showmessage(_Msg('取相依互斥資訊時,網路發生錯誤!!')+HttpErrStr);
+ DataLoading(False,False);
+ Exit;
+ end;
+//ShowMessage('GetSetInf2');
+ //Showmessage(self.Doc_Inf_List.Text);
+ IF not GetSetInf3 Then //取FORM_INF 表單資訊
+ begin
+ Showmessage(_Msg('取表單資訊時,網路發生錯誤!!')+HttpErrStr);
+ DataLoading(False,False);
+ Exit;
+ end;
+//ShowMessage('GetSetInf3');
+ IF not GetSetInf4 Then //取CHECK_RULE_INF 檢核規則資訊
+ begin
+ Showmessage(_Msg('取檢核規則資訊時,網路發生錯誤!!')+HttpErrStr);
+ DataLoading(False,False);
+ Exit;
+ end;
+ //showmessage(self.CHECK_RULE_INF_List.Text);
+//ShowMessage('GetSetInf4');
+ IF not GetSetInf5 Then //取MEMO_INF 常用片語資訊
+ begin
+ Showmessage(_Msg('取常用片語資訊時,網路發生錯誤!!')+HttpErrStr);
+ DataLoading(False,False);
+ Exit;
+ end;
+//ShowMessage('GetSetInf5');
+ //showmessage(self.MEMO_INF_List.Text);
+ IF not GetSetInf6 Then //取WORK_INF 系統參數資訊
+ begin
+ Showmessage(_Msg('取系統參數資訊時,網路發生錯誤!!')+HttpErrStr);
+ DataLoading(False,False);
+ Exit;
+ end;
+//ShowMessage('GetSetInf6');
+ //showmessage(FORM_INF_List.Text);
+ IF not GetSetInf7 Then //取LASTES_FORM_INF 系統參數資訊
+ begin
+ Showmessage(_Msg('取最新版FORMID參數資訊時,網路發生錯誤!!')+HttpErrStr);
+ DataLoading(False,False);
+ Exit;
+ end;
+//ShowMessage('GetSetInf7');
+ //Showmessage(LASTEST_FORM_INF_List.Text);
+ SetFormID_DocNo; //將FormID及Docno抽出塞入List裡 20130403增加
+ SetIn_WH_DocNo; //將要入庫的DocNo抽出來另存入list裡
+ GetDefScanIni; //取得掃描預設值及相關設定
+
+ ////下載系統資訊/////
+ if ImagePath = '' then
+ begin
+ Showmessage(_Msg('本機暫存路徑不得為空白'));
+ DataLoading(False,False);
+ Panel1.Enabled := False;
+ Panel2.Enabled := False;
+ Exit;
+ end;
+ initkscan;
+ if ImagePath[Length(ImagePath)] <> '\' then
+ ImagePath := ImagePath + '\';
+//ShowMessage('ImagePath='+ImagePath);
+ //CheckXmlPath := ImagePath+'OMRSITE\'+FWork_No;
+ CheckXmlPath := ImagePath+'OMRSITE\'; // 20200612 發現影像平台是取回所有業務的設定,所以不能有業務別目錄
+//ShowMessage('CheckXmlPath='+CheckXmlPath);
+ //SitePath := ImagePath+'Site\'+FWork_No+'\';
+ SitePath := ImagePath+'Site\'; // 20200612 發現影像平台是取回所有業務的設定,所以不能有業務別目錄
+ LngPath := ImagePath;
+ SamplePath := ImagePath+'Sample\'+FWork_No+'\';
+ ImagePath := ImagePath + 'Scantemp\';
+//ShowMessage('AA ImagePath='+ImagePath);
+ ScaniniPath :=ImagePath+FWork_No+'\'+FUserUnit +'\';
+//ShowMessage('ScaniniPath='+ScaniniPath);
+ ImagePath := ImagePath + FWork_No+'\'+FUserUnit+'\'+FMode+'\';
+ ImagePath := StringReplace(ImagePath, '\\', '\',[rfReplaceAll, rfIgnoreCase]);
+//ShowMessage('BB ImagePath='+ImagePath);
+ ImageSavePath := ImagePath;
+ str2dir(CheckXmlPath);
+ str2dir(SitePath);
+ str2dir(ImagePath);
+ str2dir(SamplePath);
+ Del_Sub_NothingPath(ImagePath); //清掉案件目錄是空的
+
+
+ LogFile1.LogFile:=LngPath+'IMGPSCheck.log';
+
+ ReduceLogFile;
+
+ LogFile1.LogToFile(logTimeString+'OCX取表data結束');
+
+ ShowText := _Msg('資料載入中,請稍候');
+ DataLoading(True,True);
+
+// if not CheckAvailable Then //檢查授權 20170218 說不用了
+// begin
+// DataLoading(False,False);
+// Panel1.Enabled := False;
+// Panel2.Enabled := False;
+// Exit;
+// end;
+
+//Button3Click(Self);
+//ShowMessage('CheckAvailable');
+ ShowText := _Msg('資料載入中,請稍候');
+ DataLoading(True,True);
+
+ ////下載語言檔///// 20170218 先拿調以便測試
+ If not DownLanguage Then
+ begin
+ Showmessage('Language File error!!'+HttpErrStr);
+ DataLoading(False,False);
+ Exit;
+ end;
+
+ InitialLanguage(Self); //載入多國語言
+ //FCaseID:='20150302180133';//測試用
+ ////下載語言檔/////
+//ShowMessage('OOOO');
+
+ if (FMode = 'RSCAN') or (FMode = 'DSCAN') or (FMode = 'ESCAN') or (FMode = 'FSCAN') then //重掃件及異動件要只能掃指定編號的件
+ begin
+ _Deltree(ImagePath);
+ str2dir(ImagePath);
+ ImageSavePath := ImagePath;
+ str2dir(ImageSavePath);
+ MkDir(ImageSavePath+FCaseID);
+ CreateEmptyCase(ImageSavePath,FCaseID);
+ MkDir(ImageSavePath+FCaseID+'\Download');
+ IF (FMode = 'ESCAN') or (FMode = 'DSCAN') then //異動件先下載影像
+ begin
+ ShowText := _Msg('案件下載中,請稍候');
+ DataLoading(True,True);
+ If not Down_Img(ImageSavePath+FCaseID+'\Download\',FCaseID) then
+ begin
+ Showmessage(FCaseID+_msg('載入異動影像時,網路發生錯誤')+HttpErrStr);
+ DataLoading(False,False);
+ Exit;
+ end;
+//Showmessage(ImageSavePath+FCaseID+'\Download\'+#10#13+ImageSavePath+FCaseID+'\');
+ Download2Case(ImageSavePath+FCaseID+'\Download\',ImageSavePath+FCaseID+'\');
+//Showmessage('aaa');
+ //Download2Case('C:\Users\Hong\Downloads\沒有括號\',ImageSavePath+FCaseID+'\');
+ if (FIs_OldCase = 'Y') then
+ begin
+ if (FWork_no='HLN') then
+ ErrFormtoCurrentForm(FCaseID,'10000001011112A','11000001011112A'); //換掉錯的FormID
+ //if not FileExists(ImageSavePath+FCaseID+'\CaseDocNo_Copies.dat') then //這個會在Download2Case時一律產生所以不能有這行 20141013
+ OldCasetoNewCase(FCaseID);
+ //ErrFormtoCurrentForm(FCaseID,'11B00005011312A','11000001011112A'); //換掉錯的FormID
+ //LoadImgFile;
+ end;
+// if (FIs_OldCase = 'Y') and (FWork_no='HLN') then //77版的
+// begin
+// ErrFormtoCurrentForm(FCaseID,'10000001011112A','11000001011112A'); //換掉錯的FormID
+// if not FileExists(ImageSavePath+FCaseID+'\CaseDocNo_Copies.dat') then
+// OldCasetoNewCase(FCaseID);
+// //ErrFormtoCurrentForm(FCaseID,'11B00005011312A','11000001011112A'); //換掉錯的FormID
+// //LoadImgFile;
+// end;
+ Create_Cust_DocDir(FCaseID); //產生外面傳入的文件
+ if FMode='ESCAN' then
+ LastInitFormidListCreate(ImageSavePath+FCaseID+'\Download\');
+ end;
+ end;
+
+//ShowMessage('GetOMRCheckSet前');
+ ////下載檢核XML//////
+ IF not GetOMRCheckSet Then
+ begin
+ Showmessage(_Msg('下載檢核定位檔案時,網路發生錯誤!!')+HttpErrStr);
+ DataLoading(False,False);
+ Exit;
+ end;
+ ////下載檢核XML/////
+//ShowMessage('GetOMRCheckSet後來');
+ ////下載登打設定/////
+ IF not GetKeyinSet Then
+ begin
+ Showmessage(_Msg('下載登打定位檔案時,網路發生錯誤!!')+HttpErrStr);
+ DataLoading(False,False);
+ Exit;
+ end;
+ ////下載登打設定/////
+//ShowMessage('GetKeyinSet');
+ if ScanDenialHint <> '' then //有設定提示字串就秀在右上角
+ begin
+ DenialTimeLb.Visible := True;
+ DenialTimeLb.Caption := Format(ScanDenialHint,[ScanDenialTime]);
+ end;
+//ShowMessage(IntToStr(ScanDpi));
+ R_W_Scanini('R'); //掃瞄設定的ini
+//ShowMessage(IntToStr(ScanDpi));
+//ShowMessage('停掉DataLoading');
+//DataLoading(False,False);
+ ScanDuplexCB.Checked := ScanDuplex;
+ if FMode <> 'SAMPLESCAN' then
+ LoadImgFile;
+ if (FMode = 'RSCAN') or (FMode = 'ESCAN') or (FMode = 'FSCAN') then
+ begin
+ if TreeView1.Items.Count > 0 then
+ begin
+ TreeView1.Selected := NewTreeNode.Item[0];
+ TreeView1click(self);
+ end;
+ end;
+ InitialOk := True;
+
+ {AttFileGB.Visible := True; //附加電子檔窗 //20120207楊玉說不在這加電子檔先拿掉
+ Splitter2.Visible := True;
+ AttFileGB.Visible := False; //附加電子檔窗
+ Splitter2.Visible := False; }
+//ShowMessage('ImageSavePath='+ImageSavePath);
+ DataLoading(False,False);
+
+ LogFile1.LogToFile(logTimeString+'OCX初始化結束');
+ LogFile1.LogToFile(logTimeString+'FUrl='+FUrl+
+ ',FCaseID='+FCaseID+
+ ',FMode='+FMode+
+ ',FModeName='+FModeName+
+ ',FWork_no='+FWork_no+
+ ',FUserID='+FUserID+
+ ',FUserName='+FUserName+
+ ',FUserUnit='+FUserUnit+
+ ',FData='+FData+
+ ',FVerify='+FVerify+
+ ',FReWrite='+FReWrite+
+ ',FLanguage='+FLanguage+
+ ',FLoanDoc_Value='+FLoanDoc_Value+
+ ',FLoanDoc_Enable='+FLoanDoc_Enable+
+ ',FUseProxy='+FUseProxy+
+ ',FC_DocNoList='+FC_DocNoList+
+ ',FC_DocNameList='+FC_DocNameList+
+ ',FFixFileList='+FFixFileList+
+ ',FIs_In_Wh='+FIs_In_Wh+
+ ',FOldCaseInfo='+FOldCaseInfo+
+ ',FPrintyn='+FPrintyn+
+ ',FIs_OldCase='+FIs_OldCase+
+ ',FCustDocYN='+FCustDocYN);
+ LogFile1.LogToFile(logTimeString+'FImgDPI='+IntToStr(FImgDPI)+
+ ',FScanColor='+ IntToStr(FScanColor)+
+ ',FFileSizeLimit='+ IntToStr(FFileSizeLimit)+
+ ',FCaseNoLength='+ IntToStr(FCaseNoLength)+
+ ',FImgDelete='+FImgDelete+
+ ',FIsExternal='+FIsExternal+
+ ',FWH_category='+FWH_category+
+ ',FCheck_main_form='+FCheck_main_form+
+ ',FMaxUploadSize='+FMaxUploadSize);
+
+end;
+
+procedure TCB_IMGPSScanX.Timer2Timer(Sender: TObject);
+begin
+ IF Panel22.Caption = ShowText+'......' Then
+ Panel22.Caption := ShowText
+ Else
+ Panel22.Caption := Panel22.Caption + '.';
+ Application.ProcessMessages;
+end;
+
+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);
+ /////訊問是否可上傳////
+ 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='補件掃描') 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;
+
+procedure TCB_IMGPSScanX.TreeView1Click(Sender: TObject);
+Var
+ v,v1,v2,v3,ln : Integer;
+ i,page : Integer;
+ F : TSearchrec;
+begin
+ ScanMode := smNew;
+ IF TreeView1.Selected = nil Then Exit;
+ Scrollbar1.Position := 1;
+ Scrollbar1.Max := 1;
+ DisplayPath := '';
+ NowCaseno := '';
+ NowDocDir := '';
+ NowDocNo := '';
+ NowFormCode := '';
+ NowFormName := '';
+ NowPage := 0;
+ NowShowFileList.Clear;
+ StatusBar1.Panels[2].Text := '';
+ ClearCaseIndex;
+ PageLv.Items.Clear; //頁數清單
+ //Panel18.Enabled:= False;
+ AttListBox.Items.Clear;
+ AddAttFileLB.Enabled := False;
+ DelAttFileLB.Enabled := False;
+ UseOldCaseLb.Visible := False;
+ PM107.Visible := False; //備註功能
+ CaseHelpBtn.Visible := False; //檢核失敗原因鈕
+ Panel5.Visible := True;
+ ContextList.Clear;
+ SortMode := false;
+ ISB1.ZoomMode := zmFullPage;
+ IF TreeView1.Selected.Parent <> nil Then
+ begin
+ if TreeView1.Selected.Parent = NewTreenode then //點在案件上
+ begin
+ //Panel18.Enabled := True;
+ PM107.Visible := True; //備註功能
+ MyTreeNode1 := TreeView1.Selected;
+ MyTreeNode2 := nil;
+ MyTreeNode3 := nil;
+ v := Posend('-',MyTreenode1.Text);
+ v1 := Length(MyTreenode1.Text);
+ NowCaseNo := Copy(TreeView1.Selected.Text,1,v-1);
+ if (FMode = 'ESCAN') and (FOldCaseInfo <> '') then
+ UseOldCaseLb.Visible := True;
+ ClearView(1);
+ DisplayPath := ImageSavePath+NowCaseNo+'\';
+ if FLoanDoc_Enable = 'Y' then
+ begin
+ AddCredit1RG.Enabled := True;
+ end;
+ ReadCaseIndex(DisplayPath);
+ If FileExists(DisplayPath+'\upload\Checkerr.ini') and (not FileExists(DisplayPath+'\upload\OMRCheckOk.dat')) Then
+ CaseHelpBtn.Visible := True;
+ IF FileExists(DisplayPath+'CaseDocNo.dat') Then
+ begin
+ CaseDocNoList.LoadFromFile(DisplayPath+'CaseDocNo.dat');
+
+
+ view_image_DocNo(DisplayPath,'ShowAll','',1);
+ end;
+ if FileExists(DisplayPath+'CustomDocNo.dat') then
+ Cust_DocNoList.LoadFromFile(DisplayPath+'CustomDocNo.dat');
+
+
+ Page := ContextList.Count;
+ For i := 1 to page do
+ begin
+ With PageLV.Items.Add do
+ begin
+ Caption := Add_Zoo(i,3);
+ end;
+ end;
+ If Page > 0 then
+ ScrollBar1.Max := page;
+ MyTreeNode1.Expand(True);
+ end
+ Else If TreeView1.Selected.Parent.Parent = NewTreenode Then //點在文件上
+ begin
+
+ MyTreeNode1 := TreeView1.Selected.Parent;
+ MyTreeNode2 := TreeView1.Selected;
+ MyTreeNode3 := nil;
+ v := Pos('-',MyTreenode1.Text);
+ NowCaseNo := Copy(MyTreenode1.Text,1,v-1);
+
+ v := Posend('{',MyTreenode2.Text);
+ v1 := Posend('}',MyTreenode2.Text);
+ v2 := posend('-',MyTreenode2.Text);
+ ln := length(MyTreenode2.Text);
+ NowDocDir := Copy(MyTreeNode2.Text,v+1,v1-v-1);
+ NowDocNo := DocNoDir2DocNo(NowDocDir);
+ page :=Strtoint(Copy(MyTreeNode2.Text,v2+1,ln-v2-1));
+ if (FMode = 'ESCAN') and (FOldCaseInfo <> '') then
+ UseOldCaseLb.Visible := True;
+ ClearView(1);
+ DisplayPath := ImageSavePath+NowCaseNo+'\';
+
+ if GetUseCase('F',DisplayPath,NowDocDir) <> '' then
+ StatusBar1.Panels[2].Text := Format('從%s引用',[GetUseCase('F',DisplayPath,NowDocDir)]);
+ if GetUseCase('T',DisplayPath,NowDocDir) <> '' then
+ StatusBar1.Panels[2].Text := Format('被%s引用',[GetUseCase('T',DisplayPath,NowDocDir)]);
+ if FLoanDoc_Enable = 'Y' then
+ begin
+ AddCredit1RG.Enabled := True;
+ end;
+ ReadCaseIndex(DisplayPath);
+ If FileExists(DisplayPath+'Checkerr.ini') and (not FileExists(DisplayPath+'OMRCheckOk.dat')) Then
+ CaseHelpBtn.Visible := True;
+ If Page > 0 then
+ ScrollBar1.Max := page;
+ For i := 1 to page do
+ begin
+ With PageLV.Items.Add do
+ begin
+ Caption := Add_Zoo(i,3);
+ end;
+ end;
+
+ If FileExists(DisplayPath+'Checkerr.ini') and (not FileExists(DisplayPath+'OMRCheckOk.dat')) Then
+ CaseHelpBtn.Visible := True;
+ IF FileExists(DisplayPath+NowDocDir+'\Context.dat') Then
+ begin
+ ContextList.LoadFromFile(DisplayPath+NowDocDir+'\Context.dat');
+ //Context_DocnoList.LoadFromFile(DisplayPath+'Context_Docno.dat');
+ view_image_DocNo(DisplayPath,NowDocDir,'',Page);
+ end;
+ if FileExists(DisplayPath+'CustomDocNo.dat') then
+ Cust_DocNoList.LoadFromFile(DisplayPath+'CustomDocNo.dat');
+ MyTreeNode1.Expand(True);
+ end
+ Else If (NewTreenode <> nil) and (TreeView1.Selected.Parent.Parent.Parent = NewTreenode) Then //點在表單上
+ begin
+ //NoteBtn.Visible := True; //備註功能
+ //Panel18.Enabled := True;
+ ClearView(1);
+ PM107.Visible := True; //備註功能
+ MyTreeNode1 := TreeView1.Selected.Parent.Parent;
+ MyTreeNode2 := TreeView1.Selected.Parent;
+ MyTreeNode3 := TreeView1.Selected;
+
+ v := Posend('-',MyTreenode1.Text);
+ NowCaseNo := Copy(MyTreenode1.Text,1,v-1);
+
+ if (FMode = 'ESCAN') and (FOldCaseInfo <> '') then
+ UseOldCaseLb.Visible := True;
+
+ v := Posend('{',MyTreenode2.Text);
+ v1 := Posend('}',MyTreenode2.Text);
+ v2 := posend('-',MyTreenode2.Text);
+ ln := length(MyTreenode2.Text);
+ NowDocDir := Copy(MyTreeNode2.Text,v+1,v1-v-1);
+ NowDocNo := DocNoDir2DocNo(NowDocDir);
+
+ v := Posend('{',MyTreenode3.Text);
+ v1 := Posend('}',MyTreeNode3.Text);
+ v2 := Posend('-',MyTreeNode3.Text);
+ ln := Length(MyTreeNode3.Text);
+ if v>0 then
+ begin
+ NowFormCode := Copy(MyTreeNode3.Text,v+1,v1-v-1);
+ if (NowFormCode = 'Attach') or (NowFormCode = 'S_Attach') then
+ NowFormCode := '';
+ NowFormName := Copy(MyTreeNode3.Text,v+1,v1-v-1);
+ page := strtoint(Copy(MyTreeNode3.Text,v2+1,ln-v2-1));
+ end
+ Else //點在附件的頁數
+ begin
+ NowFormCode := '';
+ page := 1;
+ end;
+
+ DisplayPath := ImageSavePath+NowCaseNo+'\';
+
+ if GetUseCase('F',DisplayPath,NowDocDir) <> '' then
+ StatusBar1.Panels[2].Text := Format('從%s引用',[GetUseCase('F',DisplayPath,NowDocDir)]);
+ if GetUseCase('T',DisplayPath,NowDocDir) <> '' then
+ StatusBar1.Panels[2].Text := Format('被%s引用',[GetUseCase('T',DisplayPath,NowDocDir)]);
+
+ if FLoanDoc_Enable = 'Y' then
+ begin
+ AddCredit1RG.Enabled := True;
+ end;
+ ReadCaseIndex(DisplayPath);
+ If FileExists(DisplayPath+'Checkerr.ini') and (not FileExists(DisplayPath+'OMRCheckOk.dat')) Then
+ CaseHelpBtn.Visible := True;
+ If Page > 0 then
+ ScrollBar1.Max := page;
+ For i := 1 to page do
+ begin
+ With PageLV.Items.Add do
+ begin
+ Caption := Add_Zoo(i,3);
+ end;
+ end;
+ If FileExists(DisplayPath+NowDocDir+'\Context.dat') Then
+ begin
+ ContextList.LoadFromFile(DisplayPath+NowDocDir+'\Context.dat');
+ view_image_DocNo(DisplayPath,NowDocDir,NowFormCode,Page);
+ //view_image_FormCode(DisplayPath,NowFormCode,1,1);
+ end;
+ if FileExists(DisplayPath+'CustomDocNo.dat') then
+ Cust_DocNoList.LoadFromFile(DisplayPath+'CustomDocNo.dat');
+ end;
+ MyTreeNode1.Expand(True);
+ AddAttFileLB.Enabled := True;
+ if FileExists(DisplayPath+'ATTContext.dat') then
+ begin
+ LoadAttFile(NowCaseno);
+ end;
+ end
+ Else //點在NewTreenode or MyTreenode1 上
+ begin
+ ClearView(1);
+ MyTreeNode1 := nil;
+ MyTreeNode2 := nil;
+ MyTreeNode3 := nil;
+ end;
+ TreeView1.Selected.MakeVisible;
+ CaseList.Clear;
+ if FileExists(ImageSavePath + 'CaseList.dat') then
+ CaseList.LoadFromFile(ImageSavePath + 'CaseList.dat');
+ //CountCaseno;
+ //CountCaseCount;
+ Application.ProcessMessages;
+end;
+
+procedure TCB_IMGPSScanX.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
+var
+ NewCaseno,NewDocNo,NewDocDir,NewFormCode,NewFormName : String;
+ NewPath,NewFileName:String;
+ OldFileName : String;
+ iTreeNode1,iTreeNode2,iTreeNode3: TTreeNode;
+ i,v,v1,v2 : Integer;
+ PreIndex,Precount,NowCount:Integer;
+ GoAtt : Boolean;
+ AttLv : Integer;
+begin
+ NewCaseno := '';
+ NewFormCode := '';
+ NewFormName := '';
+ Precount := MyTreeNode1.Count;
+ PreIndex := -1;
+ GoAtt := False;
+ if (MytreeNode2 <> nil) and (Pos('Attach',MyTreeNode2.Text)>0) then
+ begin
+ AttLv := TreeView1.Selected.Level;
+ GoAtt := True;
+ end;
+
+ if TTreeView(Sender).GetNodeAt(X,Y).Level =2 then
+ begin
+ iTreeNode2 := TTreeView(Sender).GetNodeAt(X,Y);
+ iTreeNode1 := iTreeNode2.Parent;
+ v := Pos('-',iTreenode1.Text);
+ v1 := Length(iTreenode1.Text);
+ NewCaseNo := Copy(iTreeNode1.Text,1,v-1);
+ v := Posend('{',iTreeNode2.Text);
+ v1 := Posend('}',iTreeNode2.Text);
+ NewDocNo := Copy(iTreeNode2.Text,v+1,v1-v-1);
+ NewPath := ImagePath+NewCaseNo+'\';
+ OldFileName := ExtractFileName(DisplayISB.FileName);
+ if Copy(NewDocNo,1,5) = 'ZZZZZ' then //自訂文件
+ begin
+ NewFileName := Add_Zoo(FileName2ScanPage(OldFileName),3)+'_'+NewDocNo+'0000000'+ExtractFileExt(OldFileName);
+ NewFormCode := NewDocNo+'0000000';
+ {ReNameFile(DisplayISB.FileName,NewPath+NewFileName);
+ ReNameContext(DisplayPath,OldFileName,NewFileName);
+ MyTreeNode2ReFresh(NowCaseno);
+ TreeView1Click(nil);}
+ end;
+ //NewFileName := Add_Zoo(GetCasePage(ImagePath,NewCaseno)+1,3)+FileName2NoQuene_Filename(OldFileName);
+ end
+ Else if TTreeView(Sender).GetNodeAt(X,Y).Level =3 then
+ begin
+ OldFileName := ExtractFileName(DisplayISB.FileName);
+ iTreeNode1 := TTreeView(Sender).GetNodeAt(X,Y).Parent.Parent;
+ iTreeNode2 := TTreeView(Sender).GetNodeAt(X,Y).Parent;
+ iTreeNode3 := TTreeView(Sender).GetNodeAt(X,Y);
+ v := Pos('-',iTreenode1.Text);
+ v1 := Length(iTreenode1.Text);
+ NewCaseNo := Copy(iTreeNode1.Text,1,v-1);
+ v := Pos('{',iTreeNode2.Text);
+ v1 := Pos('}',iTreeNode2.Text);
+ NewDocDir := Copy(iTreeNode2.Text,v+1,v1-v-1);
+
+ v := Pos('{',iTreeNode3.Text);
+ v1 := Pos('}',iTreeNode3.Text);
+ NewFormName := Copy(iTreeNode3.Text,1,v-1);
+ NewFormCode := Copy(iTreeNode3.Text,v+1,v1-v-1);
+ IF v = 0 Then
+ begin
+ NewFormCode := '';
+ v := Posend('-',iTreeNode3.Text);
+ NewFormName := Copy(iTreeNode3.Text,1,v1-1);
+ end;
+ NewPath := ImagePath+NewCaseNo+'\'+NewDocDir+'\';
+ if NewPath = DisplayPath Then //同案件
+ begin
+ if NewFormCode <> '' then
+ //NewFileName := Copy(OldFileName,1,3)+'_'+NewFormCode+ExtractFileExt(OldFileName)
+ NewFileName := Add_Zoo(GetDocDir_Page(NewCaseNo,NewDocDir),3)+'_'+NewFormCode+ExtractFileExt(OldFileName)
+ Else
+ //NewFileName := Copy(OldFileName,1,3)+ExtractFileExt(OldFileName)
+ NewFileName := Add_Zoo(GetDocDir_Page(NewCaseNo,NewDocDir),3)+ExtractFileExt(OldFileName);
+ end
+ else //不同案件
+ begin
+ if NewFormCode <> '' then
+ //NewFileName := Copy(OldFileName,1,3)+'_'+NewFormCode+ExtractFileExt(OldFileName)
+ NewFileName := Add_Zoo(GetDocDir_Page(NewCaseNo,NewDocDir),3)+'_'+NewFormCode+ExtractFileExt(OldFileName)
+ Else
+ //NewFileName := Copy(OldFileName,1,3)+ExtractFileExt(OldFileName)
+ NewFileName := Add_Zoo(GetDocDir_Page(NewCaseNo,NewDocDir),3)+ExtractFileExt(OldFileName);
+ end;
+ end;
+ //Showmessage('a');
+ for I := 0 to NowSelectFileList.Count - 1 do
+ begin
+ OldFileName := NowSelectFileList.Strings[i];
+ if NewFormCode <> '' then
+ //NewFileName := Copy(OldFileName,1,3)+'_'+NewFormCode+ExtractFileExt(OldFileName)
+ NewFileName := Add_Zoo(GetDocDir_Page(NewCaseNo,NewDocDir)+1,3)+'_'+NewFormCode+ExtractFileExt(OldFileName)
+ Else
+ //NewFileName := Copy(OldFileName,1,3)+ExtractFileExt(OldFileName)
+ NewFileName := Add_Zoo(GetDocDir_Page(NewCaseNo,NewDocDir)+1,3)+ExtractFileExt(OldFileName);
+
+ if NewCaseNo = NowCaseNo then //同案件不改順序
+ begin
+ CopyFile(PWideChar(OldFileName),PwideChar(NewPath+NewFileName),False);
+ SetContextList('A',-1,NewCaseNo,NewDocDir,NewFileName);
+ DeleteImageFile(ExtractFilePath(OldFileName),ExtractFileName(OldFileName),NowCaseNo);
+ TreeView1.Selected := MyTreeNode1;
+ //ReNameFile(DisplayPath + OldFileName,NewPath+NewFileName);
+ //ReNameContext(DisplayPath,OldFileName,NewFileName);
+ //MyTreeNode2ReFresh(NowCaseno);
+ //TreeView1Click(nil);
+ end
+ Else
+ begin
+ //Showmessage(DisplayMpsView.FileName+#13+NewPath+NewFileName);
+ ContextList.LoadFromFile(DisplayPath+'Context.dat');
+ if (ContextList.Count = 1) and ((FMode = 'NSCAN') or (FMode = 'ASCAN') or (FMode = 'DSCAN') or (FMode = 'SSCAN') or (FMode = 'MSCAN') or (FMode = 'RI_SCAN') or (FMode = 'ISCAN')) then
+ begin
+ if Messagedlg(Format(_Msg('移動後(%s)案件無影像,將刪除此案件,是否確定移動?'),[NowCaseno]),mtconfirmation,[mbyes,mbcancel],0) = mrCancel then Exit;
+ end;
+ CopyFile(PWideChar(DisplayISB.FileName),PWideChar(NewPath+NewFileName),False);
+ ContextList.LoadFromFile(NewPath+'Context.dat');
+ ContextList.Add(NewFileName);
+ ContextList.SaveToFile(NewPath+'Context.dat');
+ //Showmessage('1');
+ iTreeNode2.Text := Format(_Msg('%s-%d頁'),[NewCaseNo,GetCasePage(ImagePath,NewCaseNo)]);
+ //Showmessage('2');
+ //DrawDocItem(iTreeNode1,FORM_INF_List,NewCaseNo);
+ //DrawDocItem1(MytreeNode1,Doc_Inf_List,NewCaseno); 20140820改
+ DrawDocItem2(MytreeNode1,NewCaseno);
+ //Showmessage('3');
+ ClearErrini(NewCaseNo,iTreeNode1);
+ ContextList.LoadFromFile(DisplayPath+'Context.dat');
+ if (ContextList.Count = 1) and ((FMode = 'NSCAN') or (FMode = 'ASCAN') or (FMode = 'DSCAN') or (FMode = 'SSCAN') or (FMode = 'MSCAN') or (FMode = 'RI_SCAN') or (FMode = 'ISCAN')) then
+ begin
+ _DelTree(DisplayPath);
+ SetCaseList('D',MyTreeNode1.IndexOf(MyTreeNode2),'');
+ LoadImgFile;
+ end
+ Else
+ begin
+ ContextList.Delete(ContextList.IndexOf(ExtractFileName(DisplayISB.FileName)));
+ ContextList.SaveToFile(DisplayPath+'Context.dat');
+ DeleteFile(DisplayISB.FileName);
+ ReSortFileName(DisplayPath);
+ ClearErrini(NowCaseNo,MyTreeNode1);
+ MyTreeNode2ReFresh(NowCaseno);
+ //MyTreeNode3ReFresh(NowCaseno);
+ ContextList.LoadFromFile(DisplayPath+'Context.dat');
+ NowCount := MyTreeNode1.Count;
+ if PreCount = NowCount then
+ begin
+ TreeView1.Selected := MyTreeNode1.Item[PreIndex];
+ TreeView1Click(nil);
+ end
+ Else
+ begin
+ TreeView1.Selected := MyTreeNode1;
+ TreeView1Click(nil);
+ end;
+ end;
+ end;
+ end;
+ for I := 0 to NowSelectFileList.Count - 1 do
+ begin
+ OldFileName := NowSelectFileList.Strings[i];
+ ReSortFileName(ExtractFilePath(OldFileName));
+ end;
+ DrawDocItem2(MytreeNode1,NowCaseno);
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+ if GoAtt then
+ begin
+ GotoAttach(AttLv);
+ end;
+ //TreeView1Click(nil);
+
+end;
+
+procedure TCB_IMGPSScanX.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
+ State: TDragState; var Accept: Boolean);
+var
+ NewNode : TTreeNode;
+ ImgFormCode : String;
+ ImgDocNo : String;
+ So : Boolean;
+begin
+ ImgFormCode := FileName2FormCode(ExtractFileName(DisplayISB.FileName));
+ ImgDocNo := Path2DocDir(ExtractFilePath(DisplayISB.FileName),NowCaseno);
+ //ImgDocNo := FileName2NowDcoNo(ExtractFileName(DisplayISB.FileName),ContextList,Context_DocnoList);
+ NewNode := TTreeView(Sender).GetNodeAt(X,Y);
+ //Label3.Caption := format('%d/%s/%s',[NewNode.Level,ImgDocNo,Node2DocNo(NewNode)]);
+ So := False;
+ if TObject(Source) is TImageScrollBox then
+ So := True;
+ Accept := True;
+ if not So
+ or(NewNode=nil)
+ or((NewNode.Level<>3))
+ or((NewNode.Level =3) and (((ImgFormCode=Node3FormID(NewNode)) and (ImgDocNo = Node3DocNo(NewNode))) or (Node3DocNo(NewNode)='')))
+ or(Pos(_Msg('Attach'),Newnode.Text)>0)
+ Then
+ Accept := False;
+
+ {if not So
+ or(NewNode=nil)
+ or((NewNode.Level <>2) and (NewNode.Level<>3))
+ or((NewNode.Level =2) and ((ImgDocNo = Node2DocNo(NewNode))or(Node2DocNo(NewNode)='')or (copy(Node2DocNo(NewNode),1,5)<>'ZZZZZ')))
+ or((NewNode.Level =3) and ((ImgFormCode=Node3FormID(NewNode)) or (ImgDocNo = Node3DocNo(NewNode)) or (Node3DocNo(NewNode)='')))
+ or(Pos(_Msg('未註冊文件'),Newnode.Text)>0)
+ Then
+ Accept := False;}
+end;
+
+procedure TCB_IMGPSScanX.TreeView1KeyUp(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+begin
+ IF TreeView1.Selected.Parent <> nil Then
+ begin
+ TreeView1Click(nil);
+ end
+ else
+ begin
+ ClearView(1);
+ end;
+
+end;
+
+procedure TCB_IMGPSScanX.TreeView1MouseDown(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ IF Button = TMouseButton(MbRight) Then
+ begin
+ MDown := True;
+ If TreeView1.GetNodeAt(X,Y) = nil then Exit;
+ TreeView1.Selected := TreeView1.GetNodeAt(X,Y);
+ end;
+end;
+
+procedure TCB_IMGPSScanX.TreeView1MouseEnter(Sender: TObject);
+begin
+TreeView1.SetFocus;
+end;
+
+procedure TCB_IMGPSScanX.TreeView1MouseMove(Sender: TObject; Shift: TShiftState;
+ X, Y: Integer);
+begin
+ //TreeView1.SetFocus;
+ {UnRegisterHotKey(Handle, HotKeyId1);
+ UnRegisterHotKey(Handle, HotKeyId2); }
+end;
+
+procedure TCB_IMGPSScanX.TreeView1MouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+begin
+ IF Button = TMouseButton(MbRight) Then
+ begin
+ If TreeView1.GetNodeAt(X,Y) = nil then Exit;
+ if MDown then
+ begin
+ TreeView1Click(self);
+ TreeView1.PopupMenu.Popup(Mouse.CursorPos.X ,Mouse.CursorPos.Y);
+ end;
+ Application.ProcessMessages; //需加這行,不然有些全域變數會沒變到
+ MDown:= False;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.ViewModeBtnMouseEnter(Sender: TObject);
+begin
+ AddToolTip(TBitBtn(Sender).Parent.Handle,nil,0,Pchar(TBitBtn(Sender).Hint),nil,0,0);
+end;
+
+procedure TCB_IMGPSScanX.Set_caseid(const Value: WideString);
+begin
+ FCaseID := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_data(const Value: WideString);
+begin
+ FData := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_mode(const Value: WideString);
+begin
+ FMode := UpperCase(Value);
+end;
+
+procedure TCB_IMGPSScanX.Set_rewrite(const Value: WideString);
+begin
+ FReWrite := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_url(const Value: WideString);
+begin
+ FUrl := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_userid(const Value: WideString);
+begin
+ FUserID := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_username(const Value: WideString);
+begin
+ FUserName := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_verify(const Value: WideString);
+begin
+ FVerify := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_language(const Value: WideString);
+begin
+ FLanguage := lowercase(Value);
+ if FLanguage='zh-tw' then
+ begin
+ FLanguage:='zh_tw'
+ end;
+ if FileExists(LngPath+'Language.lng') then
+ begin
+ InitialLanguage(Self); //載入多國語言
+ end;
+end;
+
+procedure TCB_IMGPSScanX.Set_modename(const Value: WideString);
+begin
+ FModeName := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_userunit(const Value: WideString);
+begin
+ FUserUnit := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_work_no(const Value: WideString);
+begin
+ FWork_no := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_loandoc_enable(const Value: WideString);
+begin
+ FLoanDoc_Enable := Value;
+ if FLoanDoc_Enable = 'Y' then
+ AddCredit1RG.Enabled := True;
+ if FLoanDoc_Enable = 'I' then
+ begin
+ AddCredit1RG.Visible := False;
+ Panel5.Visible := False;
+ end;
+end;
+
+procedure TCB_IMGPSScanX.Set_loandoc_value(const Value: WideString);
+begin
+ FLoanDoc_Value := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_useproxy(const Value: WideString);
+begin
+ FUseProxy := UpperCase(Value);
+ if FUseProxy = 'Y' then
+ UseProxy := True; //要不要用Proxy
+
+end;
+
+procedure TCB_IMGPSScanX.Set_c_docnamelist(const Value: WideString);
+begin
+ FC_DocNameList := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_c_docnolist(const Value: WideString);
+begin
+ FC_DocNoList := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_fixfilelist(const Value: WideString);
+begin
+ FFixFileList := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_is_in_wh(const Value: WideString);
+begin
+ FIs_In_Wh := UpperCase(Value);
+end;
+
+procedure TCB_IMGPSScanX.Set_oldcaseinfo(const Value: WideString);
+begin
+ FOldCaseInfo := Value;
+end;
+
+function TCB_IMGPSScanX.Get_c_docnamelist: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_c_docnolist: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_caseid: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_data: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_fixfilelist: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_is_in_wh: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_language: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_loandoc_enable: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_loandoc_value: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_mode: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_modename: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_oldcaseinfo: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_rewrite: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_url: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_useproxy: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_userid: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_username: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_userunit: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_verify: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_work_no: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_printyn: WideString;
+begin
+
+end;
+
+procedure TCB_IMGPSScanX.Set_printyn(const Value: WideString);
+begin
+ FPrintyn := UpperCase(Value);
+end;
+
+function TCB_IMGPSScanX.Get_is_oldcase: WideString;
+begin
+
+end;
+
+procedure TCB_IMGPSScanX.Set_is_oldcase(const Value: WideString);
+begin
+ FIs_OldCase := UpperCase(Value);
+end;
+
+function TCB_IMGPSScanX.Get_custdocyn: WideString;
+begin
+
+end;
+
+procedure TCB_IMGPSScanX.Set_custdocyn(const Value: WideString);
+begin
+ FCustDocYN := UpperCase(Value);
+end;
+
+function TCB_IMGPSScanX.Get_casenolength: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_filesizelimit: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_imgdpi: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_scancolor: WideString;
+begin
+
+end;
+
+procedure TCB_IMGPSScanX.Set_casenolength(const Value: WideString);
+begin
+ if Value ='' then
+ begin
+ FCaseNoLength := 0 ;
+ CaseIDLength := FCaseNoLength;
+ end
+ else
+ begin
+ FCaseNoLength := StrToInt(Value) ;
+ CaseIDLength := FCaseNoLength;
+ end;
+
+end;
+
+procedure TCB_IMGPSScanX.Set_filesizelimit(const Value: WideString);
+begin
+//ShowMessage(Value);
+ FFileSizeLimit:=0;
+ if Value ='' then
+ begin
+ FFileSizeLimit := 5*1024;
+ end
+ else
+ begin
+ FFileSizeLimit := StrToInt(Value);
+ end;
+
+end;
+
+procedure TCB_IMGPSScanX.Set_imgdpi(const Value: WideString);
+begin
+ if Value ='' then
+ begin
+ FImgDPI := 300;
+ ScanDpi := FImgDPI;
+ end
+ else
+ begin
+ FImgDPI := StrToInt(Value);
+ ScanDpi := FImgDPI;
+ Def_ScanDpi := FImgDPI;
+ end;
+
+end;
+
+procedure TCB_IMGPSScanX.Set_scancolor(const Value: WideString);
+begin
+ if value='' then
+ begin
+ FScanColor := 0;
+ ScanColor := ifBlackWhite;
+ end
+ else
+ begin
+ FScanColor := StrToInt(Value);
+ ScanColor := ifBlackWhite;
+ end;
+
+ if FScanColor = 1 then
+ begin
+ ScanColor := ifGray256 ;
+ end;
+
+ if FScanColor = 2 then
+ begin
+ ScanColor := ifTrueColor ;
+ end;
+
+end;
+
+function TCB_IMGPSScanX.Get_imgdelete: WideString;
+begin
+
+end;
+
+procedure TCB_IMGPSScanX.Set_imgdelete(const Value: WideString);
+begin
+ FImgDelete:=Value;
+end;
+
+function TCB_IMGPSScanX.Get_check_main_form: WideString;
+begin
+
+end;
+
+function TCB_IMGPSScanX.Get_isExternal: WideString;
+begin
+
+end;
+
+procedure TCB_IMGPSScanX.Set_check_main_form(const Value: WideString);
+begin
+ FCheck_main_form := Value;
+end;
+
+procedure TCB_IMGPSScanX.Set_isExternal(const Value: WideString);
+begin
+ FIsExternal:=Value;
+end;
+
+function TCB_IMGPSScanX.Get_WH_CATEGORY: WideString;
+begin
+
+end;
+
+procedure TCB_IMGPSScanX.Set_WH_CATEGORY(const Value: WideString);
+begin
+ FWH_category:=Value;
+end;
+
+initialization
+ TActiveFormFactory.Create(
+ ComServer,
+ TActiveFormControl,
+ TCB_IMGPSScanX,
+ Class_CB_IMGPSScanX,
+ 1,
+ '',
+ OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL,
+ tmApartment);
+
+ {SetLicenseKey('5B4451E676A1D2976FBB0F3BB18341336AF114C80B5ABAE7F6926B1CAF671F44' +
+ 'BD2F098CCEDA922F6389BFAE398DA6AEE67F97EEA0C17234C20D75C12173DBDA' +
+ '594924D56DD8E342F454389C836AD880BB4352CA3BE62C4933B1BA3828E7462C' +
+ '60514F2ECDAD322E6128D841F12D24DA00B623106D3F08EBCAA917D8A97CAA34' +
+ '3D65F2DA567316457395BF9123EE53DF235D181F191A5712DBB27735284AA92D' +
+ '5DFA0C8308308505F384707E900C6063F53F1BFF4C6972607955D1AE517B19D0' +
+ '82CDD16301885403AD229D57BAEF98C056F31430861E5F68F339D658D72E1F92' +
+ '63899412EC2D07891FE3AFD35F3E4A4390B2F0A8A1BF1B7D6160E5F1CC009B17'); }
+ SetLicenseKey('4B2CF65E8C2A86CE8A0DD0F6A7DB03BC0B0126168B48AE4C27EBD78CAE75CF0F' +
+ 'A612190861E0D99F6FAE3ED97AC1941B5E97843CFFCF705A3787989072D4EB2C' +
+ 'AE6CAB3F5B69B86616ACC8A37AD6A2AB21C7BDD5C9AE1EDF9E4193D353805C9A' +
+ '403631CE8A3D0803FEBB1BE4C209CE7A63B1298EF080EB34B8628CED567D2B68' +
+ 'E777FAC58E2E32B7411FC217A04336231D1E861A93474759DAA6EDF53F6EB632' +
+ 'A3055229A52F3053FB844754741409022DDE3DFB19473510F2BE63328E74BE20' +
+ 'A6A29AA24878F91ADA9DF8CE1F320AF4DAF58EBF95D9BE761D70EEA274E19475' +
+ '1C15948B184264C5C49E60493F3BCD2FFAE2CA8B021D00B96F45550C5F050D8A');
+
+
+ SetLicenseKey('A6A94A8D91B08A9D58F300C0573EA9EF1B9DB0BF69B90E13B958DB4CB6B44F5A' +
+ '4EE9CB22C9A68C2D07ED52ED4D13C755D890E4074996755361E6CDE2A6F1B563' +
+ '5DDC8999AC4D71FB092EA9F1F87BFA25694FBF0D6D250087D2B39629713FCCB0' +
+ 'D0A83135BC14FC63A4E8331CFF9E24C45C2D9CFD837EB70BAFDB79A75B7B97D5' +
+ 'E9EB271685118C29D90A7C85E7793908989E295DA50021C795A448366026E975' +
+ 'F49EA75B721B80427B99E5CF24A225FB498C07946ED7B806B483654C00D85C66' +
+ 'E34215CA3EDEF1D4C3F5896090E97E1E2C9752BA2D5B49EE58CF19A0D374077F' +
+ '6D13B90B6FED22D9EBC3AD6CDC76E595E08725BF2E12B8EF30A524A2E00504DF');
+end.
diff --git a/CB_IMGPSScan_TLB.dcu b/CB_IMGPSScan_TLB.dcu
index 6893441..c03fdc4 100644
--- a/CB_IMGPSScan_TLB.dcu
+++ b/CB_IMGPSScan_TLB.dcu
Binary files differ
diff --git a/ErrList.dcu b/ErrList.dcu
index 98d8a0d..940e48b 100644
--- a/ErrList.dcu
+++ b/ErrList.dcu
Binary files differ
diff --git a/OldCaseInfo.dcu b/OldCaseInfo.dcu
index 2bddf14..991a270 100644
--- a/OldCaseInfo.dcu
+++ b/OldCaseInfo.dcu
Binary files differ
diff --git a/OldCaseInfo.dfm b/OldCaseInfo.dfm
index b9a4292..20d98b7 100644
--- a/OldCaseInfo.dfm
+++ b/OldCaseInfo.dfm
@@ -37,7 +37,7 @@
Align = alClient
Caption = 'Panel2'
TabOrder = 0
- object ListView1: TListView
+ object OldCaseLV: TListView
Left = 1
Top = 42
Width = 738
@@ -80,23 +80,27 @@
Align = alTop
TabOrder = 1
OnDblClick = Panel1DblClick
- object BitBtn3: TBitBtn
+ object LoadBt: TBitBtn
Left = 16
Top = 10
Width = 75
Height = 25
Caption = #36617#20837#24433#20687
+ DoubleBuffered = True
+ ParentDoubleBuffered = False
TabOrder = 0
- OnClick = BitBtn3Click
+ OnClick = LoadBtClick
end
- object BitBtn4: TBitBtn
+ object OldExitBt: TBitBtn
Left = 136
Top = 10
Width = 75
Height = 25
Caption = #38626#38283
+ DoubleBuffered = True
+ ParentDoubleBuffered = False
TabOrder = 1
- OnClick = BitBtn4Click
+ OnClick = OldExitBtClick
end
end
object Memo1: TMemo
@@ -138,23 +142,27 @@
TabOrder = 2
Text = 'Edit1'
end
- object BitBtn1: TBitBtn
+ object ImportBt: TBitBtn
Left = 11
Top = 13
Width = 75
Height = 25
Caption = #24341#29992
+ DoubleBuffered = True
+ ParentDoubleBuffered = False
TabOrder = 0
- OnClick = BitBtn1Click
+ OnClick = ImportBtClick
end
- object BitBtn2: TBitBtn
+ object ExitBt: TBitBtn
Left = 113
Top = 13
Width = 75
Height = 25
Caption = #38626#38283
+ DoubleBuffered = True
+ ParentDoubleBuffered = False
TabOrder = 1
- OnClick = BitBtn2Click
+ OnClick = ExitBtClick
end
end
object Panel4: TPanel
@@ -165,7 +173,7 @@
Align = alLeft
Caption = 'Panel2'
TabOrder = 1
- object GroupBox1: TGroupBox
+ object CaseListGB: TGroupBox
Left = 1
Top = 1
Width = 247
@@ -245,7 +253,7 @@
end
object Panel22: TPanel
Left = 196
- Top = 248
+ Top = 241
Width = 387
Height = 41
Caption = #36039#26009#36617#20837#20013','#35531#31245#20399
diff --git a/OldCaseInfo.pas b/OldCaseInfo.pas
index e2cbf92..799e966 100644
--- a/OldCaseInfo.pas
+++ b/OldCaseInfo.pas
@@ -15,20 +15,20 @@
TOldCaseInfoForm = class(TForm)
Notebook1: TNotebook;
Panel2: TPanel;
- ListView1: TListView;
+ OldCaseLV: TListView;
Panel1: TPanel;
Panel3: TPanel;
- BitBtn1: TBitBtn;
- BitBtn2: TBitBtn;
+ ImportBt: TBitBtn;
+ ExitBt: TBitBtn;
Panel4: TPanel;
- GroupBox1: TGroupBox;
+ CaseListGB: TGroupBox;
CheckListBox1: TCheckListBox;
Panel5: TPanel;
Panel6: TPanel;
Panel7: TPanel;
Splitter1: TSplitter;
- BitBtn3: TBitBtn;
- BitBtn4: TBitBtn;
+ LoadBt: TBitBtn;
+ OldExitBt: TBitBtn;
ElMemoryCertStorage: TElMemoryCertStorage;
ElWinCertStorage: TElWinCertStorage;
Memo1: TMemo;
@@ -38,10 +38,10 @@
ScrollBox1: TScrollBox;
Edit1: TEdit;
HTTPSClient: TElHTTPSClient;
- procedure BitBtn4Click(Sender: TObject);
- procedure BitBtn1Click(Sender: TObject);
- procedure BitBtn3Click(Sender: TObject);
- procedure BitBtn2Click(Sender: TObject);
+ procedure OldExitBtClick(Sender: TObject);
+ procedure ImportBtClick(Sender: TObject);
+ procedure LoadBtClick(Sender: TObject);
+ procedure ExitBtClick(Sender: TObject);
procedure Panel1DblClick(Sender: TObject);
procedure HTTPSClientCertificateValidate(Sender: TObject;
X509Certificate: TElX509Certificate; var Validate: Boolean);
@@ -178,7 +178,7 @@
iDocNo,iDocName,iDocDir :String;
iDocPage : Integer;
begin
- GroupBox1.Caption :=Format('�s��%s�i�ޥΤ��',[UseCaseID]);
+ CaseListGB.Caption :=Format(_Msg('�s��%s�i�ޥΤ��'),[UseCaseID]);
CheckListBox1.Items.Clear;
DocDirList := TStringlist.Create;
try
@@ -401,7 +401,7 @@
FileList.SaveToFile(iPath+'Context.dat',Tencoding.UTF8);
DocDirList.Strings[n] := CDocNo;
DocDirList.SaveToFile(iPath+'DocDir.dat',Tencoding.UTF8);
- FormCode_NameList.Strings[n] := CFormID+'_���v��b���w��';
+ FormCode_NameList.Strings[n] := CFormID+'_'+_Msg('���v��b���w��');
FormCode_NameList.SaveToFile(iPath+'FormCode_Name.dat',Tencoding.UTF8);
end;
end;
@@ -412,7 +412,7 @@
//MoveFile(PWideChar(iPath),PWideChar(iiPath));
DocNoList.Strings[i] := StringReplace(DocNoList.Strings[i],iDocNo,CDocNo,[rfReplaceAll]);
DocNoList.SaveToFile(ImageSavePath+CaseID+'\'+UseCaseID+'\CaseDocNo.dat',Tencoding.UTF8);
- DocNo_NameList.Strings[i]:= CDocDir+'_���v��b���w��';
+ DocNo_NameList.Strings[i]:= CDocDir+'_'+_Msg('���v��b���w��');
DocNo_NameList.SaveToFile(ImageSavePath+CaseID+'\'+UseCaseID+'\DocNo_Name.dat',Tencoding.UTF8);
//SetRecordEditedDocDir('A',CaseID,CDocNo);
end;
@@ -732,7 +732,7 @@
end;
-procedure TOldCaseInfoForm.BitBtn1Click(Sender: TObject);
+procedure TOldCaseInfoForm.ImportBtClick(Sender: TObject);
var
i,v,v1 : Integer;
DocDir,DocName : String;
@@ -757,35 +757,35 @@
end;
if not HaveCase then
begin
- Showmessage('�|����ܭn�ޤJ�����');
+ Showmessage(_Msg('�|����ܭn�ޤJ�����'));
Exit;
end;
//Showmessage(OldDocDirList.Text);
ModalResult := MrOk;
end;
-procedure TOldCaseInfoForm.BitBtn2Click(Sender: TObject);
+procedure TOldCaseInfoForm.ExitBtClick(Sender: TObject);
begin
Notebook1.ActivePage := 'CaseInfo';
end;
-procedure TOldCaseInfoForm.BitBtn3Click(Sender: TObject);
+procedure TOldCaseInfoForm.LoadBtClick(Sender: TObject);
var
i : Integer;
OldCaseInfoList,Caseinfolist : TStringlist;
iCaseID,UseBS_No,UseIS_Old : String;
begin
- if ListView1.ItemIndex = -1 then
+ if OldCaseLV.ItemIndex = -1 then
begin
Showmessage(_msg('�|�����ñ���ѽs��'));
Exit;
end;
- GroupBox1.Caption :=Format('�s��%s�i�ޥΤ��',[UseCaseID]);
+ CaseListGB.Caption :=Format(_Msg('�s��%s�i�ޥΤ��'),[UseCaseID]);
CheckListBox1.Items.Clear;
Notebook1.ActivePage := 'View';
- UseCaseID := ListView1.Selected.Caption;
- UseBS_No := ListView1.Selected.SubItems.Strings[1];
- UseIS_Old := UpperCase(ListView1.Selected.SubItems.Strings[2]);
+ UseCaseID := OldCaseLV.Selected.Caption;
+ UseBS_No := OldCaseLV.Selected.SubItems.Strings[1];
+ UseIS_Old := UpperCase(OldCaseLV.Selected.SubItems.Strings[2]);
OldCaseInfoList := TStringlist.Create;
Caseinfolist := TStringlist.Create;
try
@@ -837,7 +837,7 @@
end;
-procedure TOldCaseInfoForm.BitBtn4Click(Sender: TObject);
+procedure TOldCaseInfoForm.OldExitBtClick(Sender: TObject);
begin
ModalResult := MrCancel;
end;
--
Gitblit v1.8.0