curtis
9小時前 0756bf12d10cf1b7f78c571de0a9ad69cbaeb7ca
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
[Lines 1 - 1051]
unit CB_IMGPSScanImp;
//TEST
{$WARN SYMBOL_PLATFORM OFF}
 
interface
 
uses
  EnScan,   { for Scanner }
  EnDiGrph, { for TDibGraphic }
  EnMisc,   { for MinFloat }
  EnTifGr,  { for TTifGraphic }
  {$IFDEF Production}
  CB_IMGPSScan_TLB,
  {$ENDIF}
  {$IFDEF Test}
  CB_IMGPSScan_test_TLB,
  {$ENDIF}
 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ActiveX, AxCtrls, 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,IIS_Ftp, SBSimpleFTPS;
Type
  TTransMode =(tsHttp,tsFtp,tsNone);
 
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;
    Button5: TButton;
    FTPSClient1: TElSimpleFTPSClient;
    Button6: TButton;
    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);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  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 是不區分
    ////////傳入參數///////
 
    TransMode : TTransMode;   //用何種方式上傳檔案
    //********Http參數********
    HttpErrStr : String; //錯誤訊息
    //********Http參數********
 
    //********Ftp參數*********
    FFtpIP : String;
    FFtpID : String;
    FFtpPwd : String;
    FFtpRootPath : String;
    FFtpExtraPath : String;
    FFtpPort : Integer;
    FFtpProtocol : TFtpProtocol;
    //********Ftp參數*********
 
    //********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; //掃描時的檔名
    DownFileErrStr : 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相關************
 
    //*********FTP相關************
    Function GetFtpinfo(CaseID,Action:String):Boolean;
    Procedure SetFtpInfo;     //餵入FTP資訊
    Function FtpCaseComplete(SendData:String):Boolean;
    //*********FTP相關************
 
    //*******轉換區*********
    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 DownLoadImage(Path,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 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 }
 
----------------------------------------
 
[Lines 9996 - 10021]
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;
 
----------------------------------------