curtis
13小時前 0756bf12d10cf1b7f78c571de0a9ad69cbaeb7ca
CB_IMGPSScanImp.pas
@@ -1,5 +1,5 @@
unit CB_IMGPSScanImp;
//TEST
{$WARN SYMBOL_PLATFORM OFF}
interface
@@ -9,37 +9,47 @@
  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, CB_IMGPSScan_TLB, StdVcl, VCLUnZip, VCLZip, Encryp,
  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;
  Xmltool,inifiles,printers,IdHashMessageDigest, idHash, LogFile,ShellApi,
  SBSocket,IIS_Ftp, SBSimpleFTPS;
Type
  TTransMode =(tsHttp,tsFtp,tsNone);
var
  Ch_WriteNote : Boolean;
  RejectCase : Boolean;
  ErrIndex : Integer;
  //*****¹w³]°Ï*****//
    Def_DeviceDelete : Boolean;  //ªÅ¥Õ­¶§R°£±Ò°Ê
    Def_DeviceDeleteSize : Integer;  //ªÅ¥Õ­¶Size
    Def_ScannerReverse : Boolean; //¬O§_»Ý¤Ï¬Û
    Def_BoardClear : Boolean; //¬O§_²M¶ÂÃä
    Def_ScanDpi : Integer;    //±½ºËDPI
    Def_ScanDuplex : Boolean; //¬O§_Âù­±±½ºË
    Def_ScanRotate : Integer; //±½ºË®É±ÛÂਤ«×
    Def_ScanDeskew : Boolean; //¬O§_¶É±×ÁB¥¿
    Def_ScanBright : Integer; //«G«×
    Def_ScanContrast : Integer; //¹ï¤ñ
    Def_ScanImgShowMode : Integer; //0:²M·¡¼v¹³ 1:¤£²M·¡¼v¹³ 2:¤£Åã¥Ü
    Def_ScanImgSetUse : Boolean; //¬O§_¨Ï¥Î«G«×¹ï¤ñ³]©w
  //*****¹w³]°Ï*****//
  //*****預設區*****//
    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';
{Àò¨ú¦Û¨­ª©¥»¸¹©Ò»Ý­n }
{獲取自身版本號所需要 }
type
  TVersionLanguage = (vlArabic, vlBulgarian, vlCatalan, vlTraditionalChinese,
     vlCzech, vlDanish, vlGerman, vlGreek, vlUSEnglish, vlCastilianSpanish,
@@ -58,7 +68,7 @@
   $0418, $0419, $041A, $041B, $041C, $041D, $041E, $041F, $0420, $0421,
   $0804, $0807, $0809, $080A, $080C, $0810, $0813, $0814, $0816, $081A,
   $0C0C, $100C, $0000);
{Àò¨ú¦Û¨­ª©¥»¸¹©Ò»Ý­n end}
{獲取自身版本號所需要 end}
type
@@ -72,8 +82,8 @@
    ImageCount : LongInt;
  end;
  TOMRErrInfo = record
    Display : Boolean;  //¬O§_Åã¥Ü
    Ignore : Boolean; //¥i§_§R°£
    Display : Boolean;  //是否顯示
    Ignore : Boolean; //可否刪除
    Info : String;
    Mode : String;
  end;
@@ -111,7 +121,6 @@
    Splitter1: TSplitter;
    Panel3: TPanel;
    Label7: TLabel;
    TreeView1: TTreeView;
    Panel6: TPanel;
    CB1: TCheckBox;
    ScanDuplexCB: TCheckBox;
@@ -145,7 +154,6 @@
    ISB2: TImageScrollBox;
    imgp1: TPanel;
    lb1: TLabel;
    ISB1: TImageScrollBox;
    Memo1: TMemo;
    Display1: TMemo;
    Panel22: TPanel;
@@ -181,7 +189,6 @@
    PM402: TMenuItem;
    PM403: TMenuItem;
    PM404: TMenuItem;
    HTTPSClient: TElHTTPSClient;
    ElWinCertStorage: TElWinCertStorage;
    ElMemoryCertStorage: TElMemoryCertStorage;
    Panel5: TPanel;
@@ -189,8 +196,6 @@
    Panel11: TPanel;
    SampleScanBtn: TBitBtn;
    WNoteBtn: TBitBtn;
    Panel13: TPanel;
    CaseHelpBtn: TBitBtn;
    PopupMenu1: TPopupMenu;
    PM101: TMenuItem;
    N12: TMenuItem;
@@ -248,13 +253,31 @@
    Edit1: TEdit;
    PM110: TMenuItem;
    Image1: TImage;
    PrtLb: TLabel;
    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);
@@ -370,14 +393,27 @@
    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;
    ////////¶Ç¤J°Ñ¼Æ/////////
    ////////傳入參數/////////
    FUrl : String;
    FCaseID : String;
    FMode : String;        //NSCAN:·s¥ó;ESCAN:­×§ï
    FMode : String;        //NSCAN:新件;ESCAN:修改 20170306 DSCAN:被配合待掃瞄清單使用
    FModeName : String;
    FWork_no : String;
    FUserID : String;
@@ -387,122 +423,150 @@
    FVerify : String;
    FReWrite : String;
    FLanguage : String;
    FLoanDoc_Value : String; //·s¼W±Â«H¨÷ªº­È
    FLoanDoc_Enable : String; //·s¼W±Â«H¨÷¬O§_¥i²§°Ê
    FUseProxy : String; //¬O§_¨Ï¥ÎProxy
    FC_DocNoList : String; //¥~­±¶Ç¨Ó­n·s¼Wªº¤å¥ó½s¸¹
    FC_DocNameList : String; //¥~­±¶Ç¨Ó­n·s¼Wªº¦Û­q¤å¥ó
    FFixFileList : String; //­nÂê¦íªºÀɦW
    FIs_In_Wh : String; //¬O§_¥uÅã¥Ü¤J®w¤å¥ó  (Y:¥uÅã¥Ü¤J®w N:¥uÅã¥Ü«D¤J®w ªÅ¥Õ:³£Åã¥Ü)
    FOldCaseInfo : String; //ÂÂ¥ó¸ê°T  CaseID_year[tab]CaseID_year
    FPrintyn : String; //¬O§_¥i¦C¦L
    FIs_OldCase : String; //¬O§_¬O®ײĤ@¦¸¶i¤J
    FCustDocYN : String; //¬O§_¥i¦Û­q¤å¥ó
    ////////¶Ç¤J°Ñ¼Æ///////
    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; //¿ù»~°T®§
    //********Http°Ñ¼Æ********
    TransMode : TTransMode;   //用何種方式上傳檔案
    //********Http參數********
    HttpErrStr : String; //錯誤訊息
    //********Http參數********
    //********ini°Ñ¼Æ********
    DeviceDelete : Boolean;     //ªÅ¥Õ­¶§R°£±Ò°Ê
    DeviceDeleteSize : Integer;  //ªÅ¥Õ­¶Size
    ScannerReverse : Boolean; //¬O§_»Ý¤Ï¬Û
    BoardClear : Boolean; //¬O§_²M¶ÂÃä
    ScanDpi : Integer;    //±½ºËDPI
    ScanDuplex : Boolean; //¬O§_Âù­±±½ºË
    ScanRotate : Integer; //±½ºË®É±ÛÂਤ«×
    ScanDeskew : Boolean; //¬O§_¶É±×ÁB¥¿
    ScanBright : Integer; //«G«×
    ScanContrast : Integer; //¹ï¤ñ
    ScanImgShowMode : Integer; //0:²M·¡¼v¹³ 1:¤£²M·¡¼v¹³ 2:¤£Åã¥Ü
    ScanImgSetUse : Boolean; //¬O§_¨Ï¥Î«G«×¹ï¤ñ³]©w
    //********Ftp參數*********
    FFtpIP : String;
    FFtpID : String;
    FFtpPwd : String;
    FFtpRootPath : String;
    FFtpExtraPath : String;
    FFtpPort : Integer;
    FFtpProtocol : TFtpProtocol;
    //********Ftp參數*********
    //********ini°Ñ¼Æ********
    //********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ªº®É¶¡®t
    ScanDenialTime : String; //°±¤î¶i¥ó®É¶¡
    //********®É¶¡********
    ScanDenialHint : String; //±½´yÅã¥Ü´£¿ô¦r¦ê
    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;         //¦h°ê»y¨¥Àɥؿý
    CheckXmlPath : String;   //Àˮ֥ΪºXml¦s©ñ¥Ø¿ý
    SitePath : String;      //µn¥´¦ì¸m(¤Áñ¦W¥Î)
    SamplePath : String;     //½d¥»¥Ø¿ý
    TransPath : String;     //ÀɮפW¶Çªº¸ô®|(¸É¥R¥ó·|¦h¤@¼h¥Ø¿ý)
    //********¸ô®|********
    ScanSaveFilename : String; //±½ºËªºÀɦW
    ScanCaseno : String;  //±½ºË®Éªº®×¸¹
    ScanDocDir : String;  //±½´y®Éªº¤å¥ó¥N¸¹¥Ø¿ý
    //********²M³æ°Ï********
    Doc_Inf_List : TStringList;  //Doc_Inf ²M³æ
    DM_FORM_INF_List :TstringList;  //DM_FORM_INF ²M³æ
    FORM_INF_List : TStringList; //FORM_INFªº²M³æ
    CHECK_RULE_INF_List : TStringList;  //CHECK_RULE_INF  ²M³æ
    MEMO_INF_List : TStringList;  //MEMO_INF ²M³æ
    WORK_INF_List : TStringList;  //WORK_INF ²M³æ
    LASTEST_FORM_INF_List : TStringList;  // LASTEST_FORM_INF ²M³æ
    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ªºµ²ªG
    CaseList : TStringList;    //°O¿ý±½ºË®×¥óªº¶¶§Ç
    Context_DocnoList : TStringlist; //®×¥ó¸ÌªºDocno²M³æ
    CaseDocNoList : TStringlist;  //®×¥ó¸ÌªºDocNo²M³æ(¤£­«½Æ)
    CaseDocNo_CopiesList : TStringlist; //®×¥ó¸ÌªºDocNo¥÷¼Æ²M³æ
    ContextList : TStringlist; //®×¥ó¸ÌªºÀɮײM³æ
    OMRFileList : TStringList; //­nOMRÀˮ֪º¤å¥ó(¥uÀˬd¨CºØFormªº²Ä¤@­¶)
    Cust_DocNoList : TStringlist; //¦Û¦æ©w¸q¤å¥ó¦WºÙ
    IN_WH_DocNoList : TStringlist; //¤J®wªº¤å¥ó²M³æ
    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; //¤å¥óªº¹w³]¤j¤p  FormCode_Height_Width
    DocNo_NeedDoc : TStringList; //¦³Docno®É­n¬Û¨Ìªº¤å¥ó   DocNo_¬Û¨Ì¤å¥ó_¬Û¨Ì¤å¥ó
    DocNo_NoDoc : TstringList; //¦³Docno®É¤¬¥¸ªº¤å¥ó   DocNo_¤¬¥¸¤å¥ó_¤¬¥¸¤å¥ó
    DocNo_VerinCase : TStringlist; //®×¥ó¸ÌªºDocNo+ª©¥»ªº²M³æ
    FormCode_PageSize : TStringList; //文件的預設大小  FormCode_Height_Width
    DocNo_NeedDoc : TStringList; //有Docno時要相依的文件   DocNo_相依文件_相依文件
    DocNo_NoDoc : TstringList; //有Docno時互斥的文件   DocNo_互斥文件_互斥文件
    DocNo_VerinCase : TStringlist; //案件裡的DocNo+版本的清單
    NoSaveBarCodeList : TStringlist; //¤£Àx¦sªº±ø½X²M³æ
    FormID_List : TStringlist;    //FormID ²M³æ  20130403 ¦]¬°­ìFormCode2Docno·|«ÜºC..§âFormID©â¥X¨Ó
    DocNo_List : TStringlist;     //DocNo ²M³æ  20130403 ¦]¬°­ìFormCode2Docno·|«ÜºC..§âDocNo©â¥X¨Ó
    NowShowFileList : TStringlist;  //¥Ø«eÅã¥Üªº¼v¹³²M³æ
    NowSelectFileList : TStringlist; //¥Ø«e³QÂI¿ïªº¼v¹³²M³æ
    GuideFormIDList : TStringlist; //­n·í¾É¤Þ­¶ªí³æ²M³æ
    //********²M³æ°Ï********
    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; //¥Ø«eÅã¥Üªº®×¥ó½s¸¹
    NowDocNo : String;  //¥Ø«eªº¤å¥ó½s¸¹
    NowDocDir : String; //¥Ø«eªº¤å¥ó¥Ø¿ý
    NowFormCode : String; //¥Ø«eÅã¥Üªºªí³æ½s¸¹
    NowFormName : String; //¥Ø«eÅã¥Üªºªí³æ¦WºÙ
    NowPage : Integer;   //¥Ø«eÂI¿ïªº­¶½X
    DisplayPath : String; //¥Ø«eÅã¥Üªº¥Ø¿ý
    //********Åã¥Ü°Ï********
    //********顯示區********
    NowCaseno : String; //目前顯示的案件編號
    NowDocNo : String;  //目前的文件編號
    NowDocDir : String; //目前的文件目錄
    NowFormCode : String; //目前顯示的表單編號
    NowFormName : String; //目前顯示的表單名稱
    NowPage : Integer;   //目前點選的頁碼
    DisplayPath : String; //目前顯示的目錄
    //********顯示區********
    //******¯Á¤Þ¸ê®Æ*********
    Case_loandoc : String; //¬O§_·s¼W±Â«H¨÷
    //******¯Á¤Þ¸ê®Æ*********
    //******索引資料*********
    Case_loandoc : String; //是否新增授信卷
    //******索引資料*********
    //********¤Q¦r©w¦ìÂI¸ê°T********
    UpLPoint : Tpoint;  //¥ª¤W¤èªº¤Q¦rÂI
    UpRPoint : Tpoint;  //¥k¤W¤èªº¤Q¦rÂI
    DownLPoint : Tpoint;  //¥ª¤U¤èªº¤Q¦rÂI
    DownRPoint : Tpoint;  //¥k¤U¤èªº¤Q¦rÂI
    Point_Width : String;   //¤Q¦rÂIªº¼e
    Point_Height : String;   //¤Q¦rÂIªº°ª
    //********¤Q¦r©w¦ìÂI¸ê°T********
    //********十字定位點資訊********
    UpLPoint : Tpoint;  //左上方的十字點
    UpRPoint : Tpoint;  //右上方的十字點
    DownLPoint : Tpoint;  //左下方的十字點
    DownRPoint : Tpoint;  //右下方的十字點
    Point_Width : String;   //十字點的寬
    Point_Height : String;   //十字點的高
    //********十字定位點資訊********
    CaseIDLength : Integer; //®×¥ó½s¸¹ªø«×
    FormIDLength : Integer; //FormIDªø«×
    DocNoLength : Integer;  //Docnoªø«×
    CaseIDLength : Integer; //案件編號長度
    FormIDLength : Integer; //FormID長度
    DocNoLength : Integer;  //Docno長度
    PEFileName : String; //±½´y®ÉªºÀɦW
    PEFileName : String; //掃描時的檔名
    DownFileErrStr : String;  //下載影像時發生的錯誤
    ISB : TImageScrollBox;
    ScanInfo    : TScanInfo;
@@ -510,274 +574,287 @@
    MpsBarcodeinf : TMpsBarcodeinf;
    ScanMode : TScanMode;
    Mpskey : String;
    Seg : Integer; //Åã¥ÜªºÃä¬É­È
    VMode : Integer; //Åã¥Üªºindex
    NowClick : Integer;   //¥Ø«eÂI¨ìªº«ö¶s¥\¯àIndex
    ScanIP : String;  //±½ºËºÝªºIP
    DisplayISB : TImageScrollBox; //³QÂI¨ìªº¼v¹³
    SelectISB : TImageScrollBox; //³QÂI¨ìªºÁY¹Ï
    SelectPage : Integer; //³QÂI¨ìªº­¶¼Æ
    Seg : Integer; //顯示的邊界值
    VMode : Integer; //顯示的index
    NowClick : Integer;   //目前點到的按鈕功能Index
    ScanIP : String;  //掃瞄端的IP
    DisplayISB : TImageScrollBox; //被點到的影像
    SelectISB : TImageScrollBox; //被點到的縮圖
    SelectPage : Integer; //被點到的頁數
    NewTreeNode,MyTreeNode1,MyTreeNode2,MyTreeNode3 : TTreenode;
    InitialOk : Boolean; //¸ê°T¸ü¤J¬O§_§¹¦¨
    ShowText : String; //DataLoading®É­n¨q¥Xªº°T®§
    Ext : String; //ªþÀɦW  .tif .jpg
    SafePixel : Integer;  //OMR®e§Ô»~®t­ÈÂI¼Æ
    OMRErrInfo : Array[1..11] of TOMRErrInfo;  //Àˮ֪º¤è¦¡¤Î°T®§
    ScrollRec : Array[1..8] of TScrollRec; //ÂsÄýµ¡ªºScroll°O¿ý
    RecHozPos,RecVerPos : Integer;  //°O¿ýMPSViewX1ªºScrollBar¦ì¸m
    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; //¥hª½½u®É¾î½u§PÂ_ªº®e§Ô­È
    BarCodeRotate : Integer; //±ø½X­nÂ઺¨¤«×
    HaveAppDoc : Boolean; //¸É¥þ®É¬O§_¦³¸É¤J­n«O®Ñ
    Bt : Integer; //去直線時橫線判斷的容忍值
    BarCodeRotate : Integer; //條碼要轉的角度
    HaveAppDoc : Boolean; //補全時是否有補入要保書
    PageLVclear : Boolean;
    CaseCount,PageCount : Integer; //Á`®×¥ó¶q¤ÎÁ`­¶¼Æ
    CaseCount,PageCount : Integer; //總案件量及總頁數
    Item : TMenuItem;
    SampleAnchorMode : String; //½d¥»±½ºË¤Q¦r½uªº¼Ò¦¡  NONE:µL;ANCHOR:¤Q¦r;FRAME:Ã䮨
    DownImgStatus : String;  //¤U¸ü¼v¹³ªºª¬ºA(NO_DATA:¨S¸ê®Æ;NO_FILE:¨S¼v¹³)
    TransForm_Field : String; //­n¥ÎOMR¤Ä¿ï½T»{¬O§_Âà´«FORMIDªºÄæ¦ì¦WºÙ
    NowWork_No : String; //²{¦bªº§@·~§O
    CropBarcode : String; //­n¤Á¼v¹³ªº±ø½X
    Has_Authorize :String; //¬O§_¦³±ÂÅv®Ñ¼v¹³
    AttName : String; //¥¼ÂkÃþ¥Ø¿ý¦WºÙ
    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);   //µe­±¸ü¤J¦h°ê»y¨¥
    Procedure InitialLanguage(Sender: TObject);   //畫面載入多國語言
    //Function _Msg(S:String):String;
    //*********SQL¬ÛÃö************
    Procedure SetSQLData(ColumeStr:String;FromList,ToList:TStringlist); //§âSQL­È¶ë¤J
    Function GetSQLData(TableList:TStringlist;Colname:String;colNo:Integer):String; //¨ÌÄæ¦ì¤Î¯Á¤Þ¨ú­È
    Function FindSQLData(TableList:TStringlist;ColumeStr,KeyColumeStr,KeyStr:String;ColNo:Integer;Var ResultList:TStringlist):Boolean; //§ä«ü©wªº¸ê®Æ
    //*********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¬ÛÃö************
    //*********SQL相關************
    //*********FTP相關************
    Function GetFtpinfo(CaseID,Action:String):Boolean;
    Procedure SetFtpInfo;     //餵入FTP資訊
    Function FtpCaseComplete(SendData:String):Boolean;
    //*********FTP相關************
    //*******Âà´«°Ï*********
    Function FindDivFormCode(FormCode:String):Boolean; //§ä¦³¨S¦³¤À®×ªº±ø½X
    Function FormCode2FormName(CaseID,FormCode:String):String; //¥ÎFormCodeÂন¤å¥ó¦WºÙ
    Function FormCode2FileName(FormCode:String;List:TStrings):String; //¥ÎFormCode§ä¥XÀɦW(²Ä¤@­¶)
    Function FileName2FormCode(FileName:String):String; //±qÀɦW¨ú¥XFormCode
    Function FileName2FormName(CaseID,FileName:String):String; //±qÀɦW¨ú¥X¤å¥ó¦WºÙ
    Function FileName2ScanPage(FileName:String):Integer; //±qÀɦW¨ú¥X±½ºË­¶¼Æ
    Function FileName2NoQuene_Filename(FileName:String):String; //¨ú¥X¨S¦³§Ç¸¹ªºÀɦW
    Function FileName2Index(FileName:String):Integer; //±qÀɦW¨ú¥X¦bContextListªº§Ç¸¹
    Function FileName2NowDcoNo(FileName:String;CtList,DNList:TStrings):String; //±qÀɦW¨ú¥XÂkÄݪº¤å¥ó¥N¸¹
    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¦WºÙ
    Function DocNo2FileName(DocNo:String;List:TStrings):String; //¥ÎDocNo§ä¥XÀɦW(²Ä¤@­¶)
    Function FormCode2WorkNo(FormCode:String):String; //¥ÎFormCode¨ú¥X§@·~§O
    Function DocNo2WorkNo(DocNo:String):String; //¥ÎDocNo¨ú¥X§@·~§O
    Function DocNo2DocNoDir(Path,DocNo:String):String;    //DocNoÂনDocNo(¥÷¼Æ)¥Ø¿ý
    Function DocNoDir2DocNo(DocNoDir:String):String; //DocNo(¥÷¼Æ)¥Ø¿ýÂনDocNo
    Function DocNoDir2Index(Path,DocNoDir:String):Integer; //DocNo(¥÷¼Æ)¥Ø¿ýÂনindex
    //*******轉換區*********
    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; //¬O§_¬O»Ý¤À¥÷¼Æªº¤å¥ó¥N¸¹
    Function DocNoNeedDiv(DocNo:String):Boolean; //是否是需分份數的文件代號
    //Function CaseNo2DocNo(CaseNo:String):TStringList;
    Function CaseNode2Info(Node:TTreeNode;Mode:Char):String;   //®×¥óNode¨ú®×¥ó½s¸¹  Mode: I:Caseno;P:Page
    Function DocNode2Info(Node:TTreeNode;Mode:Char):String;     //¤å¥óNode¨ú¤å¥ó¥N¸¹ Mode: I:Docno;N:Docname;P:Page;G:Group
    Function FormNode2Info(Node:TTreeNode;Mode:Char):String;   //ªí³æNode¨úªí³æ¥N¸¹  Mode: I:FormID;N:FormName;P:Page
    //*******Âà´«°Ï*********
    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); //¤W¤@­¶
    Procedure NextPage(Page:Integer); //¤U¤@­¶
    Procedure PriorPage(Page:Integer); //上一頁
    Procedure NextPage(Page:Integer); //下一頁
    Function DocNoExistsinTree(CaseNode:TTreeNode;DocNo:String):Boolean; //DocNo¬O§_¤v¦s¦b¾ð¸Ì
    Function DocnoNeedGroup(DocNo:String):Boolean; //¶Ç¤JªºDocNo¬O§_»Ý¤À²Õ
    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'¼g¤J
    Procedure GetDefScanIni; //¨ú±o±½ºËªº¹w³]­È
    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; //¨ú¥D¾÷®É¶¡
    Function GetSetInf1 : Boolean; //¨ú¨t²Î³]©w¸ê°Tmode1  DOC_INF
    Function GetSetInf2 : Boolean; //¨ú¨t²Î³]©w¸ê°Tmode2  DM_FORM_INF
    Function GetSetInf3 : Boolean; //¨ú¨t²Î³]©w¸ê°Tmode3  FORM_INF
    Function GetSetInf4 : Boolean; //¨ú¨t²Î³]©w¸ê°Tmode4  CHECK_RULE_INF
    Function GetSetInf5 : Boolean; //¨ú¨t²Î³]©w¸ê°Tmode5  MEMO_INF
    Function GetSetInf6 : Boolean; //¨ú¨t²Î³]©w¸ê°Tmode6  WORK_INF
    Function GetSetInf7 : Boolean; //¨ú¨t²Î³]©w¸ê°Tmode7  LASTESTFORM_INF
    Procedure SetFormID_DocNo; //±NFormID¤ÎDocno©â¥X¨Ó¥t¦s¤Jlist¸Ì
    Procedure SetIn_WH_DocNo; //±N­n¤J®wªºDocNo©â¥X¨Ó¥t¦s¤Jlist¸Ì
    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);  //¸ê®Æ¸ü¤J¤¤­n°±¤îÂI¿ïªº°Ê§@
    procedure ClearView(stkv:Integer); //²M°£ÂsÄýµ¡ªº¼v¹³
    Function DrawDocItem2(CaseNode : TTreenode;Caseno:String):Boolean;  //µe¥X¤å¥ó¦WºÙªºTree
    Procedure DataLoading(Loading,UseTimer:Boolean);  //資料載入中要停止點選的動作
    procedure ClearView(stkv:Integer); //清除瀏覽窗的影像
    Function DrawDocItem2(CaseNode : TTreenode;Caseno:String):Boolean;  //畫出文件名稱的Tree
    Procedure initkscan; //Àˬd±½´y¾¹ªº¥\¯à
    procedure LoadImgFile; //¸ü¤J®×¥ó
    procedure LoadImgFile1; //¸ü¤J®×¥ó
    Procedure DistinctFormCode(CaseID:String); //®×¥ó¸ÌªºFormCode¨ú¥X²Ä¤@­¶
    Function OMRCheckCase(CaseID:String):Boolean; //OMRÀË®Ö
    Procedure OMRErr2ini(CaseID,Reason,FileName,Site,RelaFileName,RelaSite,Anchor,Anchor1:String;Del,Ingnore,Display:Boolean); //OMRÀˮ֥¢±Ñ¼g¤Jini
    Procedure OMRErrini2List(CaseID:String;ErrlistForm : TErrlistForm); //OMRÀˮ֥¢±Ñ±qini¼g¤JListView
    Function DownLanguage:Boolean;  //¤U¸ü¦h°ê»y¨¥ÀÉ
    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;  //¸ß°Ý¬O§_¥i¤W¶Ç  (-1:¥¢±Ñ;0:¥i¥H;1:¤£¦æ;)
    Function CaseComplete(Path,CaseID:String;MainCase:Boolean):Boolean;  //³qª¾¶Ç°e§¹¦¨
    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; //²£¥Í«OºÞ³U¤å¥ó DocNo[tab]¥÷¼Æ[tab]Á`­¶¼Æ[tab]¬O§_²§°Ê[´«¦æ]DocNo[tab]¥÷¼Æ[tab]Á`­¶¼Æ[tab]¬O§_²§°Ê
    Function CreateCustDocNo_Info(CaseID:String):String; //²£¥Í¦Û­q¤å¥ó DocName[tab]¥÷¼Æ[tab]Á`­¶¼Æ[tab]¬O§_²§°Ê[#13#10]DocName[tab]¥÷¼Æ[tab]Á`­¶¼Æ[tab]¬O§_²§°Ê
    Function CreateAttach_Info(CaseID:String):String; //²£¥Í¬O§_¦³Attach Y:¦³ N:¨S¦³
    Function CreateDocnoFrom_Info(CaseID:String):String; //²£¥Í³Q¤Þ¶iªº«OºÞ³U¤å¥ó¸ê°T  Docno[tab]¥÷¼Æ[tab]®×¥ó½s¸¹#13#10Docno[tab]¥÷¼Æ[tab]®×¥ó½s¸¹
    Function CreateCustDocNoFrom_Info(CaseID:String):String; //²£¥Í³Q¤Þ¶iªº¦Û©w¤å¥ó¸ê°T  Docno[tab]¥÷¼Æ[tab]®×¥ó½s¸¹#13#10Docno[tab]¥÷¼Æ[tab]®×¥ó½s¸¹
    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; //¨ú¥XDocNo¬O§_³Q²§°Ê (Y/N)
    Function GetDocNo_Count(Path,DocNo:String):Integer;  //¨ú¥X¤å¥ó¥÷¼Æ
    Function GetDocNo_Page(Path,DocNo:String):Integer;  //¨ú¥X¤å¥óÁ`­¶¼Æ
    Function FormIDExists(FormCode:String;CheckDate:Boolean;index:Integer):Boolean;  //ÀˬdFormID¬O§_¦s¦b¤Î¬O§_­nÀˬd±Ò¥Î°±¥Î¤é´Á
    Function Case_DocNoExists(CaseID,Docno:String):Boolean; //Docno¬O§_¦s¦b®×¥ó¸Ì
    Procedure ReSortFileName_New(Path:String); //ÀɦW­«·s±Æ§Ç
    Procedure ReSortFileName(Path:String); //ÀɦW­«·s±Æ§Ç
    Procedure ReSortFileName2Scanlist(Path:String); //ÀɦW­«·s±Æ§Çµ¹Scanlist.dat
    Function GetOMRCheckSet:Boolean;  //¤U¸üOMRÀË®ÖXMLÀÉ
    Function GetKeyinSet : Boolean; //¨úµn¥´³]©w
    Procedure CheckRule2OMRErrInfo;   //ÀˮֳW«h¶ñ¤JOMRErrINFo Record
    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); // §R°£ÀÉ®×
    Procedure DeleteFormCodeFile(CaseID,DocDir,FormID:String);  //§R°£«ü©wFormID¤å¥ó
    Function DeleteDocNoFile(Path,DocNo:String):Boolean;  //§R°£«ü©wDocNo¤å¥ó
    Procedure DeleteShowFile(Path:String); //§R°£Åã¥Ü¤¤ªº¼v¹³
    Function GetDataDocNoPage(MainDocNo,MainVersion:String):Integer;  //¨ú°O¿ýªº¤å¥ó_ª©¥»­¶¼Æ
    Function CheckCaseDocNoPage(CaseID,DocNo,Version:String;Pages:Integer):Integer; //Àˬd®×¥ó¸Ìªº¤å¥ó_ª©¥»­¶¼Æ
    Function FindFormCodePages(CaseID,FormCode:String):Integer;  //­pºâ®×¥ó¸ÌFormIDªº­¶¼Æ
    Function GetDataFormCodePages(FormCode:String):Integer;   //¨ú°O¿ýªºFormcIDªº­¶¼Æ
    Procedure CaseReSize(CaseID:String); //®×¥óªº¼v¹³ÁY©ñ
    Procedure ImageReSize(CaseID,FileName:String);  //¨Ì¤Q¦r©w¦ìÂI°µÁY©ñ
    Procedure ImageReSize_tmp(FormID,FileName:String);  //¨Ì¤Q¦r©w¦ìÂI°µÁY©ñ(¼È¦sÀÉ)
    Function TransCaseID(Path,CaseID:String;MainCase:Boolean):Boolean; //¶Ç°e®×¥ó
    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¥X¨Ó
    Function Node3DocNo(Node3:TTreeNode):String;  //MyTreeNode3¨úDocNo¥X¨Ó
    Function Node3FormID(Node3:TTreeNode):String;  //MyTreeNode3¨úFormCode¥X¨Ó
    Function GetNode2Name(Node2:TTreeNode):String;  //¨úMyTreeNode2ªºÃѧO¦r¥X¨Ó(°O¤§«eÂI¿ï¥Î)
    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; //¨ú¥¼°t¸¹XXXX
    Procedure CaseResort(Path:String); //®×¥óªºÀÉ®×­«·s±Æ§Ç(¦¸¤å¥ó¨ÌDocno¬D)
    Procedure CaseResort2Scanlist(Path:String); //®×¥óªºÀÉ®×­«·s±Æ§Çµ¹scanlist(¦¸¤å¥ó¨ÌFormID±Æ)
    Procedure DistinctDocinCase(Path:String); //¦C¥X®×¥ó¸ÌªºDocno_ª©¥»
    Procedure DistinctDocNoinCase(Path:String); //¦C¥X®×¥ó¸ÌªºDocno
    Procedure ClearErrini(CaseID:String;CaseNode:TTreeNode); //²M±¼ÀË®ÖÀÉ®×
    Procedure SetCaseList(Mode:Char;Index:Integer;text:String);  //'A:¥[¤J,I:´¡¤J,D:§R°£,E:­×§ï'
    Procedure SetDocNoList(Mode:Char;Index:Integer;CaseNo,DocDir,Copies:String);  //'A:¥[¤J,I:´¡¤J,D:§R°£,E:­×§ï'
    Procedure SetContextList(Mode:Char;Index:Integer;CaseNo,DocDir,FileName:String);  //'A:¥[¤J,I:´¡¤J,D:§R°£,E:­×§ï'
    Function checkCaseOMRDone:Boolean;  //Àˬd®×¥ó¬O§_§¹¦¨OMRÀË®Ö
    Function CheckCaseID_OK:Boolean;  //Àˬd¬O§_¦³¥¼°t¸¹ªº®×¥ó
    Procedure CreateEmptyCase(Path,CaseID:String);  //²£¥ÍªÅ¥Õ®×¸¹(­«±½¥ó¥Î)
    Procedure InitScrollRec; //ªì©l¤Æ¼v¹³Scroll°O¿ý
    Procedure GetScrollData(ISB:TImageScrollBox;Var HS,VS:Integer;Var iRate:Single); //¨ú¼v¹³Scroll°O¿ý
    Procedure SetScrollData(ISB:TImageScrollBox;HS,VS:Integer;iRate:Single); //¼g¼v¹³Scroll°O¿ý
    Procedure FormIDReplace(CaseID,DocDir,OldFormID,NewFormID:String); //«ü©wFormID§ó´«¦¨·sªºFormID
    Procedure ShowFileReplace(Path,NewFormID:String);//Åã¥Üªº¼v¹³´«¦¨·sªºFormID
    Procedure PageReplaceFormID(Path,NowFormID,NewFormID:String); //¿ï¨ú­¶§ó´«FormID
    Function ModeNeedCheck(OMRMode,ScanMode:String):Boolean; //±½ºË¼Ò¦¡¬O§_­n°µÀË®Ö
    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; //¨ú±o¿é¤Jªº«O³æ¸¹½X
    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; //¨ú¥X®×¥óªº¼Æ¶q¤Î­¶¼Æ ID¬°ªÅ­È®É¬°¨ú©Ò¦³ªº
    Function BarCode2FormID : String; //Barcode¨Ì³W«hÂনFormID
    Function BarCode2CaseID : String; //Barcode¨Ì³W«hÂনCaseID
    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; //¨ú¥X¥Ø«eDocNoªº¥÷¼Æ
    Function CheckFormIDExists(DocNoNode:TTreeNode;FormID:String):Boolean; //ÀˬdFormID¬O§_¦s¦b¤å¥ó¸Ì
    Function GetDocNoDir(Path,DocNo:String):String; //取出目前DocNo的份數
    Function CheckFormIDExists(DocNoNode:TTreeNode;FormID:String):Boolean; //檢查FormID是否存在文件裡
    Procedure ZipMainFile(SoPath,DePath,ZipName:String); //À£ÁY¼v¹³ÀÉ
    Procedure ZipMaskFile(SoPath,MarkPath,DePath,ZipName:String); //À£ÁY¾B¸n¼v¹³ÀÉ
    Procedure ParserPoint(S:String); //¸ÑªR¤Q¦rÂIªº¦r¦ê
    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¨ú¥X¤Q¦r¼Ò¦¡
    Function Index2Anchor(Anchor:String):String;   //¤Q¦r¼Ò¦¡ 0->NONE;1->ANCHOR;2->FRAME
    Function MemoInfoTransfer(Mode,Str:String;ID_S,Name_S:TStringlist):String;  //µù°O¥N½Xµù°OÃþ§OÂà´«  Mode 'ID':¥N½XÂà¦WºÙ;'NAME':¦WºÙÂà¥N½X
    Function GetFormatID(CaseID:String):String; //¨ú¥X®×¥óªºFormatID
    Function FindNoSaveBarCode : Boolean; //§ä¬O§_¦³¤£­nÀx¦s¼v¹³ªº±ø½X
    Function CheckAvailable:Boolean; //Àˬd¬O§_¥i¨Ï¥Î¤¸¥ó
    Function Case2Mask(SoPath,DePath:String):Boolean;//²£¥Í¾B¸n¼v¹³
    Function CheckNeedCrop(Graphic:TDibGraphic):Boolean; //¬O§_¬OA3­n¤Á¼v¹³
    Function GetNewCustomDocNo(Path,DocName:String):String; //¨ú¥X¥¼¨Ï¥Îªº¦Û­q¤å¥ó¥N¸¹
    Function GetCustomDocName(Path,DocNo:String):String; //¨ú¥X¦Û©w¤å¥ó¦WºÙ
    Function GetCustomFormID(Path,DocNo:String):String; //¨ú¥X¦Û©w¤å¥óFormID
    Function GetCustomDocDir(Path,DocName:String):String; //¨ú¥X¦Û©w¤å¥óDocDir
    Function FindCustomDocName(Path,DocName:String):Boolean; //´M§ä¦Û©w¤å¥ó¦WºÙ¬O§_¦s¦b
    Procedure DeleteCustomDocDir(Path,DocNo:String); //§R°£¦Û©w¤å¥óDocNo
    Function CheckFormID_Prt(FormID:String):Boolean; //¶Ç¤JªºFormID¬O§_¹w³]¦C¦L
    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; //§ä¥X³Ì·sªºDocDir
    Procedure Create_Cust_DocDir(CaseID:String); //²£¥Í¥~­±¶Ç¤Jªº¤å¥ó¥N¸¹¤Î¦Û©w¤å¥ó
    Procedure OldCasetoNewCase(CaseID:String); //±N®ץ÷¼ÆÂন·s³W«h
    Procedure ErrFormtoCurrentForm(CaseID,EFormID,CFormID:String);//±N®תº¿ù»~FormID§ï¥¿½TªºFormID
    Procedure SetRecordEditedDocDir(Mode:Char;CaseID,DocDir:String);  //°O¿ý³Q²§°Êªº¤å¥ó¥Ø¿ý  'A:¥[¤JD:§R±¼'
    Function GetDocDir_Page(CaseID,DocDir:String):Integer;  //¨ú±oDocDirªº­¶¼Æ
    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¬O§_¬°¤J®w¤å¥ó
    Procedure SortDocDir_FormID(CaseID,DocDir:String); //±NDocDir¸Ìªº¤å¥ó½s¸¹±Æ§Ç
    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¬O§_¬°¤J®w¤å¥ó
    Procedure CreateCaseNeedData(Path:String);  //¥ý°µ¼v¹³ºI¨ú·|¤Ö¤G­Ó¤å¦rÀÉ,²£¥ÍCaseDocNo.dat¤ÎDocDir.dat
    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; //Àˬd¿ï¾Üªº¼v¹³¬O§_¦³¥]§t³Q¤Þ¥Îªº¼v¹³
    Function TransOldCaseFile(Path:String):Boolean;  //¤W¶Ç¤Þ¥ÎÂ¥󪺰O¿ýÀÉ
    Function CheckSelectImg_UseCase(Path,CaseID:String):Boolean; //檢查選擇的影像是否有包含被引用的影像
    Function TransOldCaseFile(Path:String):Boolean;  //上傳引用舊件的記錄檔
    Function Writelog(CaseID:String):Boolean;
    Function FormIDAppear(FormID:String):Boolean; //FormID¬O§_¥i¥X²{
    Function DocNoAppear(DocNo:String):Boolean;   //DocNo¬O§_¥i¥X²{
    Function GetDocNoCount(CaseID,DocNo:String):Integer; //¨úDocNo¼Æ¶q
    Function GetDocDirCopies(CaseID,DocDir:String):Integer; //¨úDocDir¥÷¼Æ
    Procedure SetDocDirCopies(CaseID,DocDir:String;NewCopies:Integer); //­×§ïDocDir¥÷¼Æ
    Function GetDocDirCopies_Rec(Path,CaseID,DocDir:String):Integer; //¨ú°O¿ý¸ÌªºDocDir¥÷¼Æ
    Function GetCustomNameCount(CustomName:String):Integer;   //¨ú¥~¶Çªº¦WºÙ¼Æ¶q
    Function GetCustomDocNoCount(Docno:String):Integer;   //¨ú¥~¶ÇªºDocNo¼Æ¶q
    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;  //®×¥ó¥i§_³Q§R°£
    Function CaseDelete_Enable(CaseID:String):Boolean;  //案件可否被刪除
    Procedure MoveImage(Path:String;mp:Integer); //²¾°Ê­¶¼Æ
    Procedure MoveImage_Drag(Path:String;fp,tp:Integer); //©ì©Ô²¾°Ê­¶¼Æ
    Procedure MoveImage(Path:String;mp:Integer); //移動頁數
    Procedure MoveImage_Drag(Path:String;fp,tp:Integer); //拖拉移動頁數
    Procedure SetUseCase(Mode:Char;Path,DocDir,FormCaseID,ToCaseID:String);   //°O¿ý¤Þ¥Î¨ä¥L®×¥ó A:¥[¤J D:§R±¼
    Function GetUseCase(Mode:Char;Path,DocDir:String):String;  //F:¨ú³Q¤Þ¥Î To:¤Þ¥Î
    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¨Ó§ä¼v¹³
    procedure view_image_DocNo(Path,DocNo,FormID:String;Pages:integer); //¥ÎDocNo¨Ó§ä¼v¹³
    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; //Âà¥X«ü©wPreViewISBName
    Function ShapeName2PreViewISBName(SP:TShape):String; //轉出指定PreViewISBName
    Procedure CreatePreViewISB(Count:Integer);
    Procedure FreePreViewISB;
    Procedure FitPreViewISB;
    Procedure PaintShape(FromImg,ToImg:TImageScrollBox); //µe¦³³Q¿ï¨úªº¼v¹³
    Procedure PaintShape(FromImg,ToImg:TImageScrollBox); //畫有被選取的影像
    Procedure FreeShapeobj(SelectISB : TImageScrollBox);
    Procedure ISBClick(Sender : TObject);
    Procedure ISBMouseMove(Sender: TObject; Shift: TShiftState;
@@ -793,8 +870,8 @@
    procedure BtnMouseEnter(Sender: TObject);
    procedure PageEnd;   //±½´y±µ¦¬§¹¦¨
    Procedure PageDone;  //±½´y§¹¦¨«áÅã¥Ü¼v¹³
    procedure PageEnd;   //掃描接收完成
    Procedure PageDone;  //掃描完成後顯示影像
    procedure StatrTwainScan;
    procedure OnAcquire( const DibHandle    : THandle;
                         const XDpi         : Word;
@@ -813,6 +890,23 @@
    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;
@@ -918,6 +1012,22 @@
    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;
@@ -939,12878 +1049,30 @@
{ TCB_IMGPSScanX }
function TCB_IMGPSScanX.GetCurrentVersionNo: String; //Àò¨ú¦Û¨­ª©¥»¸¹©Ò»Ý­n
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);
begin
    inherited;
    if (message.WheelDelta = WHEEL_DELTA) Then begin
     if Edit1.Focused then
     begin
       ScrollBox1.VertScrollBar.Increment := 50;
       ScrollBox1.Perform(WM_VSCROLL, SB_LINEUP, 0);
     end
     else if DisplayISB.Focused then
     begin
       DisplayISB.VertScrollBar.Increment := 50;
       DisplayISB.Perform(WM_VSCROLL, SB_LINEUP, 0);
     end;
     end else if (message.WheelDelta = -WHEEL_DELTA) then begin
     if Edit1.Focused then
     begin
       ScrollBox1.VertScrollBar.Increment := 50;
       ScrollBox1.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
     end
     else if DisplayISB.Focused then
     begin
       DisplayISB.VertScrollBar.Increment := 50;
       DisplayISB.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
     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('³Æµù¿é¤J¤¤,½Ðµy­Ô');
  DataLoading(True,True);
  SortMemoForm := TSortMemoForm.Create(Self);
  S := TStringlist.Create;
  try
    InitialLanguage(SortMemoForm); //¸ü¤J¦h°ê»y¨¥
    SortMemoForm.ContentList := TStringlist.Create;      //µù°O¤º®e
    SortMemoForm.MemoIDList := TStringlist.Create;       //µù°O¥N¸¹
    SortMemoForm.MemoNameList := TStringlist.Create;     //µù°O¦WºÙ
    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);   //µù°O¤º®e
      SortMemoForm.MemoIDList.Add(M_ID);         //µù°O¥N¸¹
      SortMemoForm.MemoNameList.Add(M_Name);     //µù°O¦WºÙ
    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;       //µù°O¤º®e
    SortMemoForm.MemoIDList.Free;        //µù°O¥N¸¹
    SortMemoForm.MemoNameList.Free;      //µù°O¦WºÙ
  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.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;  //ÂsÄýµ¡ªºÃä¬É
  Ext := '.tif';
  SafePixel := 20;
  CaseIDLength := 16;  //®×¥ó½s¸¹ªø«× 16½X
  FormIDLength := 15;  //FormIDªø«× 15½X
  DocNoLength := 8;   //DocNoªø«× 8½X (1~8)
  Bt :=4; //¥hª½½u®É¾î½u§PÂ_ªº®e§Ô­È
  CropBarcode := 'CC';//­n¤Á¼v¹³ªº±ø½X
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;
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);
  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);
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);  //²M±¼ÀˮְO¿ý
    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
  //********²M³æ°Ï********
  Doc_Inf_List.Free;  //Doc_Inf ²M³æ   Docno + ª©¥»¬°key
  DM_FORM_INF_List.Free;  //DM_FORM_INF ²M³æ   Docno + ª©¥»¬°key
  FORM_INF_List.Free; //FORM_INFªº²M³æ
  CHECK_RULE_INF_List.Free;  //CHECK_RULE_INF  ²M³æ
  MEMO_INF_List.Free;  //MEMO_INF ²M³æ
  WORK_INF_List.Free;  //WORK_INF ²M³æ
  LASTEST_FORM_INF_List.Free; // LASTEST_FORM_INF ²M³æ
  FindResult.Free ;  //§äSQLDataªºµ²ªG
  OMRFileList.Free;  //­nOMRÀˮ֪º¤å¥ó(¥uÀˬd¨CºØFormªº²Ä¤@­¶)
  FormCode_PageSize.Free; //¤å¥óªº¹w³]¤j¤p  FormCode_Height_Width
  DocNo_NeedDoc.Free; //¦³Docno®É­n¬Û¨Ìªº¤å¥ó   DocNo_¬Û¨Ì¤å¥ó_¬Û¨Ì¤å¥ó
  DocNo_NoDoc.Free; //¦³Docno®É¤¬¥¸ªº¤å¥ó   DocNo_¤¬¥¸¤å¥ó_¤¬¥¸¤å¥ó
  DocNo_VerinCase.Free; //®×¥ó¸ÌªºDocNo+ª©¥»ªº²M³æ
  CaseDocNoList.Free;  //®×¥ó¸ÌªºDocNo²M³æ
  CaseDocNo_CopiesList.Free; //®×¥ó¸ÌªºDocNo¥÷¼Æ²M³æ
  CaseList.Free;    //°O¿ý±½ºË®×¥óªº¶¶§Ç
  NoSaveBarCodeList.Free; //¤£Àx¦sªº±ø½X²M³æ
  FormID_List.Free;  //FormID²M³æ
  DocNo_List.Free; //DocNo²M³æ
  Context_DocnoList.Free; //®×¥ó¸ÌªºÀÉ®×Docno²M³æ
  ContextList.Free; //®×¥ó¸ÌªºÀɮײM³æ
  NowShowFileList.Free;  //¥Ø«eÅã¥Üªº¼v¹³²M³æ
  NowSelectFileList.Free; //¥Ø«e³QÂI¿ïªº¼v¹³²M³æ
  Cust_DocNoList.Free; //¦Û¦æ©w¸q¤å¥ó¦WºÙ
  IN_WH_DocNoList.Free; //¤J®wªº¤å¥ó²M³æ
  GuideFormIDList.Free; //­n·í¾É¤Þ­¶ªí³æ²M³æ
  //********²M³æ°Ï********
  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('¤£¯à±q²Ä1­¶¤À®×'));
      Exit;
    end;
    If MessageDlg(Format(_Msg('¬O§_½T©w±q%d­¶¤À¥X·s®×'),[PageLV.ItemIndex+1]),Mtconfirmation,[mbyes,mbcancel],0) = mrcancel Then Exit;
    ClearErrini(NowCaseno,MyTreeNode1);  //²M±¼ÀˮְO¿ý
    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  //§â­ì¸g¿ì¥N¸¹¨ú¥X¨Ó¦A¼g¤J·s¥ó¸Ì
    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('¤å¥óÂkÃþ¤¤,½Ðµy­Ô');
  DataLoading(True,True);
  DocListForm := TDocListForm.Create(self);
  try
    InitialLanguage(PatchDlg); //¸ü¤J¦h°ê»y¨¥
    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);  //²M±¼ÀˮְO¿ý
      //Showmessage(_Msg('ÂkÃþ§¹¦¨'));  //20101103 User­n¨D®³±¼
      if PreNode2Name <> '' then  // ¦^¨ì­ì¥»ÂI¿ïªº¤å¥ó¸`ÂI¤W
      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;
begin
  PreNode2Name := '';
  if TreeView1.Selected.Parent = MyTreeNode1 then
    PreNode2Name:= GetNode2Name(MyTreeNode2);
  ShowText := _Msg('¤å¥óÂkÃþ¤¤,½Ðµy­Ô');
  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); //¸ü¤J¦h°ê»y¨¥
    //InitialLanguage(PatchDlg); //¸ü¤J¦h°ê»y¨¥
    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;
      //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
          //Showmessage(Components[i].Name);
          iISBName := ShapeName2PreViewISBName(TShape(Components[i]));
          iISB := TImageScrollBox(FindComponent(iISBName));
          OldName := ExtractFileName(iISB.FileName);
          Ext := ExtractFileExt(OldName);
          FormID := DocListForm.DocLV.Selected.Caption;
          DocNo := FormCode2DocNo(FormID);
          if DocNoDir2DocNo(Path2DocDir(ExtractFilePath(iISB.FileName),NowCaseno)) = DocNo then
            DocDir := Path2DocDir(ExtractFilePath(iISB.FileName),NowCaseNo)
          Else
            DocDir := FindLastestDocDir(NowCaseno,DocNo);
          if DocNoNeedDiv(DocNo) then   //­n¤À¥÷¼Æ
          begin
            if ((FormCode2Page(FormID) = '01') and (GetDocDir_Page(NowCaseno,DocDir)>0)) or (DocDir = '') then
              DocDir := DocNo2DocNoDir(ImageSavePath + NowCaseno+'\',DocNo);
          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; }
          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;
      ReSortFileName(ExtractFilePath(iISB.FileName));
      DrawDocItem2(MytreeNode1,NowCaseno);
      ClearErrini(NowCaseno,MyTreeNode1);  //²M±¼ÀˮְO¿ý
      if GoAtt then
      begin
        GotoAttach(AttLv);
      end;
      TreeView1click(self);
    end;
  finally
  DataLoading(False,False);
  DocListForm.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('¿é¤J¨ä¥L¤å¥ó¦WºÙ','¤å¥ó¦WºÙ',CustomDocName) then
  begin
    if FindCustomDocName(DisplayPath,CustomDocName) then
    begin
      Showmessage(Format('¤å¥ó¦WºÙ:"%s"¤v¦s¦b',[CustomDocName]));
      Exit;
    end;
    CustomDocNo := GetNewCustomDocNo(DisplayPath,CustomDocName);
  end;
  if CustomDocNo = '' then Exit;
  DocDir := CustomDocNo;
  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);  //²M±¼ÀˮְO¿ý
  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('¬O§_½T©w§R°£??',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));
      DeleteImageFile(ExtractFilePath(iISB.FileName),ExtractFileName(iISB.FileName),NowCaseNo);
    end;
  end;
  ReSortFileName(ExtractFilePath(iISB.FileName));
  DrawDocItem2(MytreeNode1,NowCaseno);
  MyTreeNode1.Text := Format('%s-%d'+_Msg('­¶'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
  NewTreeNodeRefresh;
  ClearErrini(NowCaseno,MyTreeNode1);  //²M±¼ÀˮְO¿ý
  TreeView1click(self);
end;
procedure TCB_IMGPSScanX.N1Click(Sender: TObject);
var
  mp:string;
begin
  mp := InputBox('²¾°Ê­¶¼Æ','½Ð¿é¤J²¾¤J­¶½X','');
  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('¸ê°T©|¥¼¤U¸ü§¹¦¨,½Ðµy­Ô©Î­«·s¶i¤J'));
    Exit;
  end;
  if (FMode = 'RSCAN') or (FMode = 'ESCAN') then
  begin
    if NewTreeNode.Count > 0 then
    begin
      TreeView1.Selected := NewTreeNode.Item[0];
      TreeView1click(nil);
      FirstDocDir := '';
      NowGuideFormID := '';
      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 := '';
    ClearView(1);
    ContextList.Clear;
    Try
      StatrTwainScan;
    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('¸ê°T©|¥¼¤U¸ü§¹¦¨,½Ðµy­Ô©Î­«·s¶i¤J'));
    Exit;
  end;
  ShowText := _Msg('±½ºË°Ñ¼Æ³]©w¤¤,½Ðµy­Ô');
  DataLoading(True,True);
  PatchDlg := TPatchDlg.Create(self);
  try
    InitialLanguage(PatchDlg); //¸ü¤J¦h°ê»y¨¥
    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
  if TreeView1.Selected = NewTreeNode then  //¥þ§R  //·s±½´y¥ó
  begin
    If Messagedlg(_Msg('¬O§_§R°£©Ò¦³®×¥ó?'),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('§R°£§¹¦¨'));
  end
  Else if TreeView1.Selected = MyTreeNode1 then       //®×¥ó½s¸¹
  begin
    If Messagedlg(Format(_Msg('½s¸¹(%s)¬O§_§R°£?'),[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 §R°£¦Û©w¤å¥ó®É­n§RiniÀÉ¸ê®Æ
          DeleteCustomDocDir(ImageSavePath+NowCaseno+'\',iDocDir);
      end
    end
    Else
    begin
      _DelTree(DisplayPath);
      SetCaseList('D',NewTreeNode.IndexOf(MyTreeNode1),'');
    end;
    ClearErrini(NowCaseno,MyTreeNode1);  //²M±¼ÀˮְO¿ý
    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       //¤å¥ó¼h
  begin
    If Messagedlg(Format(_Msg('¤å¥ó(%s)¬O§_§R°£?'),[DocNo2DocName(NowCaseno,NowDocNo)]),mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
    ClearView(1);
    Application.ProcessMessages;
    _DelTree(ImageSavePath+NowCaseno+'\'+NowDocDir);
    SetUseCase('D',ImageSavePath+NowCaseno+'\',NowDocDir,'','');
    SetDocNoList('D',-1,NowCaseNo,NowDocDir,'');
    if (Copy(NowDocNo,1,5)='ZZZZZ') then   //20140703 §R°£¦Û©w¤å¥ó®É­n§RiniÀÉ¸ê®Æ
      DeleteCustomDocDir(ImageSavePath+NowCaseno+'\',NowDocDir);
    DrawDocItem2(MytreeNode1,NowCaseno);
    MytreeNode1.Text := Format(_Msg('%s-%d­¶'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
    ClearErrini(NowCaseno,MyTreeNode1);  //²M±¼ÀˮְO¿ý
    NewTreeNodeRefresh;
    {if (FMode <>'ESCAN') and (ContextList.Count = NowShowFileList.Count) then
    begin
      if Messagedlg(_Msg('§R°£«á±NµL¼v¹³,®×¥ó±N§R°£,¬O§_½T©w?'),mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
      _DelTree(DisplayPath);
      SetCaseList('D',NewTreeNode.IndexOf(MyTreeNode1),'');
      if (FMode = 'ESCAN') then
      begin
        MkDir(ImageSavePath+FCaseID);
        CreateEmptyCase(ImageSavePath,FCaseID);
      end;
      LoadImgFile;
    end
    Else
    begin
      DeleteShowFile(DisplayPath);
      DrawDocItem1(MytreeNode1,Doc_Inf_List,NowCaseno);
      P := ContextList.Count;
      MytreeNode1.Text := Format(_Msg('%s-%d­¶'),[NowCaseno,p]);
      ClearErrini(NowCaseno,MyTreeNode1);  //²M±¼ÀˮְO¿ý
      NewTreeNodeRefresh;
    end;
    Showmessage(_Msg('§R°£§¹¦¨')); }
    //Showmessage(_Msg('§R°£§¹¦¨'));  //20101102 User­n¨D®³±¼
  end
  Else if TreeView1.Selected = MyTreeNode3 then       //FormID¼h
  begin
    If Messagedlg(Format(_Msg('¤å¥ó(%s)¬O§_§R°£?'),[NowFormName]),mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
    DeleteFormCodeFile(NowCaseNo,NowDocDir,NowFormCode);
    SetRecordEditedDocDir('A',NowCaseNo,NowDocDir);
    DrawDocItem2(MytreeNode1,NowCaseno);
    MytreeNode1.Text := Format(_Msg('%s-%d­¶'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
    ClearErrini(NowCaseno,MyTreeNode1);  //²M±¼ÀˮְO¿ý
    NewTreeNodeRefresh;
    {if (FMode <>'ESCAN') and (ContextList.Count = NowShowFileList.Count) then
    begin
      if Messagedlg(_Msg('§R°£«á±NµL¼v¹³,®×¥ó±N§R°£,¬O§_½T©w?'),mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
      _DelTree(DisplayPath);
      SetCaseList('D',NewTreeNode.IndexOf(MyTreeNode1),'');
      if (FMode = 'ESCAN') then
      begin
        MkDir(ImageSavePath+FCaseID);
        CreateEmptyCase(ImageSavePath,FCaseID);
      end;
      LoadImgFile;
    end
    Else
    begin
      DeleteShowFile(DisplayPath);
      DrawDocItem1(MytreeNode1,Doc_Inf_List,NowCaseno);
      P := ContextList.Count;
      MytreeNode1.Text := Format(_Msg('%s-%d­¶'),[NowCaseno,p]);
      ClearErrini(NowCaseno,MyTreeNode1);  //²M±¼ÀˮְO¿ý
      NewTreeNodeRefresh;
    end;
    Showmessage(_Msg('§R°£§¹¦¨'));
    //Showmessage(_Msg('§R°£§¹¦¨'));   //20101102 User­n¨D®³±¼ }
  end;
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('­×§ï®×¥ó½s¸¹'),_Msg('·s®×¥ó½s¸¹'),'');
  ShowNewCaseID := NewCaseID;
  ShowNowCaseID := NowCaseno;
  if NewCaseID = '' then Exit;
  IF Length(NewCaseID)<>CaseIDLength Then
  begin
    Showmessage(_Msg('¿é¤J®æ¦¡¿ù»~'));
    Exit;
  end;
  if DirectoryExists(ImageSavePath+NewCaseID) then
  begin
    Showmessage(NewCaseID+_Msg('¤v¦s¦b,µLªk­×§ï'));
    Exit;
  end;
  if Messagedlg(Format(_Msg('¬O§_±N%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) {or (Treeview1.Selected = MyTreeNode1)} then
    NewScanBtnClick(self)
  Else
    AddScanBtnclick(self);
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;
begin
  OpenDialog1.Filter := 'Image files|*.TIF;*.JPG';
  if OpenDialog1.Execute then
  begin
    ISB := TImageScrollBox.Create(self);
    try
      ShowText :=_Msg('ÀÉ®×¥[¤J¤¤,½Ðµy­Ô');
      DataLoading(True,True);
      if TreeView1.Selected = nil then Exit;
      FName := OpenDialog1.FileName;
      CaseID := NowCaseno ;
      imageCount := 0;
      P := ISB.ImageCountFromFile(OpenDialog1.FileName);
      for I := 1 to P do
      begin
        ShowText :=_Msg('ÀÉ®×¥[¤J¤¤,½Ðµy­Ô('+inttostr(i)+'/'+inttostr(P)+')');
        DataLoading(True,True);
        ISB.LoadFromFile(FName,i);
        DeskewImg(ISB.Graphic);
        if (TreeView1.Selected = NewTreeNode) or (TreeView1.Selected = MyTreeNode1) then
        begin
          SaveFilename := '';
          MpsGetBarcode(ISB.Graphic,MpsBarcodeinf);
          for n := 1 to MpsBarcodeinf.Count-1  do
          begin
            if MpsBarcodeinf.r180[n] <> 0 then  //¨Ì±ø½X¨¤«×Âà¼v¹³
            begin
              Rotate(ISB.Graphic,MpsBarcodeinf.r180[n]);
              MpsGetBarcode(ISB.Graphic,MpsBarcodeinf);
              Break;
            end;
          end;
          FormID := BarCode2FormID; //¨ú¥XFormID
          SaveFilename := FormID;
          if (TreeView1.Selected = NewTreeNode) Then
          begin
            if FindDivFormCode(FormID) Then  //¥u§ä¤À®×­¶¤Wªº®×¥ó±ø½X
            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 DocNoNeedDiv(DocNo) then   //­n¤À¥÷¼Æ
          begin
            if ((FormCode2Page(FormID) = '01') and (GetDocDir_Page(CaseID,DocDir)>0)) or (DocDir = '') then
              DocDir := DocNo2DocNoDir(ImageSavePath + CaseID+'\',DocNo);
          end
          Else        //¤£¤À¥÷¼Æ
          begin
            if DocNo <> '' then
              DocDir := DocNo
            else      //Attach ªþ¥ó
              DocDir := DocNo2DocNoDir(ImageSavePath + CaseID+'\',DocNo);
          end;
          {if ((FormCode2Page(FormID) = '01') and DocNoNeedDiv(DocNo)) or (FormID='') then   //¬Oªí³æ²Ä¤@­¶¥B­n¤À¥÷
            DocDir := DocNo2DocNoDir(ImageSavePath + CaseID+'\',DocNo)
          Else if not DocNoNeedDiv(DocNo) then
            DocDir := DocNo; }
          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+'\');  //¼g¤J®×¥ó¯Á¤Þ
          if SaveFilename = '' then //ªþ¥ó
            SaveFilename:= Add_Zoo(ContextList.Count+1,3)+ext
          Else
            SaveFilename := Add_Zoo(ContextList.Count+1,3)+'_'+SaveFilename+ext;
          ISB.SaveToFile(SavePath+SaveFilename);
          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;
          ISB.SaveToFile(SavePath+SaveFilename);
          ContextList.Add(SaveFilename);
          ContextList.SaveToFile(SavePath+'Context.dat');
        end;
      end;
      ClearErrini(CaseID,MyTreeNode1);  //²M±¼ÀˮְO¿ý
      if (TreeView1.Selected = MyTreeNode1) or (TreeView1.Selected = NewTreeNode) then
      begin
        LoadImgFile;
      end
      Else
      begin
        DrawDocItem2(MytreeNode1,CaseID); //ªø¥X¤å¥ó¦WºÙªº¾ð¨Ã¶Ç¦^¬O§_¦³¥Ó½Ð®Ñªº¼v¹³
        page := GetCasePage(ImageSavePath,CaseID);
        MytreeNode1.Text := Format(_Msg('%s-%d­¶'),[CaseID,page]);
      end;
      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('½Æ»s¤å¥ó¤¤,½Ðµy­Ô');
  DataLoading(True,True);
  DocCopyForm := TDocCopyForm.Create(Self);
  S := TStringlist.Create;
  try
    InitialLanguage(DocCopyForm); //¸ü¤J¦h°ê»y¨¥
    DocCopyForm.CopyFromGB.Caption := NowCaseno+DocCopyForm.CopyFromGB.Caption;
    IF NewTreenode.Count = 1 Then
    begin
      Showmessage(_Msg('¨S¦³¨ä¥L¥i½Æ»sªº¤å¥ó'));
      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('¬O§_½T©w­n±N¤Ä¿ïªº¤å¥ó½Æ»s¨ì¤Ä¿ïªº½s¸¹¸Ì?'),MtConfirmation,[Mbyes,mbcancel],0) = mrCancel Then
        Exit;
      ShowText := _Msg('½Æ»s¤¤,½Ðµy­Ô');
      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);  //²M±¼ÀˮְO¿ý
          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   //¦³¤å¥ó¥N¸¹
               // 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('½Æ»s§¹¦¨!!'));
      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 : String;
begin
  DocListForm := TDocListForm.Create(self);
  try
    InitialLanguage(PatchDlg); //¸ü¤J¦h°ê»y¨¥
    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;
      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
      NewFormID := DocListForm.DocLV.Selected.Caption;
      if NowFormCode <> AttName then
      begin
        If Messagedlg(Format(_Msg('¬O§_±N"%s"ªº©Ò¦³¼v¹³ÂkÃþ¦¨"%s"'),[FormCode2FormName(NowCaseNo,NowFormCode),FormCode2FormName(NowCaseNo,NewFormID)]),MtConfirmation,[mbyes,mbcancel],0) = mrcancel Then
          Exit;
      end
      Else
      begin
        If Messagedlg(Format(_Msg('¬O§_±N"%s"ªº©Ò¦³¼v¹³ÂkÃþ¦¨"%s"'),[_Msg('ªþ¥ó')+MyTreeNode3.Text,FormCode2FormName(NowCaseNo,NewFormID)]),MtConfirmation,[mbyes,mbcancel],0) = mrcancel Then
          Exit;
      end;
      ShowText := _Msg('ÂkÃþ¤¤,½Ðµy«J');
      DataLoading(True,True);
      //FormIDReplace(DisplayPath,NowFormCode,FormID);
      //ShowFileReplace(DisplayPath,FormID);
      FormIDReplace(NowCaseNo,NowDocDir,NowFormCode,NewFormID);
      ClearErrini(NowCaseno,MyTreeNode1);  //²M±¼ÀˮְO¿ý
      DrawDocItem2(MytreeNode1,NowCaseno);
      //DrawDocItem(MytreeNode1,FORM_INF_List,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('Àˮ֤¤,½Ðµy­Ô');
    DataLoading(True,True);
    ShowText := CaseID+_Msg('Àˮ֤¤,½Ðµy­Ô');
    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;
begin
  if InputQuery('¿é¤J¨ä¥L¤å¥ó¦WºÙ','¤å¥ó¦WºÙ',CustomDocName) then
  begin
    if CustomDocName <> '' then
    begin
      if FindCustomDocName(DisplayPath,CustomDocName) then
      begin
        Showmessage(Format('¤å¥ó¦WºÙ:"%s"¤v¦s¦b',[CustomDocName]));
        Exit;
      end;
      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('­×§ï¥÷¼Æ','½Ð¿é¤J­×§ï«áªº¥÷¼Æ',inttostr(oldCopies)));
  except
    Showmessage('¿é¤J¿ù»~');
    Exit;
  end;
  if (NewCopies <= 0) and (NewCopies >= 10000) then
  begin
    Showmessage('¿é¤J½d³ò¿ù»~');
    Exit;
  end;
  if (oldCopies <> NewCopies) and (NewCopies > 0) and (NewCopies < 10000) then
  begin
    if DocNoNeedDiv(NowDocNo) and (NewCopies = 1) and (MessageDlg('­×§ï¦Ü1¥÷«á¦¹¤å¥ó±NµLªk¦A¶i¦æ¥÷¼Æ­×§ï,¬O§_½T©w??',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»¡²z½ß§ï¦sjpg
  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);  //²M±¼ÀˮְO¿ý
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('¤å¥óÂkÃþ¤¤,½Ðµy­Ô');
  DataLoading(True,True);
  DocListForm := TDocListForm.Create(self);
  try
    InitialLanguage(PatchDlg); //¸ü¤J¦h°ê»y¨¥
    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);  //²M±¼ÀˮְO¿ý
      if PreNode2Name <> '' then  // ¦^¨ì­ì¥»ÂI¿ïªº¤å¥ó¸`ÂI¤W
      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('ÂkÃþ§¹¦¨')); //20101103 User­n¨D®³±¼
    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('§R°£«á(%s)®×¥óµL¼v¹³,±N§R°£¦¹®×¥ó,¬O§_½T©w§R°£?'),mtconfirmation,[mbyes,mbcancel],0) = mrCancel then Exit;
    _DelTree(DisplayPath);
    SetCaseList('D',NewTreeNode.IndexOf(MyTreeNode1),'');
    LoadImgFile;
  end
  Else
  begin
    if Messagedlg(_Msg('¬O§_½T©w§R°£?'),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);  //²M±¼ÀˮְO¿ý
    NewTreeNodeRefresh;
    TreeView1Click(self);
  end;
  //Showmessage(_Msg('§R°£§¹¦¨'));  //20101101 User­n¨D®³±¼
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);  //²M±¼ÀˮְO¿ý
end;
procedure TCB_IMGPSScanX.PopupMenu1Popup(Sender: TObject);
begin
  PM101.Visible := False;   //§R°£
  PM102.Visible := False;   //­×§ï®×¥ó½s¸¹
  PM103.Visible := False;   //±½ºË¾¹¥[¤J¼v¹³
  PM104.Visible := False;   //ÀÉ®×¥[¤J¼v¹³
  PM106.Visible := False;   //½Æ»s¤å¥ó¦Ü¨ä¥L½s¸¹
  PM107.Visible := False;   //¼g³Æµù
  PM108.Visible := False;   //ÂkÃþ
  PM109.Visible := False;   //Àˮ֦¹µ§
  PM110.Visible := False;   //·s¼W¦Û­q¤å¥ó
  PM111.Visible := False;   //­×§ï¥÷¼Æ
  if (FMode = 'SAMPLESCAN') then Exit;
  if TreeView1.Selected = nil then Exit;
  if TreeView1.Selected = NewTreeNode  then     //·s±½ºË¥ó
  begin
    if (FMode = 'NSCAN') then
    begin
//ShowMessage('AAAA');
      PM101.Visible := True;   //§R°£
      PM103.Visible := True;   //±½ºË¾¹¥[¤J¼v¹³
      PM104.Visible := True;   //ÀÉ®×¥[¤J¼v¹³
    end;
  end
  Else if TreeView1.Selected = MyTreeNode1 then    //®×¥ó¼h
  begin
    PM101.Visible := True;   //§R°£
    if not CaseDelete_Enable(NowCaseno) then //
      PM101.Enabled := False
    else
      PM101.Enabled := True;
    PM103.Visible := True;   //±½ºË¾¹¥[¤J¼v¹³
    //PM107.Visible := True;   //¼g³Æµù
    //PM109.Visible := True;   //Àˮ֦¹µ§
    if FCustDocYN <> 'N' Then
      PM110.Visible := True;   //·s¼W¦Û­q¤å¥ó
    PM104.Visible := True;   //ÀÉ®×¥[¤J¼v¹³
    if (FMode = 'NSCAN') then
    begin
      PM102.Visible := True;   //­×§ï®×¥ó½s¸¹
    end;
  end
  Else if TreeView1.Selected = MyTreeNode2 then    //¤å¥ó¼h
  begin
    PM101.Visible := True;   //§R°£
    //PM107.Visible := True;   //¼g³Æµù
    //PM109.Visible := True;   //Àˮ֦¹µ§
    if FCustDocYN <> 'N' Then
      PM110.Visible := True;   //·s¼W¦Û­q¤å¥ó
    if GetUseCase('T',DisplayPath,NowDocDir) <> '' then   //¨S¦³³Q¤Þ¥Î¨«ªº
      PM101.Enabled := False    //§R°£
    Else
      PM101.Enabled := True;   //§R°£
    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;   //­×§ï®×¥ó½s¸¹
  end
  Else if TreeView1.Selected = MyTreeNode3 then    //ªí³æ¼h
  begin
    PM101.Visible := True;   //§R°£
    PM104.Visible := True;   //ÀÉ®×¥[¤J¼v¹³
    PM108.Visible := True;   //ÂkÃþ
    PM103.Visible := True;   //±½ºË¾¹¥[¤J¼v¹³
    if FCustDocYN <> 'N' Then
      PM110.Visible := True;   //·s¼W¦Û­q¤å¥ó
    if GetFormIDPage(ContextList,NowFormCode) < 1 Then
      PM108.Visible := False;   //ÂkÃþ
    if GetUseCase('T',DisplayPath,NowDocDir) <> '' then   //³Q¤Þ¥Î¨«ªº
    begin
      PM101.Enabled := False;   //§R°£
      PM104.Enabled := False;   //ÀÉ®×¥[¤J¼v¹³
      PM108.Enabled := False;   //ÂkÃþ
    end
    Else
    begin
      PM101.Enabled := True;   //§R°£
      PM104.Enabled := True;   //ÀÉ®×¥[¤J¼v¹³
      PM108.Enabled := True;   //ÂkÃþ
    end;
    if (FMode = 'NSCAN') then
      PM102.Visible := True;   //­×§ï®×¥ó½s¸¹
    //PM103.Visible := True;   //±½ºË¾¹¥[¤J¼v¹³
    //PM104.Visible := True;   //ÀÉ®×¥[¤J¼v¹³
    //PM107.Visible := True;   //¼g³Æµù
    //PM109.Visible := True;   //Àˮ֦¹µ§
  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 := False;  //ÂkÃþ
  PM602.Visible := False;  //¦Û¦æ©w¸q¤å¥ó¦WºÙ
  PM603.Visible := False;  //±½´y´À´«¦¹­¶
  PM604.Visible := False;  //¬n±×ÁB¥¿
  PM605.Visible := False;  //§R°£
  if ((NowDocNo = 'Attach') or (NowDocNo = 'S_Attach')) and (FCustDocYN <> 'N') then
    PM602.Visible := True;  //¦Û¦æ©w¸q¤å¥ó¦WºÙ
  //PM603.Visible := True;  //±½´y´À´«¦¹­¶
  PM604.Visible := True;  //¬n±×ÁB¥¿
  PM601.Visible := True;  //ÂkÃþ
  PM605.Visible := True;  //§R°£
  if CheckSelectImg_UseCase(DisplayPath,NowCaseNo) then //¿ï¾Üªº¼v¹³¤£¥i¦³¤Þ¥Îªº
  begin
    PM601.Enabled := False;  //ÂkÃþ
    PM605.Enabled := False;  //§R°£
  end
  Else
  begin
    PM601.Enabled := True;  //ÂkÃþ
    PM605.Enabled := True;  //§R°£
  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;
begin
  ScanMode := smSample;
  ClearView(1);
  Vmode := 0;  //¤Á¦¨³æ­¶
  GoViewMode;
  ScanInfo.ImageCount := 0;
  ScanPath := SamplePath;
  ScanCaseno := '';
  ContextList.Clear;
  ShowText := _Msg('½d¥»±½´y¤¤,½Ðµy­Ô');
  DataLoading(True,True);
  SampleFormID := UpperCase(InputBox(_Msg('½d¥»Àɱ½ºË¿é¤Jµe­±'),_Msg('½Ð¿é¤J¤å¥ó½s¸¹'),''));
  if SampleFormID <> '' then
  begin
    if FormIDExists(SampleFormID,False,0) then
    begin
      ScanSaveFilename :=  SampleFormID + '.tif';
    end
    Else
    begin
      Showmessage(Format(_Msg('FormID:%s©|¥¼µù¥U'),[SampleFormID]));
      Panel1.Enabled := True;
      Panel2.Enabled := True;
      Exit;
    end;
    SampleAnchorMode := FormID2Anchor(SampleFormID);
    Panel1.Enabled := False;
    Panel2.Enabled := False;
    Try
      StatrTwainScan;
    Except
    Panel1.Enabled := True;
    Panel2.Enabled := True;
    end;
    if (ISB1.FileName <> '') and FileExists(SamplePath+SampleFormID+'.tif') then
    begin
      ShowText := _Msg('½d¥»¶Ç°e¤¤,½Ðµy­Ô');
      DataLoading(True,True);
      //¦h¦s¤@¥÷jpg
      ImageScrollBox1.LoadFromFile(SamplePath+SampleFormID+'.tif',1);
      BWTif2Jpg(ImageScrollBox1.Graphic);
      ImageScrollBox1.SaveToFile(SamplePath+SampleFormID+'.jpg');
      //¦h¦s¤@¥÷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('¶Ç°e½d¥»ÀÉ®×®É,ºô¸ôµo¥Í¿ù»~!!')+_MSg('¿ù»~¥N½X:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason+')');
        DataLoading(False,False);
        Exit;
      end;
      if memo1.Lines.Strings[0] = '1' then
      begin
        Showmessage(_Msg('¶Ç°e½d¥»ÀÉ®×®É,ºô¸ôµo¥Í¿ù»~!!')+_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('¶Ç°e½d¥»ÀÉ®×®É,ºô¸ôµo¥Í¿ù»~!!')+_Msg('¿ù»~­ì¦]:')+_Msg('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J'));
        DataLoading(False,False);
        Exit;
      end;
      if FileExists(SamplePath+SampleFormID+'.jpg') then   //¶Ç°eJPG¼v¹³
      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('¶Ç°e½d¥»ÀÉ®×(JPG)®É,ºô¸ôµo¥Í¿ù»~!!')+_MSg('¿ù»~¥N½X:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason+')');
          DataLoading(False,False);
          Exit;
        end;
        if memo1.Lines.Strings[0] = '1' then
        begin
          Showmessage(_Msg('¶Ç°e½d¥»ÀÉ®×(JPG)®É,ºô¸ôµo¥Í¿ù»~!!')+_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('¶Ç°e½d¥»ÀÉ®×(JPG)®É,ºô¸ôµo¥Í¿ù»~!!')+_Msg('¿ù»~­ì¦]:')+_Msg('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J'));
          DataLoading(False,False);
          Exit;
        end;
      end;
      Showmessage(_Msg('¶Ç°e§¹¦¨'));
    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.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.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('¸ê°T©|¥¼¤U¸ü§¹¦¨,½Ðµy­Ô©Î­«·s¶i¤J'));
    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);  //²M±¼ÀˮְO¿ý
  SetDocDirtoSelected(MyTreeNode1,FirstDocDir);
  TreeView1Click(self);
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,¥÷¼Æ,­¶¼Æ ªº¦^¶Ç¦r¦ê
  //Showmessage(CreateDocnoFrom_Info(NowCaseno));
  //Showmessage(self.CreateCustDocNoFrom_Info(NowCaseno));
   showmessage('FUrl='+FUrl);
   showmessage('FCaseID='+FCaseID);
   showmessage('FMode='+FMode);
   showmessage('FModeName='+FModeName);
   showmessage('FWork_no='+FWork_no);
   showmessage('FUserID='+FUserID);
   showmessage('FUserName='+FUserName);
   showmessage('FUserUnit='+FUserUnit);
   showmessage('FData='+FData);
   showmessage('FVerify='+FVerify);
   showmessage('FReWrite='+FReWrite);
   showmessage('FLanguage='+FLanguage);
   showmessage('FLoanDoc_Value='+FLoanDoc_Value);
   showmessage('FLoanDoc_Enable='+FLoanDoc_Enable);
   showmessage('FUseProxy='+FUseProxy);
   showmessage('FC_DocNoList='+FC_DocNoList);
   showmessage('FC_DocNameList='+FC_DocNameList);
   showmessage('FFixFileList='+FFixFileList);
   showmessage('FIs_In_Wh='+FIs_In_Wh);
   showmessage('FOldCaseInfo='+FOldCaseInfo);
   showmessage('FPrintyn='+FPrintyn);
   showmessage('FIs_OldCase='+FIs_OldCase);
   showmessage('FCustDocYN='+FCustDocYN);
end;
procedure TCB_IMGPSScanX.Button4Click(Sender: TObject);
begin
  Showmessage(self.Doc_Inf_List.Text);
end;
procedure TCB_IMGPSScanX.StatrTwainScan;
var ScanInfo    : TScanInfo;
   i : Integer;
begin
  if not Scanner.IsConfigured then
  begin
    ShowMessage(_Msg('TWAIN ±½ºËÅX°Ê©|¥¼¦w¸Ë'));
    Exit;
  end;
  FillChar(ScanInfo, SizeOf(ScanInfo), 0);
  ScanInfo.MultiPage := True;
  ScanInfo.ImageCount := 0;
  ScanInfo.Graphic := TTiffGraphic.Create;
  try
    ISB := nil; //³W¹s
    Scanner.RequestedXDpi := ScanDpi;
    Scanner.RequestedYDpi := ScanDpi;
    Scanner.RequestedImageFormat := ScanColor;
    Scanner.ShowUI := TwainShowUI;
    Try
      Scanner.OpenSource;
      Scanner.Duplex := ScanDuplex; //Âù­±
      //Scanner.FEEDERENABLED  := not ScanFlatCB.Checked;     // ¥ý®³±¼¥­¥x
      If ScanImgSetUse Then
      begin
        Scanner.ScanBrightness := ScanBright;
        Scanner.ScanContrast := ScanContrast;
      end;
    except
      Showmessage(_Msg('±½ºË¾¹µo¥Í¿ù»~!!'));
      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);  //±ÛÂà«á¦A­«¨ú¤@¦¸±ø½X¸ê°T
          Break;
        end;
      end;
      //¼v¹³¤Ï¦V
      IF ScannerReverse then
        NegativeImg(pScanInfo^.Graphic);
      //¶É±×ÁB¥¿
      IF ScanDeskew Then
        DeskewImg(pScanInfo^.Graphic);
      //²M¶ÂÃä
      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);  //±ÛÂà«á¦A­«¨ú¤@¦¸±ø½X¸ê°T
            Break;
          end;
        end;
        pScanInfo^.Graphic.Compression := tcJpeg;
        pScanInfo^.Graphic.JpegQuality := 70;
    end
    else if pScanInfo^.Graphic.ImageFormat = ifColor256 Then
    begin
      //Ext := '.jpg';
      ConvertToGray(pScanInfo^.Graphic);
      pScanInfo^.Graphic.Compression := tcJpeg;
      pScanInfo^.Graphic.JpegQuality := 70;
    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);  //±ÛÂà«á¦A­«¨ú¤@¦¸±ø½X¸ê°T
          Break;
        end;
      end;
      pScanInfo^.Graphic.Compression := tcJpeg;
      pScanInfo^.Graphic.JpegQuality := 70;
    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;    //¥ý¨ú¥ªÃ䪺¼v¹³
      iRect.Top := 0;
      iRect.Right := pScanInfo^.Graphic.Width;
      iRect.Bottom := pScanInfo^.Graphic.Height;
      CropImg(iGraphic_First,iRect);
      iGraphic_Sec.Assign(pScanInfo^.Graphic);         //¦A¨ú¥kÃ䪺¼v¹³
      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;
    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);
        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 := 30;
              //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  //²M·¡Åã¥Ü
        begin
          ISB := FindISB2View(VMode);
          ISB.AntiAliased := True;
          ISB.ZoomMode := zmFittopage;
          ISB.LoadFromFile(PEFileName,1);
        end
        Else if ScanImgShowMode = 1 then  //¼Ò½kÅã¥Ü
        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   //¨S¦³¤£Àx¦s¼v¹³ªº±ø½X
        //begin
          if FormID = '' then
          begin
            FormID := BarCode2FormID; //¨ú¥XFormID
          end;
          if (FormID <> '') and ISGuideFormID(FormID) then
            NowGuideFormID := FormID;
          if (not (FindDivFormCode(FormID))) and (NowGuideFormID <> '') {and (FormID = '')} then
            FormID := NowGuideFormID;
          DocNo := FormCode2DocNo(FormID);
          if (FormID <>'') and FindDivFormCode(FormID) Then  //¥u§ä¤À®×­¶¤Wªº®×¥ó±ø½X
          begin
            ScanInfo.ImageCount := 0;
            ClearView(1);
            ContextList.Clear;
            Context_DocnoList.Clear;
            ClearCaseIndex;                //²M±¼®×¥ó¯Á¤Þ
            ScanCaseno := BarCode2CaseID; //¨ú¥X®×¥ó½s¸¹
            NowGuideFormID := '';
          end;
          if ScanCaseno = '' then //¤@¶}©l³£¨S§ä¨ì
          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);
          if DocNoNeedDiv(DocNo) then   //­n¤À¥÷¼Æ
          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   //¨S¦³¤£Àx¦s¼v¹³ªº±ø½X
          begin
            if ScanInfo.ImageCount = 0 then
            begin
              SetCaseList('A',-1,ScanCaseno);
              WriteCaseIndex(ImageSavePath + ScanCaseno+'\');  //¼g¤J®×¥ó¯Á¤Þ
              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; //¨ú¥XFormID
        if (FormID <> '') and ISGuideFormID(FormID) then
          NowGuideFormID := FormID;
        //Showmessage('A:'+FormID+#13+'B:'+NowGuideFormID);
        if (NowGuideFormID <> '') {and (FormID = '')} then
          FormID := NowGuideFormID;
        DocNo := FormCode2DocNo(FormID);
        ScanDocDir := FindLastestDocDir(ScanCaseno,DocNo);
        if DocNoNeedDiv(DocNo) then   //­n¤À¥÷¼Æ
        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
        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;
  /////¤U¸ü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('Àˬdµù¥UÀÉ®×®É,ºô¸ôµo¥Í¿ù»~!!')+_Msg('¿ù»~¥N½X:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
    Exit;
  end;
  /////¤U¸üMPSLIC_SCAN.lic /////
  /////¤U¸üMPSLIC_VIEW.lic //////
  EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
  //SendData := 'checktime='+EnCodeDateTime+'&workno=CW&formid=MPSLIC_VIEW.lic'+'&mode=sample';  //³o¸Ì§ï¦¨¥²¶Ç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('Àˬdµù¥UÀÉ®×®É,ºô¸ôµo¥Í¿ù»~!!')+_Msg('¿ù»~¥N½X:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
    Exit;
  end;
  /////¤U¸ü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('¶×¥X§¹¦¨,¶×¥XÀÉ®×:'+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('µLªk¸ÑÀ£ÁY');
      if not FileExists(ZipPath+'mps.dat') then
      begin
        Showmessage('®æ¦¡¤£²Å,µLªk¶×¤J');
        Exit;
      end;
      S.LoadFromFile(ZipPath+'mps.dat');
      if (En_DecryptionStr_Base64('D',S.Strings[0],'9338430')<> ServerDate) then
      begin
        Showmessage('ÀÉ®×¹L´Á,µLªk¶×¤J');
        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
        /////¤W¶Ç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('Àˬdµù¥U®É,ºô¸ôµo¥Í¿ù»~!!')+_MSg('¿ù»~¥N½X:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason+')');
          DataLoading(False,False);
          Exit;
        end;
        if memo1.Lines.Strings[0] = '1' then
        begin
          Showmessage(_Msg('Àˬdµù¥U®É,ºô¸ôµo¥Í¿ù»~!!')+_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('Àˬdµù¥U®É,ºô¸ôµo¥Í¿ù»~!!')+_Msg('¿ù»~­ì¦]:')+_Msg('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J'));
          DataLoading(False,False);
          Exit;
        end;
        /////¤W¶ÇMPSLICXXXX.lic /////
      end;
    end;
  Finally
  OpenDialog1.Free;
  S.Free;
  _DelTree(ZipPath);
  end;
  Showmessage('¶×¤J§¹¦¨');
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 Âà¦h°ê»y¨¥¦r¦ê¥Î
  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
      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;
  IF (ImageScrollBox1.FileName <> FileName) and (FileName <> '') then
  begin
    ImageScrollBox1.LoadFromFile(FileName,1);
    FindPoint(ImageScrollBox1.Graphic,UpLPoint,UpRPoint,DownLPoint,'');
    ClearLine(ISB_BW.Graphic,bt);
    ISB_BW.Redraw(True);
    Application.ProcessMessages;
  end;
  If ImageScrollBox1.FileName <> '' Then
  begin
    Xdpi := ImagescrollBox1.Graphic.XDotsPerInch;
    Ydpi := ImagescrollBox1.Graphic.YDotsPerInch;
    H := ImageScrollBox1.Graphic.Height;
    W := ImageScrollBox1.Graphic.Width;
    OMRRect := CM_Str2Rect(Site,Xdpi,UpLPoint);
    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);
  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'¼g¤J
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»¡±½ºË¾¹¼t°Ó¦³½Õ³]©w­n·s¼W¦¹¿ï¶µ¬O§_±Ò°Ê
        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»¡±½ºË¾¹¼t°Ó¦³½Õ³]©w­n·s¼W¦¹¿ï¶µ¬O§_±Ò°Ê
        end;
    end;
  finally
  ini.Free;
  end;
end;
Procedure TCB_IMGPSScanX.GetDefScanIni; //¨ú±o±½ºËªº¹w³]­È
var
  i : Integer;
  PARA_NO,PARA_CONTENT: String;
begin
  Def_DeviceDelete := True;
  Def_DeviceDeleteSize := 3072;  //20120821 §ï¦¨3000(¥X²{)
  Def_ScannerReverse := False;
  Def_BoardClear := False;
  Def_ScanDpi := 300;
  Def_ScanDuplex := False;
  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  //¬O§_»Ý¤Ï¬Û
    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  //¬O§_²M¶ÂÃä
    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  //¬O§_Âù­±±½ºË
    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 //¬O§_¶É±×ÁB¥¿
    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  //¬O§_¨Ï¥Î«G«×¹ï¤ñ³]©w
    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 //«G«×
    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     //¨ú¶i¥óºI¤î®É¶¡
    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     //±½´y´£¥Ü¦r¦ê
    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     //±½´y¤£¦sÀɤ§ªí³æ¥N¸¹
    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;
  end;
  ScanDuplex := Def_ScanDuplex;
end;
procedure TCB_IMGPSScanX.HTTPSClientCertificateValidate(Sender: TObject;
  X509Certificate: TElX509Certificate; var Validate: Boolean);
begin
  Validate := 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
  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);
  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('¿ù»~¥N½X:')+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ªº®É¶¡®t
    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('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J');
    Result := False;
    Exit;
  end;
end;
Function TCB_IMGPSScanX.GetSetInf1 : Boolean; //¨ú¨t²Î³]©w¸ê°TMode1 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('¿ù»~¥N½X:')+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('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J');
    Result := False;
    Exit;
  end;
end;
Function TCB_IMGPSScanX.GetSetInf2 : Boolean; //¨ú¨t²Î³]©w¸ê°TMode2  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('¿ù»~¥N½X:')+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('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J');
    Result := False;
    Exit;
  end;
end;
Function TCB_IMGPSScanX.GetSetInf3 : Boolean; //¨ú¨t²Î³]©w¸ê°Tmode3  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('¿ù»~¥N½X:')+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('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J');
    Result := False;
    Exit;
  end;
end;
Function TCB_IMGPSScanX.GetSetInf4 : Boolean; //¨ú¨t²Î³]©w¸ê°Tmode4  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('¿ù»~¥N½X:')+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('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J');
    Result := False;
    Exit;
  end;
  CheckRule2OMRErrInfo;
end;
Function TCB_IMGPSScanX.GetSetInf5 : Boolean; //¨ú¨t²Î³]©w¸ê°Tmode5  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('¿ù»~¥N½X:')+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('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J');
    Result := False;
    Exit;
  end;
end;
Function TCB_IMGPSScanX.GetSetInf6 : Boolean; //¨ú¨t²Î³]©w¸ê°Tmode5  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('¿ù»~¥N½X:')+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('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J');
    Result := False;
    Exit;
  end;
end;
Function TCB_IMGPSScanX.GetSetInf7 : Boolean; //¨ú¨t²Î³]©w¸ê°Tmode5  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('¿ù»~¥N½X:')+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('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J');
    Result := False;
    Exit;
  end;
end;
Procedure TCB_IMGPSScanX.SetFormID_DocNo; //±NFormID¤ÎDocno©â¥X¨Ó¥t¦s¤Jlist¸Ì    20130403¼W¥[
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; //±N­n¤J®wªºDocNo©â¥X¨Ó¥t¦s¤Jlist¸Ì
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;
Procedure TCB_IMGPSScanX.CheckRule2OMRErrInfo;   //ÀˮֳW«h¶ñ¤JOMRErrINFo 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    //¥i©¿²¤
      Else if GetFindResult('MESG_DISP_TYPE') = '2' then
        OMRErrInfo[i].Ignore := False;  //¤£¥i©¿²¤
      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); // §R°£ÀÉ®×  (µLªk±o¨ìDocDir¥Î)
var
  i : Integer;
  FileList:TStringlist;
  DocDir : String;
begin
  DeleteFile(Path+FileName);
  DocDir := Path2DocDir(Path,CaseID);
  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);  //§R°£«ü©wFormID¤å¥ó
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
        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  //§R¥¼µù¥U¤å¥ó
    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;  //§R°£«ü©wDocNo¤å¥ó
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; //¦³§R¨ì«ü©w¤å¥ó
    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;
Procedure TCB_IMGPSScanX.DeleteShowFile(Path:String); //§R°£Åã¥Ü¤¤ªº¼v¹³
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;  //¨ú°O¿ýªº¤å¥ó_ª©¥»­¶¼Æ
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 : TStringlist;
  FormCode,iPage : String;
begin
  Count := 1;
  S := TStringlist.Create;
  try
    S.LoadFromFile(ImageSavePath+CaseID+'\upload\Context.dat');
    for I := 0 to pages-1 do
    begin
      iPage := Add_Zoo(i,2);
      for n := 0 to S.Count - 1 do
      begin
        FormCode := FileName2FormCode(S.Strings[n]);
        //Showmessage('1:'+version+','+FormCode2Version(FormCode)+','+DocNo+','+FormCode2DocNo(FormCode)+','+iPage+','+FormCode2Page(FormCode));
        if (version = FormCode2Version(FormCode)) and (DocNo = FormCode2DocNo(FormCode)) and (ipage = FormCode2Page(FormCode)) then
        begin
          //Showmessage(inttostr(Count+1));
          Inc(Count);
          Break;   //§ä¨ì¤F...Â÷¶}
        end;
      end;
    end;
  finally
  S.Free;
  end;
  Result := Count;
end;
Function TCB_IMGPSScanX.FindFormCodePages(CaseID,FormCode:String):Integer;  //­pºâ®×¥ó¸Ì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
      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;   //¨ú°O¿ýªº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); //®×¥óªº¼v¹³ÁY©ñ
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(CaseID,FileName);  //¨Ì¤Q¦r©w¦ìÂI°µÁY©ñ
    end;
  finally
  S.Free;
  end;
end;
Procedure TCB_IMGPSScanX.ImageReSize(CaseID,FileName:String);  //¨Ì¤Q¦r©w¦ìÂI°µÁY©ñ
var
  FormID : String;
  DH,DW : String;
  NowW,NowH : Integer;
  ANCHOR : String; //¬O§_¦³¤Q¦r½u
  SizeStr : String;
  S : TStringlist;
  v,v1:Integer;
begin
  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);
    if ((ANCHOR = 'ANCHOR') or (ANCHOR = 'FRAME')) and (DH <> '') and (DW <> '') then  //¦³¤Q¦r©w¦ìÂI
    begin
      ImageScrollBox1.LoadFromFile(ImageSavePath+CaseID+'\Upload\'+FileName,1);
      //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);
      v := 5;
      v1 := length(SizeStr);
      IF (SizeStr <> '') and (Copy(SizeStr,1,v) <> 'ERROR') then
      begin
        ImageScrollBox1.SaveToFile(ImageSavePath+CaseID+'\Upload\'+FileName);
        S := TStringlist.Create;                     ///20110422®³±¼ ´«¦¨¤W¶Ç¤~°µ
        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   //¥¼§ä¨ì¤T­Ó©w¦ìÂI
      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);  //¨Ì¤Q¦r©w¦ìÂI°µÁY©ñ(¼È¦sÀÉ)
var
  DH,DW : String;
  ANCHOR : String; //¬O§_¦³¤Q¦r½u
  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  //¦³¤Q¦r©w¦ìÂI
    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; //¶Ç°e®×¥ó
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; //¬O§_¦³ªþ¥ó Y:¦³ N:¨S¦³
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;
  if (FMode = 'NSCAN') or (FMode = 'ASCAN') or (FMode = 'DSCAN') or (FMode = 'SSCAN') or (FMode = 'MSCAN') or (FMode = 'RI_SCAN') or (FMode = 'RSCAN') or (FMode = 'ESCAN') then
  begin
    //Showmessage('1');
    UpformID := GetCaseFormID(Path);
    {if UpformID = '' then             //20131213  yuu»¡¤£ºÞ¥Dform
    begin
      Showmessage(_msg('¨ú¤£¨ì¥DFormID!!'));
      Result := False;
      DataLoading(False,False);
      Exit;
    end;}
  end;
  CaseResort2Scanlist(Path); //ÀɦW·Ó³]©w±Æ§Ç²£¥Íscanlist.dat
  //CaseResort(Path);  //ÀɦW·Ó³]©w±Æ§Ç
  CreateFormID_FormName(Path,CaseID);  //²£¥ÍFormID_FormName.dat
  CreateDocNo_DocName(Path,CaseID); //²£¥ÍDocNo_Name.dat
  Doc_Data := CreateDocNo_Info(CaseID);  //²£¥Í«OºÞ³U¤å¥ó Docno,¥÷¼Æ,­¶¼Æ;Docno,¥÷¼Æ,­¶¼Æ ªº¦^¶Ç¦r¦ê
  Doc_Data1 := CreateCustDocNo_Info(CaseID);  //²£¥Í¦Û©w¤å¥ó Docname,¥÷¼Æ,­¶¼Æ;Docno,¥÷¼Æ,­¶¼Æ ªº¦^¶Ç¦r¦ê
  In_Doc1 := CreateDocnoFrom_Info(CaseID); //²£¥Í³Q¤Þ¶iªº«OºÞ³U¤å¥ó¸ê°T  Docno[tab]¥÷¼Æ[tab]®×¥ó½s¸¹#13#10Docno[tab]¥÷¼Æ[tab]®×¥ó½s¸¹
  In_Doc2 := CreateCustDocNoFrom_Info(CaseID);   //²£¥Í³Q¤Þ¶iªº¦Û©w¤å¥ó¸ê°T  Docno[tab]¥÷¼Æ[tab]®×¥ó½s¸¹#13#10Docno[tab]¥÷¼Æ[tab]®×¥ó½s¸¹
  AttachYN := CreateAttach_Info(CaseID); //¬O§_ÁÙ¦³ªþ¥ó Y:¦³ N:¨S¦³
  //self.ReadCaseIndex()
  ReadCaseIndex(Path);
  //LoanDoc := 'Y';
  //²£¥Í¾B¸n¼v¹³
  if FWork_No = 'CW' then
    HaveMask := Case2Mask(Path,MaskPath);
  //²£¥Í¾B¸n¼v¹³
 // S := S +#13+'5-->'+ Timetostr(now);
  //////À£ÀÉ/////
  ZipMainFile(Path,Path,'Img.zip');
  if HaveMask then
    ZipMaskFile(Path,MaskPath,Path,'MaskImg.zip');  //¦³¾B¸n³]©wªº¤~²£¥Í
  /////À£ÀÉ////
  ////¤W¶Ç/////
  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+'&in_doc1='+HTTPEncode(UTF8Encode(In_Doc1))+'&in_doc2='+HTTPEncode(UTF8Encode(In_Doc2));
  if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/caseupload',SendData,'file',Path+'Img.zip',FReWrite,Memo1,False) then
  begin
    Showmessage(Format(_Msg('¶Ç°e®×¥ó½s¸¹(%s)ÀÉ®×®É,ºô¸ôµo¥Í¿ù»~!!'+_Msg('¿ù»~¥N½X:')),[CaseID])+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
    Result := False;
    Exit;
  end;
  if memo1.Lines.Strings[0] = '1' then
  begin
    Showmessage(Format(_Msg('¶Ç°e®×¥ó½s¸¹(%s)ÀÉ®×®É,ºô¸ôµo¥Í¿ù»~!!')+_Msg('¿ù»~­ì¦]:'),[CaseID])+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('¶Ç°e®×¥ó½s¸¹(%s)ÀÉ®×®É,ºô¸ôµo¥Í¿ù»~!!')+_Msg('¿ù»~­ì¦]:')+_Msg('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J'),[CaseID]));
    Result := False;
    Exit;
  end;
  ////¤W¶Ç////
  if FMode = 'ESCAN' then    //¤W¶ÇÂÂ¥ó¤Þ¤JÀÉ®×      //20140616 ­ì¥»¥ý·hÂÂ¥ó¦A·h·s¥ó,§ï¬°¥ý·h·s¥ó¦A·hÂÂ¥ó
  begin
    if not TransOldCaseFile(ImageSavePath+CaseID+'\') then
    begin
      Result := False;
      Exit;
    end;
  end;
  // ©I¥sServer§¹¦¨ /////
  {If not CaseComplete(Path,CaseID,MainCase) Then
  begin
    Showmessage(_Msg('³qª¾®×¥ó¶Ç°e§¹¦¨®É,ºô¸ôµo¥Í¿ù»~!!')+HttpErrStr);
    DataLoading(False,False);
    Result := False;
    Exit;
  end;  }
  /// ©I¥sServer§¹¦¨////
  ////§RÀÉ////
  //_DelTree(Path);  //·|¥u§RTransPath
  _DelTree(ImageSavePath+CaseID);
  SetCaseList('D',-1,CaseID);
  ////§RÀÉ////
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¥X¨Ó
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¥X¨Ó
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¥X¨Ó
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ªºÃѧO¦r¥X¨Ó(°O¤§«eÂI¿ï¥Î)
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('¿ù»~¥N½X:')+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('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J');
      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«e¥x¶×¤J¥ó¨S¦³¼v¹³¬O¹ïªº
      begin
        SC.Clear;
        SC.SaveToFile(DPath+'Context.dat');
      end
      Else
      begin
        HttpErrStr := _Msg('§ä¤£¨ì¼v¹³');
        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  //´À´«ªº¥ý§R¦A¥[  20101026 User¥Ñ§RFormCode§ï§RDocNo
        begin
          //DeleteFormCodeFile(DPath,FormID);
          ContextList.LoadFromFile(DPath+'Context.dat');
          DeleteDocNoFile(DPath,DocNo);
        end;
      end;
    end;
    for I := 0 to SC.Count - 1 do   //½Æ»s¸É¥R¶i¨Óªº¼v¹³
    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;
  ///¥[¤Jªº¹q¤lÀɶפJ®×¥ó¸Ì
  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=';
  if not dnFile_Get(HTTPSClient,Furl,'service/imgpsc/IMGPSC04/case',SendData,Path+CaseID+'.zip',FReWrite,Memo1,False,DownImgStatus) then
  begin
    HttpErrStr := _Msg('¿ù»~¥N½X:')+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('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J');
    Result := False;
    Exit;
  end;
  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('§ä¤£¨ì¼v¹³');
    Result := True;
    Exit;
  end;
end;
Function TCB_IMGPSScanX.GetNoNameCase(Path:String):String; //¨ú¥¼°t¸¹XXXX
var
  i : Integer;
begin
  for i := 1 to 9999 do
  begin
    if Not DirectoryExists(Path+_Msg('¥¼°t¸¹')+Add_Zoo(i,4)) then
    begin
      Result := _Msg('¥¼°t¸¹')+Add_Zoo(i,4);
      Break;
    end;
  end;
end;
Procedure TCB_IMGPSScanX.CaseResort(Path:String); //®×¥óªºÀÉ®×­«·s±Æ§Ç(¦¸¤å¥ó¨Ì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    //¦bFormID¦³³]©wªº   //¥D¤å¥ó ·Ó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); //±q­ì¦³¼Æ¶q¥[1¶}©l½s
        NewName := Add_Zoo(S.Count+x,3)+FileName2NoQuene_Filename(OldName); //±q­ì¦³¼Æ¶q¥[1¶}©l½s
        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½X+±½ºË¶¶§Ç±Æ   20110512¬°¤F¬Y­Ó¤å¥ó­n¥ý¥´ªº­ì¦]­n¨D§ï
  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); //±q­ì¦³¼Æ¶q¥[1¶}©l½s
        S.Strings[n] := '*'+S.Strings[n];
        S1.Add(OldName+','+NewName);
      end;
    end;
  end;}
  for I := 0 to Doc_Inf_List.Count - 1 do  //¥D¤å¥ó ·Ó¤å¥ó¥N½X+±½ºË¶¶§Ç±Æ   20101101§ï   20110512±ß¤W¤S»¡§ï¦^¨Ó
  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); //±q­ì¦³¼Æ¶q¥[1¶}©l½s
        NewName := Add_Zoo(S.Count+x,3)+FileName2NoQuene_Filename(OldName); //±q­ì¦³¼Æ¶q¥[1¶}©l½s
        S.Strings[n] := '*'+S.Strings[n];
        S1.Add(OldName+','+NewName);
      end;
    end;
  end;
  for I := 0 to Doc_Inf_List.Count - 1 do  //¦¸¤å¥ó ·Ó¤å¥ó¥N½X+±½ºË¶¶§Ç±Æ   20101101§ï   20110512±ß¤W¤S»¡§ï¦^¨Ó
  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); //±q­ì¦³¼Æ¶q¥[1¶}©l½s
        NewName := Add_Zoo(S.Count+x,3)+FileName2NoQuene_Filename(OldName); //±q­ì¦³¼Æ¶q¥[1¶}©l½s
        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); //±q­ì¦³¼Æ¶q¥[1¶}©l½s
        S.Strings[n] := '*'+S.Strings[n];
        S1.Add(OldName+','+NewName);
      end;
    end;
  end;}
  for i := 0 to S.Count - 1 do   //FormID¨S³]©wªº©Îªþ¥ó
  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  //¶}©lÂà´«ÀɦW
  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); //®×¥óªºÀÉ®×­«·s±Æ§Çµ¹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    //¦bFormID¦³³]©wªº   //¥D¤å¥ó ·Ó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); //±q­ì¦³¼Æ¶q¥[1¶}©l½s
        NewName := Add_Zoo(S.Count+x,3)+FileName2NoQuene_Filename(OldName); //±q­ì¦³¼Æ¶q¥[1¶}©l½s
        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¬°¤F¬Y­Ó¤å¥ó­n¥ý¥´ªº­ì¦]­n¨D§ï
  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); //±q­ì¦³¼Æ¶q¥[1¶}©l½s
        NewName := Add_Zoo(S.Count+x,3)+FileName2NoQuene_Filename(OldName); //±q­ì¦³¼Æ¶q¥[1¶}©l½s
        S.Strings[n] := '*'+S.Strings[n];
        S1.Add(OldName+','+NewName);
      end;
    end;
  end;
  {for I := 0 to Doc_Inf_List.Count - 1 do  //¦¸¤å¥ó ·Ó¤å¥ó¥N½X+±½ºË¶¶§Ç±Æ   20101101§ï   20110512±ß¤W¤S»¡§ï¦^¨Ó
  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); //±q­ì¦³¼Æ¶q¥[1¶}©l½s
        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); //±q­ì¦³¼Æ¶q¥[1¶}©l½s
        S.Strings[n] := '*'+S.Strings[n];
        S1.Add(OldName+','+NewName);
      end;
    end;
  end;}
  for i := 0 to S.Count - 1 do   //FormID¨S³]©wªº©Îªþ¥ó
  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  //¶}©lÂà´«ÀɦW
  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); //¦C¥X®×¥ó¸Ìªº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
      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); //¦C¥X®×¥ó¸Ìªº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); //²M±¼ÀË®ÖÀÉ®×
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®³±¼  ¦]¬°°O¿ý·|¤£¨£
    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:¥[¤J,I:´¡¤J,D:§R°£,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:¥[¤J,I:´¡¤J,D:§R°£,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 ­×§ï§R°£¤å¥ó®É¤]°O¤@µ§²§°Ê,§R±¼·|µLªk³qª¾«eºÝºô­¶¦³²§°Ê
              SetRecordEditedDocDir('A',CaseNo,CaseDocNoList.Strings[Index]);
              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 ­×§ï§R°£¤å¥ó®É¤]°O¤@µ§²§°Ê,§R±¼·|µLªk³qª¾«eºÝºô­¶¦³²§°Ê
                  SetRecordEditedDocDir('A',CaseNo,CaseDocNoList.Strings[i]);
                  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('¦s¤F');
    end;
  finally
  CaseDocNoList.Free;
  CaseDocNo_CopiesList.Free;
  end;
end;
Procedure TCB_IMGPSScanX.SetContextList(Mode:Char;Index:Integer;CaseNo,DocDir,FileName:String);  //'A:¥[¤J,I:´¡¤J,D:§R°£,E:­×§ï'
var
  i : Integer;
  //DocNo:String;
begin
  //DocNo := FormCode2DocNo(FileName2FormCode(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);  //°O¿ý¤å¥ó¦³²§°Ê
  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;
Function TCB_IMGPSScanX.checkCaseOMRDone:Boolean;  //Àˬd®×¥ó¬O§_§¹¦¨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.CheckCaseID_OK:Boolean;  //Àˬd¬O§_¦³¥¼°t¸¹ªº®×¥ó
var
  i,n : Integer;
begin
  Result := True;
  for i := 0 to NewTreeNode.Count - 1 do
  begin
    if Pos(_msg('¥¼°t¸¹'),NewTreeNode.Item[i].Text) > 0 then
    begin
      Result := False;
      Break;
    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); //«ü©wFormID§ó´«¦¨·sªºFormID
var
  i : Integer;
  OldFileList,NewFileList : TStringlist;
  NewDocNo,NewDocDir:String;
  FormID : String;
  OldFile,NewFile:String;
  Ext : String;
begin
  OldFileList := TStringlist.Create;
  NewFileList := TStringlist.Create;
  try
    NewDocNo := FormCode2DocNo(NewFormID);
    NewDocDir := FindLastestDocDir(CaseID,NewDocNo);
    if NewDocDir = '' then
      NewDocDir := NewDocNo;
    if DocNoNeedDiv(NewDocNo) and (FormCode2Page(NewFormID)='01') then
      NewDocDir := DocNo2DocNoDir(ImageSavePath+CaseID+'\',NewDocNo);
    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;
  end;
end;
Procedure TCB_IMGPSScanX.ShowFileReplace(Path,NewFormID:String);//Åã¥Üªº¼v¹³´«¦¨·sªº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; //±½ºË¼Ò¦¡¬O§_­n°µÀË®Ö
begin
  Result := False;
  if Pos(ScanMode,OMRMode) > 0 then
    Result := True;
end;
Function TCB_IMGPSScanX.GetInputMask:String; //¨ú±o¿é¤Jªº«O³æ¸¹½X
var
  InputMaskForm: TInputMaskForm;
begin
  Result := '';
  ShowText := _msg('¿é¤J«O³æ¸¹½X¤¤');
  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 :TStringlist;
  iDocDir,iDocNo : String;
  i,Count : Integer;
begin
  Count := 0;
  DocDirList := TStringlist.Create;
  FileList := 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   //¤J®w±½´y¤£¬Ý«D¤J®w¤å¥ó
         ((FIs_In_Wh  = 'N') and (DocNoIs_In_WH(iDocNo)))) and
         ((iDocNo <> 'Attach') and (Copy(iDocNo,1,5)<>'ZZZZZ')) then     //«D¤J®w±½´y¤£¬Ý¤J®w¤å¥ó
      begin
        Continue;
      end;}
      if not DocNoAppear(iDocNo) then Continue;
      FileList.Clear;
      if FileExists(Path+CaseID+'\'+iDocDir+'\Context.dat') then
        FileList.LoadFromFile(Path+CaseID+'\'+iDocDir+'\Context.dat');
      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;
  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+',­ì¼e:'+RecWidth+',ªøÅܰÊ:'+ImgHeight+',¼eÅܰÊ:'+ImgWidth);
      S.SaveToFile(TxtName);
    finally
    S.Free;
    end;
  end;
end;
Function TCB_IMGPSScanX.GetCase_PageCount(var CaseCount,PageCount:Integer):Boolean; //¨ú¥X®×¥óªº¼Æ¶q¤Î­¶¼Æ
var
  i,n: Integer;
  CaseList,DocList,FileList : TStringlist;
begin
  Result := False;
  CaseCount := 0;
  PageCount := 0;
  CaseList := TStringlist.Create;
  DocList := TStringlist.Create;
  FileList := TStringlist.Create;
  try
    ImageSavePath := ImagePath;
    CaseList.Clear;
    if FileExists(ImageSavePath + 'CaseList.dat') then
      CaseList.LoadFromFile(ImageSavePath + 'CaseList.dat');
    CaseCount :=  CaseCount+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');
      for n := 0 to DocList.Count - 1 do
      begin
        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.Text);
      PageCount := PageCount+FileList.Count;
      //Showmessage(inttostr(PageCount));
    end;
  Finally
  CaseList.Free;
  DocList.Free;
  FileList.Free;
  end;
  Result := True;
end;
Function TCB_IMGPSScanX.FindNoSaveBarCode : Boolean; //§ä¬O§_¦³¤£­nÀx¦s¼v¹³ªº±ø½X
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¨Ì³W«hÂনCaseID
var
  i : Integer;
  iCaseID : String;
begin
  Result := ''; //¨S§ä¨ì
  iCaseID := '';
  for i := 1 to MpsBarcodeinf.Count-1  do
  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¨Ì³W«hÂনFormID
var
  i : Integer;
  FormID : String;
begin
  Result := ''; //¨S§ä¨ì
  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   //¦³¥i¥ÎªºFormID´NÂ÷¶}
    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
    S.Add(Case_loandoc);
    S.SaveToFile(Path+'CaseIndex.dat');
  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.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; //¨ú¥X¥Ø«eDocNoªº¥÷¼Æ
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; //ÀˬdFormID¬O§_¦s¦b¤å¥ó¸Ì
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');
    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');
    ExeCuteZip(DePath+ZipName,SoPath,ZipFileList,False,False);
    //Showmessage('111');
  finally
  ZipFileList.Free;
  end;
end;
Procedure TCB_IMGPSScanX.ZipMaskFile(SoPath,MarkPath,DePath,ZipName:String); //À£ÁY¾B¸n¼v¹³ÀÉ
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); //¸ÑªR¤Q¦rÂIªº¦r¦ê
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¨ú¥X¤Q¦r¼Ò¦¡
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;   //¤Q¦r¼Ò¦¡ 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­n¨D§ï¦¨¹w³]«á¤£¯à§ï
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];    //¥DÁä­È (³ø»ù³æ¸¹orÄò«O³æ¸¹or«O³æ¸¹½Xor«OÀIÃÒ¸¹or­ì®×¥ó¨ü½s)
      //Result := Format_ID;
      //Handle_No := S.Strings[0];    //¸g¿ì¥N¸¹
      //Cen_Uid := S.Strings[1];      //³Q«O¤HID
      //Cen_Cliname := S.Strings[2];  //³Q«O¤H©m¦W
      //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;  //µù°O¥N½Xµù°OÃþ§OÂà´«  Mode 'ID':¥N½XÂà¦WºÙ;'NAME':¦WºÙÂà¥N½X
var
  i : Integer;
begin
  if Mode = 'ID' then
  begin
    Result := '¦Û¦æ¿é¤J';
    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­È¶ë¤J
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; //§ä«ü©wªº¸ê®Æ
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  //¦b¸ê®Æ¦C«e«á¥[!@! ¥Îposªº¤è¦¡¨Ó§ïµ½³t«×  //20130521µo²{§ä¸ê®Æ·|¦³°ÝÃD
            Continue
          Else   //¤£¹ï.Â÷¶}
          begin
            Find := False;
            Break;
          end;
        end;
        if Find then Break;  // §ä¨ì¤FÂ÷¶}
      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  //¦b¸ê®Æ¦C«e«á¥[!@! ¥Îposªº¤è¦¡¨Ó§ïµ½³t«×
            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);  //¸ê®Æ¸ü¤J¤¤­n°±¤îÂI¿ïªº°Ê§@
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;
begin
  ShowText := _Msg('³B²zÀˮ֥¢±Ñ¤¤,½Ðµy­Ô');
  DataLoading(True,True);
  ErrlistForm := TErrlistForm.Create(Self);
  RejectCase := False;
  S := TStringlist.Create;
  try
    InitialLanguage(ErrlistForm);
    Application.ProcessMessages;
    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+'\';
      if FMode = 'ISCAN' then
        TransPath :=  ImageSavePath + NowCaseNo+'\DownTemp\';
      ShowText := NowCaseNo+_Msg('¸ê®Æ¤W¶Ç¤¤,½Ðµy­Ô');
      DataLoading(True,True);
      if FMode = 'ISCAN' then
      begin
        If Not TransCaseID(TransPath,NowCaseNo,True) Then  //¶Ç°e®×¥ó
        begin
          DataLoading(False,False);
          Exit;
        end;
      end
      Else
      begin
        If Not TransCaseID(TransPath,NowCaseNo,True) Then  //¶Ç°e®×¥ó
        begin
          DataLoading(False,False);
          Exit;
        end;
      end;
      CaseHelpBtn.Visible := False;
      LoadImgFile;
      Showmessage(NowCaseNo+_Msg('¶Ç°e§¹¦¨'));
      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 ­×¥¿³ø»ù³æ¸¹·|¿ù¸mªº°ÝÃD
  S := TStringlist.Create;
  try
    ClearView(1);
    ShowText := CaseID+_Msg('Àˮ֤¤,½Ðµy­Ô');
    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('Àˮ֤¤,½Ðµy­Ô');
      DataLoading(True,True);
      if (NewTreenode.Item[i].ImageIndex <> 7) and (NewTreenode.Item[i].ImageIndex <> 5) then  //Àˮ֧¹¦¨ªº¤£¦AÀË®Ö
      begin
        If OMRCheckCase(CaseID) then  //¦³¦¨¥\
        begin
          S.Add('Y');
          S.SaveToFile(ImageSavePath+CaseID+'\OMRCheckOk.dat');
        end;
      end;
      //MyTreeNode2ReFresh(CaseID);  //­ì¥»¬OOMR³æ¤@®×¥ó,«á§ï¦¨OMR¥þ³¡®×¥ó ©Ò¥H³o­Ó­nmark
    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;  //µe¥X¤å¥ó¦WºÙªº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;
begin
  Result := False;
  FileList := TStringlist.Create;
  CaseDocNoList := TStringlist.Create;
  CaseDocNo_CopiesList := TStringlist.Create;
  StrList := TStringlist.Create;
  try
    CaseNode.ImageIndex := 1;
    CaseNode.SelectedIndex := 1;
    While CaseNode.Count > 0 do  //¥þ§R
    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');
      //Showmessage('aaa '+FileList.Text);
      DocNoCopies := Strtoint(CaseDocNo_CopiesList.Strings[i]);
      DocNoPage := FileList.Count;
      iDocNo := DocNoDir2DocNo(CaseDocNoList.Strings[i]);
      //Showmessage(iDocNo);
      //Showmessage(DocNo2DocName(Caseno,iDocNo));
      {if (((FIs_In_Wh  = 'Y') and (not DocNoIs_In_WH(iDocNo))) or   //¤J®w±½´y¤£¬Ý«D¤J®w¤å¥ó
         ((FIs_In_Wh  = 'N') and (DocNoIs_In_WH(iDocNo)))) and
         ((iDocNo <> 'Attach') and (Copy(iDocNo,1,5)<>'ZZZZZ')) then     //«D¤J®w±½´y¤£¬Ý¤J®w¤å¥ó
      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]));
      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 //¦Û­q¤å¥ó
      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]);  //ÀɦW¨Ì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;
  Finally
  FileList.Free;
  CaseDocNoList.Free;
  CaseDocNo_CopiesList.Free;
  StrList.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.PrtLbClick(Sender: TObject);
var
    Width          : Double;
    Height         : Double;
    i : Integer;
    DocDirList,FileList :TStringlist;
    iDocDir,iDocNo : String;
    PrtDialog : TPrintDialog;
    S : String;
begin
  ShowText := '¦C¦L¤¤,½Ðµy­Ô';
  DataLoading(True,True);
  Case2upload(NowCaseNo);   //²£¥Í­ì¼v¹³µ²ºc
  //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);  //¸ü¤J¦h°ê»y¨¥
    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+FileList.Strings[i]
          Else
            S := S+#13+FileList.Strings[i];
        end;
      end;
      if S = '' then
      begin
        Showmessage(_msg('©|¥¼¿ï¾Ü±ý¦C¦L¤å¥ó'));
        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  ®×¥ó½s¸¹@#,¦~«×@#,·~°È§O@#,¬O§_ÂÂ¥ó@#,¤å¥ó½s¸¹[¥÷¼Æ]@#,¤å¥ó½s¸¹[¥÷¼Æ] tab ®×¥ó½s¸¹@#,¦~«×@#,·~°È§O@#,¬O§_ÂÂ¥ó@#,¤å¥ó½s¸¹[¥÷¼Æ]@#,¤å¥ó½s¸¹[¥÷¼Æ]
    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 ©ñ¦b·s®×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 ±q­þ¨Óªº
        SetUseCase('A',OldPath,OldDocDir,'',NowCaseNo);      //OldDocDir ¥h­þ¤F
        StringtoFile('Y',OldPath+'UseCase.dat');  //­n¤W¶Ç
        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);  //²M±¼ÀˮְO¿ý
    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.LoadImgFile;  //¸ü¤J·s¥ó¤Î´À´«¥ó
Var
  i,v,v1,m : Integer;
  CasePage : integer;
  TempName : String;
  BarName : String;
  DocName : String;
  //S : String;
begin
  ClearView(1);
  PageLV.Clear;
  DisplayPath := '';
  ClearCaseIndex;
  CaseHelpBtn.Visible := False;
  //Del_Sub_NothingPath(ImageSavePath);  //²M±¼®×¥ó¥Ø¿ý¬OªÅªº
  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);  //²M±¼®×¥ó¥Ø¿ý¬OªÅªº
  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]);
    MytreeNode1 := TreeView1.Items.AddChild(NewTreeNode,Format(_Msg('%s-%d­¶'),[CaseList.Strings[i],CasePage]));
    MytreeNode1.ImageIndex := 1;
    MytreeNode1.SelectedIndex := 1;
    DrawDocItem2(MytreeNode1,CaseList.Strings[i]); //ªø¥X¤å¥ó¦WºÙªº¾ð¨Ã¶Ç¦^¬O§_¦³¥Ó½Ð®Ñªº¼v¹³
    if Pos(_Msg('¥¼°t¸¹'),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; //¥þ³¡±j­¢°e¥ó
    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;  //¸ü¤J·s¥ó¤Î´À´«¥ó
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);  //²M±¼®×¥ó¥Ø¿ý¬OªÅªº
  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);  //²M±¼®×¥ó¥Ø¿ý¬OªÅªº
  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]); //ªø¥X¤å¥ó¦WºÙªº¾ð¨Ã¶Ç¦^¬O§_¦³¥Ó½Ð®Ñªº¼v¹³
      DrawDocItem2(MytreeNode1,CaseList.Strings[n]); //ªø¥X¤å¥ó¦WºÙªº¾ð¨Ã¶Ç¦^¬O§_¦³¥Ó½Ð®Ñªº¼v¹³  20140820§ï
      if Pos(_Msg('¥¼°t¸¹'),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; //¥þ³¡±j­¢°e¥ó
      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;
Function TCB_IMGPSScanX.FindDivFormCode(FormCode:String):Boolean; //§ä¦³¨S¦³¤À®×ªº±ø½X
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   //¥i¯à¦³¦h²Õ
      begin
        if S.Strings[i] = iMode then
        begin
          Result := True;
          Break;
        end;
      end;
    end;
  finally
  S.Free;
  end;
end;
Function TCB_IMGPSScanX.CheckAvailable:Boolean; //Àˬd¬O§_¥i¨Ï¥Î¤¸¥ó
var
  SendData : String;
  Msg:String;
  Nowcount,Totalcount,Lic_Idx : Integer;
  MacID,IPStr,LegalDate :String;
begin
  Result := False;
  /////¤U¸ü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('Àˬdµù¥UÀÉ®×®É,ºô¸ôµo¥Í¿ù»~!!')+_Msg('¿ù»~¥N½X:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
    Exit;
  end;
  /////¤U¸üMPSLIC_SCAN.lic ///
  if CheckLicensebyIP_new(LngPath+'MPSLIC_SCAN.lic',MacID,IPStr,LegalDate,Msg,Nowcount,Totalcount,Lic_Idx) then  //Àˬd¬O§_¤vµù¥U¹L
  begin
    if (LegalDate <> '') and (ServerDate>LegalDate) and (Lic_Idx>(Totalcount)) then
    begin
      Showmessage(_Msg('¤w¸g¶W¹L¥i¨Ï¥Î´Á­­¤Î¶W¥X±ÂÅv¼Æ½Ð³sµ¸¼t°Ó'));
      Result := False;
      //Exit;
    end
    else
      Result := True;
  end
  Else
  begin
    if Msg <> '' then
    begin
      Showmessage(Format(_Msg('µù¥UÀɦ³°ÝÃD,½Ð³sµ¸¼t°Ó ¿ù»~­ì¦]:%s'),[Msg]));
      Result := false;
      Exit;
    end
    Else
    begin
      if (LegalDate <> '') and (ServerDate>LegalDate) and (NowCount =0 )  then
      begin
        Lic_Idx := 0;
        Showmessage(_Msg('¤w¸g¶W¹L¥i¨Ï¥Î´Á­­½Ð³sµ¸¼t°Ó'));
        Result := False;
        //Exit;
      end
      //else if (LegalDate = '') and (Nowcount >= Totalcount+10) then  //¶W¹Lµù¥U¼Æ¶q
      else if ((LegalDate = '') or ((LegalDate <> '') and (ServerDate>LegalDate)) ) and (Nowcount >= Totalcount) then  //¶W¹Lµù¥U¼Æ¶q  20150717 yuu»¡®³±¼°eªº10­Ó
      begin
        Lic_Idx := 0;
        Showmessage(_Msg('¤w¸g¶W¹L±ÂÅv¼Æ½Ð³sµ¸¼t°Ó'));
        Result := False;
      end
      Else  //¥¼¶W¹Lµù¥U¼Æ¶q­n¼g¤Jµù¥UÀÉ
      begin
        {if Messagedlg(_Msg('±z©|¥¼µù¥U±ÂÅv¬O§_­n¶i¦æµù¥U??'),MtConfirmation,[mbyes,mbcancel],0) = mrcancel then
        begin
          Result := False;
          Exit;
        end;}
        ShowText := _Msg('±ÂÅv¤¤,½Ðµy­Ô');
        AddLicense(LngPath+'MPSLIC_SCAN.lic',MacID,IPStr,Msg);
        Nowcount := Nowcount + 1;
        DataLoading(True,True);
        /////¤W¶Ç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('Àˬdµù¥U®É,ºô¸ôµo¥Í¿ù»~!!')+_MSg('¿ù»~¥N½X:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason+')');
          DataLoading(False,False);
          Exit;
        end;
        if memo1.Lines.Strings[0] = '1' then
        begin
          Showmessage(_Msg('Àˬdµù¥U®É,ºô¸ôµo¥Í¿ù»~!!')+_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('Àˬdµù¥U®É,ºô¸ôµo¥Í¿ù»~!!')+_Msg('¿ù»~­ì¦]:')+_Msg('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J'));
          DataLoading(False,False);
          Exit;
        end;
        /////¤W¶ÇMPSLICSCAN.lic /////
        //Sleep(30000);    //²Ä¤@¦¸µù¥UºÎ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 := 'µù¥U¸¹:'+MacID+' ³Ñ¾lµù¥U¼Æ:'+inttostr(Totalcount-Nowcount);
  if LegalDate <> '' then
    StatusBar1.Panels[4].Text := '*µù¥U¸¹:'+MacID+'('+inttostr(Lic_Idx)+')'+' ³Ñ¾lµù¥U¼Æ:'+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;//²£¥Í¾B¸n¼v¹³
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+FormID+'.xml') then  //¨S¦³Xml´N¤£¥Î¾B¸n
      begin
        XT.LoadFromFile(CheckXmlPath+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;  //¦³³]©w
            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; //¬O§_¬OA3­n¤Á¼v¹³
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;
  if FormIDCount = 2 then
  begin
    Result := True;
  end;
end;
Function TCB_IMGPSScanX.GetNewCustomDocNo(Path,DocName:String):String; //¨ú¥X¥¼¨Ï¥Îªº¦Û­q¤å¥ó¥N¸¹
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 //¤£¬O¤J®w¤å¥ó
      DocNo := 'YYYYY'+Add_Zoo(Ct,3);
    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_¦Û©w¤å¥ó¦WºÙ  001_¦Û©w¤å¥ó¦WºÙ
    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('¤å¥ó¦WºÙ¤w¦s¦b');
        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; //¨ú¥X¦Û©w¤å¥ó¦WºÙ
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; //¨ú¥X¦Û©w¤å¥ó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; //¨ú¥X¦Û©w¤å¥ó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; //´M§ä¦Û©w¤å¥ó¦WºÙ¬O§_¦s¦b
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.DeleteCustomDocDir(Path,DocNo:String); //§R°£¦Û©w¤å¥ó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; //¶Ç¤JªºFormID¬O§_¹w³]¦C¦L
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 := '¼v¹³¦C¦L';
      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('¦C¦L¤H­û:')+LoginID+' '+_Msg('¦C¦L¤À¦æ:')+FUserUnit+' '+_Msg('¦C¦L¤é´Á:')+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       := '¼v¹³¦C¦L';
      GraphicPrinter.Print(ImageScrollBox1.Graphic);
  end;
begin
  S := TStringlist.Create;
  GraphicPrinter := TDibGraphicPrinter.Create;
  PrtDialog := TPrintDialog.Create(self);
  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; //§ä¥X³Ì·sªº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;
Procedure TCB_IMGPSScanX.Create_Cust_DocDir(CaseID:String); //²£¥Í¥~­±¶Ç¤Jªº¤å¥ó¥N¸¹¤Î¦Û©w¤å¥ó
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];
        //Â¥󤣪ø¥X¿ù»~ªº¤å¥ó¥X¨Ó
        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  //¦s¦b¤F
            Continue;
          if (DocNo_Ct = 1) and DirectoryExists(ImageSavePath+CaseID+'\'+DocNo) then  //¦s¦b¤F  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   //¤£¤À¥÷ªº¨q¼Æ
          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); //±N®ץ÷¼ÆÂন·s³W«h
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 ¦]Âà®׿ù»~¥ó·|¥X²{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);//±N®תº¿ù»~FormID§ï¥¿½Tªº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º|¥[³o­Ó§PÂ_³y¦¨¦Û­q¤å¥ó¦ý¨S¼v¹³·|¥X¿ù»~°T®§
        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);  //°O¿ý³Q²§°Êªº¤å¥ó¥Ø¿ý  'A:¥[¤JD:§R±¼'
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¬O§_¬°¤J®w¤å¥ó
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); //±NDocDir¸Ìªº¤å¥ó½s¸¹±Æ§Ç
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');
      ////¨ú¥XFormID/////
      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 //¬d¤@¤UFORMID¬O§_¤w¸g¦s¦b¤F
        begin
          if FormID = FormIDList.Strings[n] then
          begin
            Exists := True;
            Break;
          end;
        end;
        if not Exists then
          FormIDList.Add(FormID);
      end;
      FormIDList.Sort;
      //±Æ§Ç«á²£­n§ó¦Wªº²M³æ
      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;
      //§ó¦W¦¨·s¶¶§ÇªºÀɦW
      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;
      //¥h±¼@¶}ÀY
      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¬O§_¬°¤J®w¤å¥ó
var
  i : Integer;
begin
  Result := False;
  if (Copy(DocNo,1,5)='ZZZZZ') then //20140728 yuu »¡¦Û­q¤å¥ó¤]¬O¤J®w¤å¥ó
  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]));
        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;
      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; //Àˬd¿ï¾Üªº¼v¹³¬O§_¦³¥]§t³Q¤Þ¥Îªº¼v¹³
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');
        ////¤W¶Ç/////
        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('¶Ç°eÂÂ¥ó½s¸¹(%s)ÀÉ®×®É,ºô¸ôµo¥Í¿ù»~!!'+_Msg('¿ù»~¥N½X:')),[OldCaseID])+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
          Result := False;
          Exit;
        end;
        if memo1.Lines.Strings[0] = '1' then
        begin
          Showmessage(Format(_Msg('¶Ç°eÂÂ¥ó½s¸¹(%s)ÀÉ®×®É,ºô¸ôµo¥Í¿ù»~!!')+_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('¶Ç°eÂÂ¥ó½s¸¹(%s)ÀÉ®×®É,ºô¸ôµo¥Í¿ù»~!!')+_Msg('¿ù»~­ì¦]:')+_Msg('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J'),[OldCaseID]));
          Result := False;
          Exit;
        end;
      end;
  ////¤W¶Ç////
    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('¿ù»~¥N½X:')+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('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J');
    Result := False;
    Exit;
  end;
end;
Function TCB_IMGPSScanX.FormIDAppear(FormID:String):Boolean; //FormID¬O§_¥i¥X²{
var
  iDocNo : String;
begin
  Result := True;
  iDocNo := FormCode2DocNo(FormID);
  if (((FIs_In_Wh  = 'Y') and (not DocNoIs_In_WH(iDocNo))) or   //¤J®w±½´y¤£¬Ý«D¤J®w¤å¥ó
     ((FIs_In_Wh  = 'N') and (DocNoIs_In_WH(iDocNo)))) and      //«D¤J®w±½´y¤£¬Ý¤J®w¤å¥ó
     ((iDocNo <> 'Attach') and (iDocNo <> 'S_Attach') and (Copy(iDocNo,1,5)<>'ZZZZZ')) then
       Result := False;
end;
Function TCB_IMGPSScanX.DocNoAppear(DocNo:String):Boolean;   //DocNo¬O§_¥i¥X²{
begin
  Result := True;
  if (((FIs_In_Wh  = 'Y') and (not DocNoIs_In_WH(DocNo)) or (DocNo ='S_Attach')) or   //¤J®w±½´y¤£¬Ý«D¤J®w¤å¥ó
     ((FIs_In_Wh  = 'N') and (DocNoIs_In_WH(DocNo)) or (DocNo ='Attach') )) {and      //«D¤J®w±½´y¤£¬Ý¤J®w¤å¥ó
     (Copy(DocNo,1,5)<>'ZZZZZ')} then
       Result := False;
end;
Function TCB_IMGPSScanX.GetDocNoCount(CaseID,DocNo:String):Integer; //¨úDocNo¼Æ¶q
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¼Æ¶q
var
  i : Integer;
  DocNoList,DocNo_CopiesList : TStringlist;
begin
  Result := 1;  //¹w³]¦^¶Ç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; //¨ú°O¿ý¸Ìªº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 ®×¥ó½s¸¹@#,¦~«×@#,·~°È§O@#,¬O§_ÂÂ¥ó@#,Data@#,Verify@#,¤å¥ó½s¸¹[¥÷¼Æ]@#,¤å¥ó½s¸¹[¥÷¼Æ] tab ®×¥ó½s¸¹@#,¦~«×@#,·~°È§O@#,¬O§_ÂÂ¥ó@#,Data@#,Verify@#,¤å¥ó½s¸¹[¥÷¼Æ]@#,¤å¥ó½s¸¹[¥÷¼Æ]
    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;   //¨ú¥~¶Çªº¦WºÙ¼Æ¶q
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¼Æ¶q
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.CaseDelete_Enable(CaseID:String):Boolean;  //®×¥ó¥i§_³Q§R°£
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   //¦³³Q¤Þ¥Î¨«ªº
        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);   //°O¿ý¤Þ¥Î¨ä¥L®×¥ó A:¥[¤J D:§R±¼
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:¨ú³Q¤Þ¥Î 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 : String;
  DocNoList,FileList:TStringlist;
  iFileList,iFile_DocNoList :TStringlist;
  iDocDirList : TStringlist;
begin
  DocNoList := TStringlist.Create;
  FileList := TStringlist.Create;
  iFileList := TStringlist.Create;
  iFile_DocNoList := TStringlist.Create;
  iDocDirList := 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
      DocNoList.LoadFromFile(OldPath+'CaseDocNo.dat');
    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;
    iFileList.SaveToFile(NewPath+'Context.dat');
    iFile_DocNoList.SaveToFile(NewPath+'Context_DocNo.dat');
    iDocDirList.SaveToFile(NewPath+'DocDir.dat');
  finally
  iFileList.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:String;
  DocNoList,FileList : TStringlist;
  iFileList,iFile_DocDirList :TStringlist;
begin
  if (not FileExists(SoDir+'CaseDocNo.dat')) or (not FileExists(SoDir+'DocDir.dat')) then   //ºIµe­±·|¨S³o¨ÇÀÉ
    CreateCaseNeedData(SoDir);   //²£¥Í¥²­nªº¤å¦rÀÉ
  CopyFile(PWideChar(SoDir+'CaseDocNo.dat'),PWideChar(DeDir+'CaseDocNo.dat'),False);
  CopyFile(PWideChar(SoDir+'CaseDocNo_Copies.dat'),PWideChar(DeDir+'CaseDocNo_Copies.dat'),False);
  CopyFile(PWideChar(SoDir+'CustomDocNo.ini'),PWideChar(DeDir+'CustomDocNo.ini'),False);
  CopyFile(PWideChar(SoDir+'UseCase.ini'),PWideChar(DeDir+'UseCase.ini'),False);
  DocNoList := TStringlist.Create;
  FileList := TStringlist.Create;
  iFileList := TStringlist.Create;
  iFile_DocDirList := 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;}
    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
        DocNoList.Delete(i);
        DocNoList.SaveToFile(DeDir+'CaseDocNo.dat');
        if i <= CaseDocNo_CopiesList.Count-1  then
        begin
          CaseDocNo_CopiesList.Delete(i);
          CaseDocNo_CopiesList.SaveToFile(DeDir+'CaseDocNo_Copies.dat');
        end;
      end;
    end;
    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;}
  finally
  iFileList.Free;
  FileList.Free;
  DocNoList.Free;
  iFile_DocDirList.Free;
  end;
end;
Function TCB_IMGPSScanX.FormCode2FormName(CaseID,FormCode:String):String; //¥ÎFormCodeÂন¤å¥ó¦WºÙ
var
  i,v,ln : Integer;
  DelBarCode : String;
  CusDocNo,CusDocName : String;
begin
  Result := '';
  if (FormCode = '') or (FormCode = 'Attach') or (FormCode = 'S_Attach') then
    Result := _Msg('¥¼ÂkÃþ')
  //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');
  ////// ¨ì¦Û­q¤å¥ó§ä//////
  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 //­n§ä¤U¬[ªº
    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§ä¥XÀɦW(²Ä¤@­¶)
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 ¬°ªÅªº«h§äªþ¥ó¥X¨Ó
    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; //±qÀɦW¨ú¥XFormCode
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; //±qÀɦW¨ú¥X¤å¥ó¦WºÙ
begin
  Result :=  FormCode2FormName(CaseID,FileName2FormCode(FileName));
end;
Function TCB_IMGPSScanX.FileName2ScanPage(FileName:String):Integer; //±qÀɦWÂà¥X±½ºË­¶¼Æ
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; //¨ú¥X¨S¦³§Ç¸¹ªºÀɦW
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; //±qÀɦW¨ú¥X¦bContextListªº§Ç¸¹
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; //±qÀɦW¨ú¥XÂkÄݪº¤å¥ó¥N¸¹
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    //¬O¦Û­q¤å¥ó
  begin
    Result := Copy(FormCode,1,8);
  end;
  {If FindSQLData(FORM_INF_List,'T1.DOC_NO','T1.FORM_ID',FormCode,0,FindResult) Then  //20130403¤ÓºC¤F..´«±¼
  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¦WºÙ
var
  i,v,ln : Integer;
  CusDocNo,CusDocName : String;
begin
  Result := '';
  if DocNo = AttName then
  begin
    Result := _Msg('¥¼ÂkÃþ');
  end
  Else
  begin
    If FindSQLData(Doc_Inf_List,'DOC_U_DESC','DOC_NO',DocNo,0,FindResult) Then
    begin
      Result := GetFindResult('DOC_U_DESC');
    end;
  end;
  if Result = '' then  //¥h¦Û­q¤å¥ó¸Ì§ä
  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§ä¥XÀɦW(²Ä¤@­¶)
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¨ú¥X§@·~§O
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¨ú¥X§@·~§O
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; //¬O§_¬O»Ý¤À¥÷¼Æªº¤å¥ó¥N¸¹
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¨ú®×¥ó½s¸¹  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¨ú¤å¥ó¥N¸¹ Mode: I:Docno;N:Docname;P:Page;G:Group
var
  v,v1,v2,v3,ln :integer;
begin
  //¤å¥ó¦WºÙ@²Õ¼Æ{¤å¥ó¥N¸¹}-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¨úªí³æ¥N¸¹  Mode: I:FormID;N:FormName;P:Page
var
  v,v1,v2,ln :integer;
begin
  //ªí³æ¥N¸¹{ªí³æ¦WºÙ}-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); //¤W¤@­¶
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); //¤U¤@­¶
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; //¬O§_¤v¦s¦b¾ð¸Ì
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; //¶Ç¤JªºDocNo¬O§_»Ý¤À²Õ
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); //±q®×¥ó¸ÌªºFormCode¨ú¥X²Ä¤@­¶
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
      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;  //¦h²Õ¦ì¸m°O¿ý
  OMRValue : String;
  MainFormID,MainDocNo,MainVersion : String; //¥DFormID
  MainFormPage,CaseFormPage : Integer;  //¥D­n¤å¥ó»Ý­nªº­¶¼Æ
  NeedDocNoStr,NoDocNoStr : String; //¬Û¨Ì ¤¬¥¸¤å¥ó¦r¦ê
  List : TStringlist;
  FormCode : String;
  FormDataPages : Integer;
  NoSite : Boolean; //¥¼©w¦ì
  Anchor,Anchor1 : String;
  OMROkCount : Integer;
  //Casecheck : Boolean;  //¬O§_­n°µÀË®Ö
  //AllCheck : Boolean;  //¬O§_­n°µ§¹¾ãÀË®Ö
begin
  ///OMRErrInfo  1: ¥²­n¤å¥ó  2:¬Û¨Ì¤å¥ó 3:¤¬¥¸¤å¥ó  4:¥²¶ñ 5:Äæ¦ì¦³­Èªþ¤å¥ó  6:Äæ¦ì¦³­È¤£ªþ¤å¥ó
  ///            7: Äæ¦ì¦³­È¬ÛÃöÄæ¦ì¤]­n¦³­È  8:Äæ¦ì¦³­È­n¼g³Æµù 9:°±¥Î¤é´Á 10:³Ì¤j­¶¼Æ
  //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;
        if MainFormID = ''then
        begin
          //20131203 yuu»¡¤£Àˬd³o­Ó,¥ý®³±¼
          {if FMode <> 'SSCAN' then  //ñ¸p³¹¥ó·|´«¥DFormID,¥ý¸õ¹L
          begin
            ErrStr:=_Msg('§ä¤£¨ì¤À®×¤å¥ó');   //§ä¤£¨ì¥D¤å¥ó
            OMRErr2ini(CaseID,ErrStr,'','','','','','',False,False,True);
            CaseOk := false;
          end;}
        end
        Else
        begin
          //////¥D­n«D¥D­n¤å¥ó//////
          DistinctDocinCase(ImageSavePath+CaseID+'\upload\');
          if ModeNeedCheck(OMRErrInfo[1].Mode,FMode) then //¬O§_­nÀË®Ö
          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); //¸ê®Æ®w°O¿ý¥D¤å¥ó­¶¼Æ
              CaseFormPage := CheckCaseDocNoPage(CaseID,MainDocNo,MainVersion,MainFormPage); //®×¥ó¥D¤å¥óªº­¶¼Æ
              IF (MainFormPage > 0) and (MainFormPage <> CaseFormPage) then
              begin
                ErrStr:=MainDocNo+Format(OMRErrInfo[1].Info,[Inttostr(MainFormPage),Inttostr(CaseFormPage)]); //¥D­n¤å¥ó»Ý¦³XX­¶¶ÈªþXX­¶
                OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[1].Ignore,OMRErrInfo[1].Display);
                if OMRErrInfo[1].Display then
                  CaseOk := false;
              end;
            end;
          end;
          //////¥D­n«D¥D­n¤å¥ó/////
          //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 //¬O§_­nÀË®Ö
          begin
            List.CommaText := NeedDocNoStr;
            for I := 0 to List.Count - 1 do
            begin
              if not Case_DocNoExists(CaseID,List.Strings[i]) then  //¨Sªþ¬Û¨Ì¤å¥ó
              begin
                ErrStr:=Format(OMRErrInfo[2].Info,[DocNo2DocName(CaseID,List.Strings[i])]);   //¨Sªþ¬Û¨Ì¤å¥ó
                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 //¬O§_­nÀË®Ö
          begin
            List.CommaText := NoDocNoStr;
            for I := 0 to List.Count - 1 do
            begin
              if Case_DocNoExists(CaseID,List.Strings[i]) then  //ªþ¤F¤¬¥¸¤å¥ó
              begin
                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;
      //end;
      List.LoadFromFile(ImageSavePath + CaseID+'\upload\Context.dat');
      for i := 0 to List.Count - 1 do
      begin
        FormCode := FileName2FormCode(List.Strings[i]);
        /////¥¼ÂkÃþ///
        {IF FormCode = 'Attach' Then   //20140211 yuu»¡¤£Àˬd¤F
        begin
          ErrStr:=_Msg('©|¦³¤å¥ó¥¼ÂkÃþ');
          OMRErr2ini(CaseID,ErrStr,'','','','','','',False,False,True);
          CaseOk := false;
        end; }
        /////¥¼ÂkÃþ//////
        /////¥¼µù¥U¤å¥ó/////
        {IF not FormIDExists(FormCode,False) then  //¥¼µù¥U¤å¥ó
        begin
          ErrStr:=FormCode+_Msg('¤£¬°¦¹·~°Èªºªí³æ¥N½X');
          OMRErr2ini(CaseID,ErrStr,'','','','',False,False,True);
          CaseOk := false;
        end }
        /////¥¼µù¥U¤å¥ó/////
        //////°±¥Î¤å¥ó//
        {Else} IF ModeNeedCheck(OMRErrInfo[9].Mode,FMode) and (not FormIDExists(FormCode,True,0)) then  //¦³°±¥Îªº¤å¥ó
        begin
          ErrStr:=Format(OMRErrInfo[9].Info,[FormCode2FormName(CaseID,FormCode)]);   //¦³°±¥Î¤å¥ó
          OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[9].Ignore,OMRErrInfo[9].Display);
          if OMRErrInfo[9].Display then
            CaseOk := false;
        end;
        //////°±¥Î¤å¥ó////
      end;
    finally
      List.Free;
    end;
    //if AllCheck then
    //begin
      //////³Ì¤j­¶¼Æ/////
      DistinctFormCode(CaseID);
      if ModeNeedCheck(OMRErrInfo[10].Mode,FMode) then //¬O§_­nÀË®Ö
      begin
        For i := 0 to OMRFileList.Count - 1 do
        begin
          FormCode := FileName2FormCode(OMRFileList.Strings[i]);
          FormDataPages := GetDataFormCodePages(FormCode);
          IF (FormCode <> '') and (FormDataPages > 0) and (FindFormCodePages(CaseID,FormCode) > FormDataPages) then  //¦³¶W¹L³Ì¤j­¶¼Æªº¤å¥ó
          begin
            ErrStr:=Format(OMRErrInfo[10].Info,[FormCode2FormName(CaseID,FormCode),inttostr(FormDataPages)]);   //¦³¶W¹L³Ì¤j­¶¼Æ¤å¥ó
            OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[10].Ignore,OMRErrInfo[10].Display);
            if OMRErrInfo[10].Display then
              CaseOk := false;
          end;
        end;
      end;
      /////³Ì¤j­¶¼Æ/////
    //end;
    ImageScrollBox1.FileName := '';
    //if FWork_No = 'CW' then   //²z½ß´N¤£°µ¤U­±ªºÀˮ֤F
    //begin
      //////OMRÀË®Ö///////
      ContextList.LoadFromFile(ImageSavePath+CaseID+'\upload\Context.dat');
      DistinctFormCode(CaseID);
      ValueXT := TXmltool.Create;
      Try
        For i := 0 to OMRFileList.Count - 1 do
        begin
          OMRFile := OMRFileList.Strings[i];
          OMRFormCode := FileName2FormCode(OMRFileList.Strings[i]);
          OMRFormName := FormCode2FormName(CaseID,OMRFormCode);
          Anchor := FormID2Anchor(OMRFormCode);
          ///¨Ì¤Q¦r©w¦ìÂIÁY©ñ////
          ImageReSize(CaseID,OMRFile);
          ////¨Ì¤Q¦r©w¦ìÂIÁY©ñ////
          if not FileExists(CheckXmlPath+OMRFormCode+'.xml') then  //¨S¦³Xml´N¤£¥ÎÀË®Ö
            Continue;
          XT := TXmltool.Create(CheckXmlPath+OMRFormCode+'.xml');
          RelaXT := TXmltool.Create;
          try
            //*******¥²¶ñ********
            if ModeNeedCheck(OMRErrInfo[4].Mode,FMode) then //¬O§_­nÀË®Ö
            begin
              if XT.SubNodes['/form/settype1/'].First then
              Repeat
                OMROK := False;
                SiteRec := ''; //²M±¼
                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   //°O¿ý¦ì¸m
                      SiteRec := Site
                    else
                      SiteRec := SiteRec+'@'+Site;
                    //¦³¶ñ´Nok
                    //Showmessage(ColCName +','+ inttostr(OMRMpsV1.GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site))+','+inttostr(Pixel + SafePixel));
                    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Äæ¦ì¥¼¶ñ¼g
                  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;
            //*******¥²¶ñ********
            //if AllCheck then
            //begin
            //*******¦³­È¬ÛÃö¤å¥óªºÄæ¦ì¤]­n¦³­È*******
            if ModeNeedCheck(OMRErrInfo[7].Mode,FMode) then //¬O§_­nÀË®Ö
            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   //°O¿ý¦ì¸m
                  SiteRec := Site
                else
                  SiteRec := SiteRec+'@'+Site;
                Pixel := XT.Node['/form/settype3/'+ColEName+'/'].Attributes['pixel'];
                if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
                begin
                  ////¦³¶ñ¼g////
                  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+RelaFormCode+'.xml');
                      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   //°O¿ý¦ì¸m
                              RelaSiteRec := RelaSite
                            else
                              RelaSiteRec := RelaSiteRec+'@'+RelaSite;
                            if  FileExists(ImageSavePath+CaseID+'\upload\'+RelaFile) then
                            begin
                              if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+RelaFile,RelaSite,Bt) > (RelaPixel + SafePixel)  then
                              begin
                                OMROK := True;
                                Break;
                              end;
                            end;
                          end;
                          //Else
                          //begin
                            //ColCName := XT['/form/settype1/'+ColEName+'/'+nodename+'/'];
                          //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Äæ¦ì¶ñ¼g®É,XXÄæ¦ì¥¼¶ñ¼g
                          Else if NoSite then
                            ErrStr:=Format(OMRErrInfo[7].Info,[ColCName,RelaColCName])+'('+_msg('¥¼©w¦ì')+')'
                          Else
                            ErrStr:=Format(OMRErrInfo[7].Info,[ColCName,RelaColCName]);   //XXÄæ¦ì¶ñ¼g®É,XXÄæ¦ì¥¼¶ñ¼g
                          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;
            //*******¦³­È¬ÛÃö¤å¥óªºÄæ¦ì¤]­n¦³­È*******
            //*******¦³­È¬ÛÃö¤å¥óªºÄæ¦ì¤£¯à¦³­È*******
            if ModeNeedCheck(OMRErrInfo[11].Mode,FMode) then //¬O§_­nÀË®Ö
            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   //°O¿ý¦ì¸m
                  SiteRec := Site
                else
                  SiteRec := SiteRec+'@'+Site;
                Pixel := XT.Node['/form/settype8/'+ColEName+'/'].Attributes['pixel'];
                if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
                begin
                  ////¦³¶ñ¼g// //
                  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+RelaFormCode+'.xml');
                    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   //°O¿ý¦ì¸m
                            RelaSiteRec := RelaSite
                          else
                            RelaSiteRec := RelaSiteRec+'@'+RelaSite;
                          if  FileExists(ImageSavePath+CaseID+'\upload\'+RelaFile) then
                          begin
                            if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+RelaFile,RelaSite,Bt) > (RelaPixel + SafePixel)  then
                            begin
                              inc(OMROkCount);
                              //OMROK := True;
                              //Break;
                            end;
                          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Äæ¦ì¶ñ¼g®É,XXÄæ¦ì¤]¶ñ¼g
                        Else if NoSite then
                          ErrStr:=Format(OMRErrInfo[11].Info,[ColCName,RelaColCName])+'('+_msg('¥¼©w¦ì')+')'
                        Else
                          ErrStr:=Format(OMRErrInfo[11].Info,[ColCName,RelaColCName]);   //XXÄæ¦ì¶ñ¼g®É,XXÄæ¦ì¤]¶ñ¼g
                        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;
            //*******¦³­È¬ÛÃö¤å¥óªºÄæ¦ì¤£¯à¦³­È*******
              //*******¦³­È¬Û¨Ì¤å¥ó*******
            if ModeNeedCheck(OMRErrInfo[5].Mode,FMode) then //¬O§_­nÀË®Ö
            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   //°O¿ý¦ì¸m
                  SiteRec := Site
                else
                  SiteRec := SiteRec+'@'+Site;
                Pixel := XT.Node['/form/settype4/'+ColEName+'/'].Attributes['pixel'];
                if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
                begin
                  ////¦³¶ñ¼g////
                  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Äæ¦ì¶ñ¼g®É,»Ýªþ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 //¬O§_­nÀË®Ö
            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   //°O¿ý¦ì¸m
                  SiteRec := Site
                else
                  SiteRec := SiteRec+'@'+Site;
                Pixel := XT.Node['/form/settype5/'+ColEName+'/'].Attributes['pixel'];
                if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
                begin
                  ////¦³¶ñ¼g////
                  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Äæ¦ì¶ñ¼g®É,¤£¯àªþ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;
              //*******¦³­È¤¬¥¸¤å¥ó*******
              //*******¦³­È¼g³Æµù*******
            if ModeNeedCheck(OMRErrInfo[8].Mode,FMode) then //¬O§_­nÀË®Ö
            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   //°O¿ý¦ì¸m
                  SiteRec := Site
                else
                  SiteRec := SiteRec+'@'+Site;
                if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
                begin
                  ////¦³¶ñ¼g////
                  if not FileExists(ImageSavePath+CaseID+'ScanMemo.dat') then
                  begin
                    ErrStr:=Format(OMRErrInfo[8].Info,[ColCName]);   //XX¤å¥óXXÄæ¦ì¶ñ¼g®É,»Ý¼g³Æµù
                    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;
              //*******¦³­È¼g³Æµù*******
              //*******OMR±a­È********
              if XT.SubNodes['/form/settype7/'].First then
              Repeat
                ColEName := XT.SubNodes['/form/settype7/'].NodeName;
                ValueXT['/content/'+ColEName+'/@savevalue'] := '';  //¥ýµ¹¹w³]ªÅ¥Õ
                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'];
                    //¦³¶ñ´Nok
                    if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel)  then
                    begin
                      ValueXT['/content/'+ColEName+'/@savevalue'] := OMRValue;  //¦³¶ñ´N´«¦¨³]©wªº­È
                      Break;
                    end;
                  end;
                Until not XT.SubNodes['/form/settype7/'+ColEName+'/'].Next;
              Until not XT.SubNodes['/form/settype7/'].Next ;
              //*******OMR±a­È********
            //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Àˮ֥¢±Ñ¼g¤Jini
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);  //³z¹LErrcount¨Ó¹ïÀ³
      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Àˮ֥¢±Ñ±qini¼g¤JListView
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); //¬O§_³Q²¾°£¤F
      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.DownLanguage:Boolean;  //¤U¸ü¦h°ê»y¨¥ÀÉ
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(HTTPSClient,FUrl+'Language.Lng','','',LngPath+'Language.Lng',FReWrite,Memo1,False,'') Then
  begin
    HttpErrStr := _Msg('¿ù»~¥N½X:')+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('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J');
    Result := False;
    Exit;
  end
  Else {if Trim(memo1.Lines.Strings[0]) = SBUtils.StrToUTF8('MultiLanguage') Then}
  begin
    memo1.Lines.SaveToFile(LngPath+'Language.lng',TEncoding.UTF8);
  end;
end;
procedure TCB_IMGPSScanX.view_image_FormCode(Path,FormCode:String;stpage,stview:integer); //¥ÎFormCode¨Ó§ä¼v¹³
var i,p:integer;
    ISB : TImageScrollBox;
    lb : TLabel;
    v ,v1 : Integer;
    page : Integer;
    List_FormCode,Err_FormCode: String;
    iFormID : String;
begin
   ShowText := '¼v¹³Åã¥Ü¤¤,½Ðµy­Ô';
   DataLoading(True,True);
   IF FormCode = 'ShowAll' then  //Åã¥Ü©Ò¦³ªº¼v¹³ (¦]¬°ªþ¥ó·|¶ÇªÅ¦r¦ê,©Ò¥H¥Î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  //Åã¥Ü«ü©wFormCodeªº¼v¹³
   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¨Ó§ä¼v¹³
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 : Integer;
begin
   ShowText := '¼v¹³Åã¥Ü¤¤,½Ðµy­Ô';
   DataLoading(True,True);
   IF DocNo = 'ShowAll' then  //Åã¥Ü©Ò¦³ªº¼v¹³ (¦]¬°ªþ¥ó·|¶ÇªÅ¦r¦ê,©Ò¥H¥Î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
       {iDocno := DocNoDir2DocNo(CaseDocNoList.Strings[i]);
       if (((FIs_In_Wh  = 'Y') and (not DocNoIs_In_WH(iDocNo))) or   //¤J®w±½´y¤£¬Ý«D¤J®w¤å¥ó
          ((FIs_In_Wh  = 'N') and (DocNoIs_In_WH(iDocNo)))) and
          ((iDocNo <> 'Attach') and (Copy(iDocNo,1,5)<>'ZZZZZ')) then     //«D¤J®w±½´y¤£¬Ý¤J®w¤å¥ó
       begin
         Continue;
       end; }
       iDocNo := CaseDocNoList.Strings[i];
       if not DocNoAppear(DocNoDir2DocNo(iDocNo)) then continue;
       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 := False;
         if ISB.ZoomPercent > 100  then
           ISB.AntiAliased := False;
         ISB.LoadFromFile(Path+iDocNo+'\'+ContextList.Strings[n],1);
         DpiResize(ISB.Graphic,36);
         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  //Åã¥Ü«ü©wDocNo+²Õ§Oªº¼v¹³  ªþ¥ó¶Ç Attach
   begin
     iDocNo := DocNo;
     ContextList.Clear;
     if FileExists(Path+iDocNo+'\Context.dat') then
       ContextList.LoadFromFile(Path+iDocNo+'\Context.dat');
     CreatePreViewISB(ContextList.Count);
     For i := 0 to ContextList.Count -1 do
     begin
       ISB := TImageScrollBox(FindComponent(ISBName+intToStr(i+1)));
       ISB.AntiAliased := True;
       if ISB.ZoomPercent > 100  then
         ISB.AntiAliased := False;
       ISB.LoadFromFile(Path+iDocNo+'\'+ContextList.Strings[i],1);
       DpiResize(ISB.Graphic,36);
       ISB.Redraw(true);
     end;
     FitPreViewISB;
   end
   Else if (FormID <> '') {and (FormID <> 'Attach')} then  //Åã¥Ü«ü©wFormIDªº¼v¹³
   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);
       For i := 0 to ContextList.Count -1 do
       begin
         if FileName2FormCode(ContextList.Strings[i]) = FormID then
         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[i],1);
           DpiResize(ISB.Graphic,36);
           ISB.Redraw(true);
           //NowShowFileList.Add(ContextList.Strings[i]);
         end;
       end;
       FitPreViewISB;
     end;
   end;
   {Else if (DocNo = 'Attach') and (FormID = 'Attach') then  //ªþ¥ó¶Ç Attach
   begin
     If (TreeView1.Selected <> nil) Then
     begin
       iGroupNo := 0;
       page := 0;
       CreatePreViewISB(Pages);
       For i := 0 to ContextList.Count -1 do
       begin
         List_FormCode := FileName2FormCode(ContextList.Strings[i]);
         Form_Page := FormCode2Page(List_FormCode);
         List_DocNo := FormCode2DocNo(List_FormCode);
         Trans_DocNo := Context_DocnoList.Strings[i];
         if (Trans_DocNo = DocNo) then
         begin
           if List_FormCode = FormID then
           begin
             inc(Page);
             if Page = GroupNo+1 then
             begin
               ISB := TImageScrollBox(FindComponent(ISBName+intToStr(1)));
               ISB.AntiAliased := True;
               if ISB.ZoomPercent > 100  then
                 ISB.AntiAliased := False;
               ISB.LoadFromFile(Path+ContextList.Strings[i],1);
               NowShowFileList.Add(ContextList.Strings[i]);
             end;
           end;
         end;
       end;
       FitPreViewISB;
     end;
   end;}
   if FindComponent(ISBName+'1') <> nil then
     ISBClick(TImageScrollBox(FindComponent(ISBName+'1')));
   ISB1Click(ISB1);
   DataLoading(False,False);
end;
Function TCB_IMGPSScanX.ShapeName2PreViewISBName(SP:TShape):String; //Âà¥X«ü©wPreViewISBName
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;
begin
  FreePreViewISB;
  ScrollBox1.HorzScrollBar.Visible := False;
  W := 150;
  H := 250;
  for I := 1 to Count do
  begin
    Panel := TPanel.Create(Self);
    Panel.Name := 'M_Pl'+inttostr(i);
    Panel.Left := 4;
    Panel.Top := (i-1)*H+(6*i);
    Panel.Height := H;
    Panel.Width := W;
    Panel.Parent := ScrollBox1;
    Panel.Caption :='';
    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.OnStartDrag := ISBStartDrag;
    ISB.OnEndDrag := ISBEndDrag;
//    ISB.OnImageDragDrop := ISBDragDrop;
//    ISB.OnImageDragOver := ISBDragOver;
    ISB.OnDragDrop := ISBDragDrop;
    ISB.OnDragOver := ISBDragOver;
  end;
end;
Procedure TCB_IMGPSScanX.FreePreViewISB;
var
  i : Integer;
begin
  For i:= ComponentCount -1 downto 0 do
  begin
    IF Components[i] is TImageScrollBox Then
    begin
      IF Pos(ISBName,Components[i].Name) > 0 Then
        Components[i].Free;
    end
    Else If Components[i] is TPanel Then
    begin
      IF Pos('M_Pl',Components[i].Name) > 0  Then
        Components[i].Free;
    end
    Else If Components[i] is TShape Then
    begin
      IF Pos('SP',Components[i].Name) > 0  Then
        Components[i].Free;
    end;
  end;
  Application.ProcessMessages;
  //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); //µe¦³³Q¿ï¨úªº¼v¹³
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   //¥uµe³æ¤@­Ó
  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  //¥uFree«ü©wªº
  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;
  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;  //¨ú®×¥óªº¥DFormID
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 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]¬O§_²§°Ê[´«¦æ]DocNo[tab]¥÷¼Æ[tab]Á`­¶¼Æ[tab]¬O§_²§°Ê
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');
    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   //¤£¬°¦Û©w¤å¥ó
      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; //²£¥Í¦Û­q¤å¥ó DocName[tab]¥÷¼Æ[tab]Á`­¶¼Æ[tab]¬O§_²§°Ê[#13#10]DocName[tab]¥÷¼Æ[tab]Á`­¶¼Æ[tab]¬O§_²§°Ê
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');
    while DocDirList.Count > 0 do
    begin
      iDocDir := DocDirList.Strings[0];
      DocNo := DocNoDir2DocNo(iDocDir);
      if Copy(iDocDir,1,5) = 'ZZZZZ' then   //¬O¦Û©w¤å¥ó
      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; //²£¥Í³Q¤Þ¶iªº«OºÞ³U¤å¥ó¸ê°T  Docno[tab]¥÷¼Æ[tab]®×¥ó½s¸¹#13#10Docno[tab]¥÷¼Æ[tab]®×¥ó½s¸¹
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');
    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   //¤£¬°¦Û©w¤å¥ó
      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; //²£¥Í³Q¤Þ¶iªº¦Û©w¤å¥ó¸ê°T  Docno[tab]¥÷¼Æ[tab]®×¥ó½s¸¹#13#10Docno[tab]¥÷¼Æ[tab]®×¥ó½s¸¹
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   //¬O¦Û©w¤å¥ó
      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; //²£¥Í¬O§_¦³Attach Y:¦³ N:¨S¦³
begin
  Result := 'N';
  if GetDocDir_Page(CaseID,AttName) > 0 Then
    Result := 'Y';
end;
Function TCB_IMGPSScanX.GetDocNoEdit(CaseID,DocNo,DocName:String):String; //¨ú¥XDocNo¬O§_³Q²§°Ê (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;  //¨ú¥X¤å¥ó¥÷¼Æ
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;  //¨ú¥X¤å¥óÁ`­¶¼Æ
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;  //ÀˬdFormID¬O§_¦s¦b
var
  STDate,SPDate : String;
  Docno,Version : String;
begin
  Result := False;
  If FormCode = '' then  //ªþ¥ó¤£Àˬd
  begin
    Result := True;
    Exit;
  end;
  if CheckDate then  //­nÀˬd¤é´Á
  begin
    STDate := '00000000'; //¨S³]©w
    SPDate := '99999999'; //¨S³]©w
    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'; //¨S³]©w
        if SPDate = '' then SPDate := '99999999'; //¨S³]©w
        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¬O§_¦s¦b®×¥ó¸Ì
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); //ÀɦW­«·s±Æ§Ç
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);
        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); //ÀɦW­«·s±Æ§Ç
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); //ÀɦW­«·s±Æ§Çµ¹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; //¤U¸ü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('¿ù»~¥N½X:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
      Result := False;
      Exit;
    end;
    if FileExists(CheckXmlPath+'OMRSet.zip') then   //¦³§ó·s
    begin
      ExecuteUnZip(CheckXmlPath+'OMRSet.zip',CheckXmlPath,False);
      S.Clear;
      S.Add(ServerDate+GetBalance2Time(Balance));
      S.SaveToFile(CheckXmlPath+'LastDateTime.dat');
    end
    Else
    begin
      if (Memo1.Lines.Strings[0] = 'nodata') Then   //¨S§ó·s
      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('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J');
        Result := False;
        Exit;
      end;
    end;
  Finally
  S.Free;
  End;
end;
Function TCB_IMGPSScanX.GetKeyinSet : Boolean; //¨úµn¥´³]©w
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('¿ù»~¥N½X:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
      Result := False;
      Exit;
    end;
    if FileExists(SitePath+'KeyinSet.zip') then  //¦³§ó·s
    begin
      ExecuteUnZip(SitePath+'KeyinSet.zip',SitePath,False);
      S.Clear;
      S.Add(ServerDate+GetBalance2Time(Balance));
      S.SaveToFile(SitePath+'LastDateTime.dat');
    end
    Else
    begin
      if (Memo1.Lines.Strings[0] = 'nodata') Then   //¨S§ó·s
      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('¶¢¸m¹L¤[©Î³Qµn¥X,½Ð­«·sµn¤J');
        Result := False;
        Exit;
      end;
    end;
  Finally
  S.Free;
  End;
end;
Function TCB_IMGPSScanX.CaseAsk(CaseID: string):Integer;
var
  SendData : String;
begin
  SendData := 'data='+FData+'&verify='+FVerify+'&case_no='+CaseID;
  if (FMode = 'NSCAN') then
  begin
    If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC05/isnew',SendData,FReWrite,Memo1,False) Then
    begin
      HttpErrStr := _Msg('¿ù»~¥N½X:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
      Result := -1;
      Exit;
    end;
  end;
  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;  //³qª¾¶Ç°e§¹¦¨
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    //±½´y­¶¼Æ
    begin
      S.LoadFromFile(Path+'Context.dat');
      Pages := S.Count;
    end;
    if not FileExists(ImageSavePath+CaseID+'\CaseIndex.dat') then //¦pªG¨S³o­ÓÀÉ´N­«²£¥Í¹w³]­È
    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];    //¸g¿ì¥N¸¹
      Cen_Uid := S.Strings[1];      //³Q«O¤HID
      Cen_Cliname := S.Strings[2];  //³Q«O¤H©m¦W
      Cen_Platno := S.Strings[3];   //¨®¸¹
      Case_Priority := S.Strings[4];//®×¥óµ¥¯Å
      if FMode = 'SSCAN' then  //ñ¸p³¹¥óªº®É­Ô¤@«ß¶ÇFormat_ID
      begin
        Format_ID := S.Strings[5];    //¥DÁä­È (³ø»ù³æ¸¹orÄò«O³æ¸¹or«O³æ¸¹½Xor«OÀIÃÒ¸¹)
      end
      Else
      begin
        if (Length(UpformID) = 12) and (UpformID[2] = '-') then
          Format_ID := S.Strings[5]    //¥DÁä­È (³ø»ù³æ¸¹orÄò«O³æ¸¹or«O³æ¸¹½Xor«OÀIÃÒ¸¹)
        else
          Cen_Apolyno := S.Strings[5]; //±j¨îÃÒ¸¹
      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»¡ºÊ²z¯¸¥óªº¥DÁä­È¬°16½X¥B¶}¶}¬°05ªº­n¥h±¼
      end;
    end; }
    if FileExists(ImageSavePath+CaseID+'\GetValue.xml') then    //±½´y±a­È
    begin
      S.LoadFromFile(ImageSavePath+CaseID+'\GetValue.xml');
      OMRValue := Trim(S.Text);
    end;
    if MainCase then    //Âù¥D¬ùªº¥D­n®×¥ó
    begin
      if FileExists(ImageSavePath+CaseID+'\Batchnum.dat') then
      begin
        S.LoadFromFile(ImageSavePath+CaseID+'\Batchnum.dat');
        Batchnum := Trim(S.Text);
      end;
    end
    Else    //Âù¥D¬ùªº²Ä¤G®×¥ó
    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                                  //§@·~§O
                +'&case_id='+CaseID                                    //¨ü²z½s¸¹
                +'&form_id='+UpformID                                  //ªí³æ¥N¸¹
                +'&scan_page='+inttostr(pages)                         //±½´y­¶¼Æ
                +'&scan_get_value='+HTTPEncode(UTF8Encode(OMRValue))   //±½´y±a­È
                +'&case_priority='+case_priority                       //®×¥óµ¥¯Å
                +'&batch_no='+batchnum                                 //¨®¶¤§å¸¹
                +'&user_memo='+HTTPEncode(UTF8Encode(usermemo))        //¨Ï¥ÎªÌµù°O
                +'&check_memo='+HTTPEncode(UTF8Encode(checkmemo))      //Àˮֵù°O
                +'&remove_memo='+HTTPEncode(UTF8Encode(ReMoveMemo))    //Àˮֲ¾°£µù°O
                +'&case_type='+Case_type                               //¶i¥óºØÃþ    ¶i¥ó0 ÂkÀÉ1
                +'&handle_no='+Handle_no                               //¸g¿ì¥N¸¹
                +'&format_id='+Format_id                               //®×¥ó¥DÁä­È
                +'&cen_uid='+Cen_Uid                                   //³Q«O¤HID
                +'&cen_cliname='+HTTPEncode(UTF8Encode(Cen_Cliname))   //³Q«O¤H©m¦W
                +'&cen_platno='+Cen_Platno                             //¨®µP
                +'&cen_apolyno='+Cen_Apolyno                           //±j¨îÃÒ¸¹
                +'&has_authorize='+Has_Authorize;                      //¬O§_¦³±ÂÅv®Ñ¼v¹³
                Showmessage(SendData);
    if not RejectCase then
    begin
      If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC05',SendData,FReWrite,Memo1,False) Then
      begin
        HttpErrStr := _Msg('¿ù»~¥N½X:')+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('¿ù»~¥N½X:')+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;    //¬O§_¦³±ÂÅv®Ñ¼v¹³
    //Showmessage(SendData);
    If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC08',SendData,FReWrite,Memo1,False) Then
    begin
      HttpErrStr := _Msg('¿ù»~¥N½X:')+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;     //¬O§_¦³±ÂÅv®Ñ¼v¹³
    If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC09',SendData,FReWrite,Memo1,False) Then
    begin
      HttpErrStr := _Msg('¿ù»~¥N½X:')+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;        //¬O§_¦³±ÂÅv®Ñ¼v¹³
    If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC01',SendData,FReWrite,Memo1,False) Then
    begin
      HttpErrStr := _Msg('¿ù»~¥N½X:')+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;      //¬O§_¦³±ÂÅv®Ñ¼v¹³
    If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC01',SendData,FReWrite,Memo1,False) Then
    begin
      HttpErrStr := _Msg('¿ù»~¥N½X:')+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;
  //Showmessage('a');
  //self.FIs_OldCase := 'Y';
  PageLVclear := True;
  InitialOk := False;
  //FIs_In_Wh := 'Y';
  if FIs_In_Wh = 'Y' then
    AttName := 'Attach'  //¤J®wªþ¥ó
  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; //Âù­±±½´y
  end
  Else if (FMode = 'NSCAN') then
  begin
    Panel18.Visible := True;
    Panel1.Visible := True;
    Panel6.Visible := True;
    Panel21.Visible := True;
    Panel23.Visible := True;
    ScanDuplexCB.Visible := True; //Âù­±±½´y
  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;
  end;
  DisplayMode(1,1,1,Panel9);
  Application.ProcessMessages;
  StatusBar1.Panels[0].Text := 'Ver'+GetCurrentVersionNo;
  StatusBar1.Panels[1].Text := _Msg('µn¤J¤H­û:')+FUserName;
  if FPrintyn = 'Y' then
    PrtLB.Visible := True;
  InitScrollRec;
  If FUrl = '' then
  begin
    Showmessage(_Msg('URL¤£¯à¬°ªÅ¥Õ,½Ð¬¢¸ßµ{¦¡¤H­û'));
    Exit;
  end;
  if FUrl[length(FUrl)]<>'/' then
    FUrl := FUrl + '/';
  //********²M³æ°Ï********
  Doc_Inf_List := TStringList.Create;  //Doc_Inf ²M³æ   Docno + ª©¥»¬°key
  DM_FORM_INF_List := TStringList.Create;  //DM_FORM_INF ²M³æ   Docno + ª©¥»¬°key
  FORM_INF_List := TStringList.Create; //FORM_INFªº²M³æ
  CHECK_RULE_INF_List := TStringList.Create;  //CHECK_RULE_INF  ²M³æ
  MEMO_INF_List := TStringList.Create;  //MEMO_INF ²M³æ
  WORK_INF_List := TStringList.Create;  //WORK_INF ²M³æ
  LASTEST_FORM_INF_List := TStringList.Create;  // LASTEST_FORM_INF ²M³æ
  FindResult := TStringlist.Create;  //§äSQLDataªºµ²ªG
  OMRFileList := TStringList.Create; //­nOMRÀˮ֪º¤å¥ó(¥uÀˬd¨CºØFormªº²Ä¤@­¶)
  FormCode_PageSize := TStringList.Create; //¤å¥óªº¹w³]¤j¤p  FormCode_Height_Width
  DocNo_NeedDoc := TStringList.Create; //¦³Docno®É­n¬Û¨Ìªº¤å¥ó   DocNo_¬Û¨Ì¤å¥ó_¬Û¨Ì¤å¥ó
  DocNo_NoDoc := TStringList.Create; //¦³Docno®É¤¬¥¸ªº¤å¥ó   DocNo_¤¬¥¸¤å¥ó_¤¬¥¸¤å¥ó
  DocNo_VerinCase := TStringList.Create; //®×¥ó¸ÌªºDocNo+ª©¥»ªº²M³æ
  CaseDocNoList := TStringlist.Create;  //®×¥ó¸ÌªºDocNo²M³æ
  CaseDocNo_CopiesList := TStringlist.Create; //®×¥ó¸ÌªºDocNo¥÷¼Æ²M³æ
  CaseList := TStringList.Create;    //°O¿ý±½ºË®×¥óªº¶¶§Ç
  Context_DocnoList := TStringlist.Create; //®×¥ó¸ÌªºÀÉ®×Docno²M³æ
  ContextList := TStringlist.Create; //®×¥ó¸ÌªºÀɮײM³æ
  NoSaveBarCodeList := TStringlist.Create; //¤£Àx¦sªº±ø½X²M³æ
  FormID_List := TStringlist.Create;  //FormID²M³æ
  DocNo_List := TStringlist.Create; //DocNo²M³æ
  NowShowFileList := TStringlist.Create;  //¥Ø«eÅã¥Üªº¼v¹³²M³æ
  NowSelectFileList := TStringlist.Create; //¥Ø«e³QÂI¿ïªº¼v¹³²M³æ
  Cust_DocNoList := TStringlist.Create; //¦Û¦æ©w¸qªº¤å¥ó¦WºÙ
  IN_WH_DocNoList := TStringlist.Create; //¤J®wªº¤å¥ó²M³æ
  GuideFormIDList := TStringlist.Create; //­n·í¾É¤Þ­¶ªí³æ²M³æ
  //********²M³æ°Ï********
  ShowText := _Msg('¸ê®Æ¸ü¤J¤¤,½Ðµy­Ô');
  DataLoading(True,True);
  IF not GetServerDate Then
  begin
    Showmessage(_Msg('¨ú¥D¾÷®É¶¡®É,ºô¸ôµo¥Í¿ù»~!!')+HttpErrStr);
    DataLoading(False,False);
    Exit;
  end;
ShowMessage('GetServerDate  '+ServerDate+' , '+ServerTime);
  ////¤U¸ü¨t²Î¸ê°T////
  IF not GetSetInf1 Then  //¨úDOC_INF  ¤å¥ó¸ê°T
  begin
    Showmessage(_Msg('¨ú¤å¥ó¸ê°T®É,ºô¸ôµo¥Í¿ù»~!!')+HttpErrStr);
    DataLoading(False,False);
    Exit;
  end;
ShowMessage('GetSetInf1');
  //showmessage(self.Doc_Inf_List.Text);
  IF not GetSetInf2 Then  //¨úDM_FORM_INF     ¬Û¨Ì¤¬¥¸¸ê°T
  begin
    Showmessage(_Msg('¨ú¬Û¨Ì¤¬¥¸¸ê°T®É,ºô¸ôµo¥Í¿ù»~!!')+HttpErrStr);
    DataLoading(False,False);
    Exit;
  end;
ShowMessage('GetSetInf2');
  //Showmessage(self.Doc_Inf_List.Text);
  IF not GetSetInf3 Then   //¨úFORM_INF  ªí³æ¸ê°T
  begin
    Showmessage(_Msg('¨úªí³æ¸ê°T®É,ºô¸ôµo¥Í¿ù»~!!')+HttpErrStr);
    DataLoading(False,False);
    Exit;
  end;
ShowMessage('GetSetInf3');
  IF not GetSetInf4 Then   //¨úCHECK_RULE_INF   ÀˮֳW«h¸ê°T
  begin
    Showmessage(_Msg('¨úÀˮֳW«h¸ê°T®É,ºô¸ôµo¥Í¿ù»~!!')+HttpErrStr);
    DataLoading(False,False);
    Exit;
  end;
  //showmessage(self.CHECK_RULE_INF_List.Text);
ShowMessage('GetSetInf4');
  IF not GetSetInf5 Then   //¨úMEMO_INF   ±`¥Î¤ù»y¸ê°T
  begin
    Showmessage(_Msg('¨ú±`¥Î¤ù»y¸ê°T®É,ºô¸ôµo¥Í¿ù»~!!')+HttpErrStr);
    DataLoading(False,False);
    Exit;
  end;
ShowMessage('GetSetInf5');
  //showmessage(self.MEMO_INF_List.Text);
  IF not GetSetInf6 Then   //¨úWORK_INF   ¨t²Î°Ñ¼Æ¸ê°T
  begin
    Showmessage(_Msg('¨ú¨t²Î°Ñ¼Æ¸ê°T®É,ºô¸ôµo¥Í¿ù»~!!')+HttpErrStr);
    DataLoading(False,False);
    Exit;
  end;
ShowMessage('GetSetInf6');
  //showmessage(FORM_INF_List.Text);
  IF not GetSetInf7 Then   //¨úLASTES_FORM_INF   ¨t²Î°Ñ¼Æ¸ê°T
  begin
    Showmessage(_Msg('¨ú³Ì·sª©FORMID°Ñ¼Æ¸ê°T®É,ºô¸ôµo¥Í¿ù»~!!')+HttpErrStr);
    DataLoading(False,False);
    Exit;
  end;
ShowMessage('GetSetInf7');
  //Showmessage(LASTEST_FORM_INF_List.Text);
  SetFormID_DocNo;  //±NFormID¤ÎDocno©â¥X¶ë¤JList¸Ì  20130403¼W¥[
  SetIn_WH_DocNo; //±N­n¤J®wªºDocNo©â¥X¨Ó¥t¦s¤Jlist¸Ì
  GetDefScanIni; //¨ú±o±½´y¹w³]­È¤Î¬ÛÃö³]©w
  ////¤U¸ü¨t²Î¸ê°T/////
  if ImagePath = '' then
  begin
    Showmessage(_Msg('¥»¾÷¼È¦s¸ô®|¤£±o¬°ªÅ¥Õ'));
    DataLoading(False,False);
    Panel1.Enabled := False;
    Panel2.Enabled := False;
    Exit;
  end;
  initkscan;
  if ImagePath[Length(ImagePath)] <> '\' then
    ImagePath := ImagePath + '\';
  CheckXmlPath := ImagePath+'OMRSITE\'+FWork_No;
  SitePath := ImagePath+'Site\'+FWork_No+'\';
  LngPath := ImagePath;
  SamplePath := ImagePath+'Sample\'+FWork_No+'\';
  ImagePath := ImagePath + 'Scantemp\';
  ScaniniPath :=ImagePath+FWork_No+'\'+FUserUnit +'\';
  ImagePath := ImagePath + FWork_No+'\'+FUserUnit+'\'+FMode+'\';
  ImageSavePath := ImagePath;
  str2dir(CheckXmlPath);
  str2dir(SitePath);
  str2dir(ImagePath);
  str2dir(SamplePath);
  Del_Sub_NothingPath(ImagePath);  //²M±¼®×¥ó¥Ø¿ý¬OªÅªº
  ShowText := _Msg('¸ê®Æ¸ü¤J¤¤,½Ðµy­Ô');
  DataLoading(True,True);
//  if not CheckAvailable Then   //Àˬd±ÂÅv  20170218 »¡¤£¥Î¤F
//  begin
//    DataLoading(False,False);
//    Panel1.Enabled := False;
//    Panel2.Enabled := False;
//    Exit;
//  end;
//ShowMessage('CheckAvailable');
  ShowText := _Msg('¸ê®Æ¸ü¤J¤¤,½Ðµy­Ô');
  DataLoading(True,True);
   ////¤U¸ü»y¨¥ÀÉ/////  20170218 ¥ý®³½Õ¥H«K´ú¸Õ
//  If not DownLanguage Then
//  begin
//    Showmessage('Language File error!!'+HttpErrStr);
//    DataLoading(False,False);
//    Exit;
//  end;
  //InitialLanguage(Self);  //¸ü¤J¦h°ê»y¨¥
  ////¤U¸ü»y¨¥ÀÉ/////
  if (FMode = 'RSCAN') or (FMode = 'ESCAN') or (FMode = 'FSCAN') then //­«±½¥ó¤Î²§°Ê¥ó­n¥u¯à±½«ü©w½s¸¹ªº¥ó
  begin
    _Deltree(ImagePath);
    str2dir(ImagePath);
    ImageSavePath := ImagePath;
    str2dir(ImageSavePath);
    MkDir(ImageSavePath+FCaseID);
    CreateEmptyCase(ImageSavePath,FCaseID);
    MkDir(ImageSavePath+FCaseID+'\Download');
    IF (FMode = 'ESCAN') then  //²§°Ê¥ó¥ý¤U¸ü¼v¹³
    begin
      ShowText := _Msg('®×¥ó¤U¸ü¤¤,½Ðµy­Ô');
      DataLoading(True,True);
      If not Down_Img(ImageSavePath+FCaseID+'\Download\',FCaseID) then
      begin
        Showmessage(FCaseID+_msg('¸ü¤J²§°Ê¼v¹³®É,ºô¸ôµo¥Í¿ù»~')+HttpErrStr);
        DataLoading(False,False);
        Exit;
      end;
      Download2Case(ImageSavePath+FCaseID+'\Download\',ImageSavePath+FCaseID+'\');
      //Showmessage('aaa');
      //Download2Case('C:\Users\Hong\Downloads\¨S¦³¬A¸¹\',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   //³o­Ó·|¦bDownload2Case®É¤@«ß²£¥Í©Ò¥H¤£¯à¦³³o¦æ 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); //²£¥Í¥~­±¶Ç¤Jªº¤å¥ó
    end;
  end;
ShowMessage('GetOMRCheckSet«e');
  ////¤U¸üÀË®ÖXML//////
  IF not GetOMRCheckSet Then
  begin
    Showmessage(_Msg('¤U¸üÀˮ֩w¦ìÀÉ®×®É,ºô¸ôµo¥Í¿ù»~!!')+HttpErrStr);
    DataLoading(False,False);
    Exit;
  end;
  ////¤U¸üÀË®ÖXML/////
ShowMessage('GetOMRCheckSet«á¨Ó');
  ////¤U¸üµn¥´³]©w/////
  IF not GetKeyinSet Then
  begin
    Showmessage(_Msg('¤U¸üµn¥´©w¦ìÀÉ®×®É,ºô¸ôµo¥Í¿ù»~!!')+HttpErrStr);
    DataLoading(False,False);
    Exit;
  end;
  ////¤U¸üµn¥´³]©w/////
ShowMessage('GetKeyinSet');
  if ScanDenialHint <> '' then   //¦³³]©w´£¥Ü¦r¦ê´N¨q¦b¥k¤W¨¤
  begin
    DenialTimeLb.Visible := True;
    DenialTimeLb.Caption := Format(ScanDenialHint,[ScanDenialTime]);
  end;
  R_W_Scanini('R'); //±½ºË³]©wªºini
  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; //ªþ¥[¹q¤lÀɵ¡  //20120207·¨¥É»¡¤£¦b³o¥[¹q¤lÀÉ¥ý®³±¼
  Splitter2.Visible := True;
  AttFileGB.Visible := False; //ªþ¥[¹q¤lÀɵ¡
  Splitter2.Visible := False; }
  DataLoading(False,False);
ShowMessage('ªì©l¸Ü°õ¦æ§¹¦¨');
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:¥i 1:¤£¦æ
  SuccessCount,ReCasecount,CheckErrCount : Integer;
  TransMsg : String;
  AreaStr : String;
  S : TStringlist;
  CheckStr : String;
begin
  IF not InitialOk Then
  begin
    Showmessage(_msg('¸ê°T©|¥¼¤U¸ü§¹¦¨,½Ðµy­Ô©Î­«·s¶i¤J'));
    Exit;
  end;
  ClearView(1);
  CaseHelpBtn.Visible := False;
  DisplayPath := '';
  ClearCaseIndex;
  RejectCase := False;
  if not CheckCaseID_OK then  //Àˬd¬O§_¦³¥¼°t¸¹ªº®×¥ó
  begin
    Showmessage(_Msg('©|¦³¥¼°t¸¹®×¥ó,µLªk¤W¶Ç'));
    Exit;
  end;
  if NewTreeNode.Count = 0  then
  begin
    Showmessage(_Msg('µL¼v¹³»Ý¶Ç°e'));
    Exit;
  end;
  SuccessCount := 0;
  ReCasecount := 0;
  CheckErrCount := 0;
  if (FMode = 'NSCAN') and (not CheckScanDenialTime) then
  begin
    if Messagedlg(Format(_Msg('¤v¶W¹L¦¬¥ó®É¶¡(%s),¹w©w§@·~¤é¬°¤U­ÓÀç·~¤é,¬O§_Ä~Äò¤W¶Ç??'),[ScanDenialTime]),mtConfirmation,[mbyes,mbcancel],0)=mrcancel then Exit;
  end;
  ShowText := _Msg('¸ê®Æ¤W¶Ç¤¤,½Ðµy­Ô');
  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('¸ê®Æ¤W¶Ç¤¤,½Ðµy­Ô');
    DataLoading(True,True);
    CreateIn_WH(CaseID);    //²£¥Í¤J®w¤å¥ó¤å¦rÀÉ In_Wh.dat
    Case2upload(CaseID);   //²£¥Í­ì¼v¹³µ²ºc
    TransPath := ImageSavePath+CaseID+'\Upload\';
    {if FMode = 'ESCAN' then    //20140320 yuu»¡®³±¼¦¹Àˬd
    begin
      S := TStringlist.Create;
      try
        S.LoadFromFile(TransPath + 'Context.dat');
        if S.Count = 0 then
        begin
          Showmessage(_Msg('µL¼v¹³ÀɵLªk¶Ç°e'));
          DataLoading(False,False);
          LoadImgFile;
          Exit;
        end;
      finally
      s.Free;
      end;
    end;}
    if (FMode = 'NSCAN') then
    begin
      /////°T°Ý¬O§_¥i¤W¶Ç/////
      CaseTrans := CaseAsk(CaseID);
      /////°T°Ý¬O§_¥i¤W¶Ç////
    end
    Else  ///¤£¬O·s¥ó¡B­«±½¥ó¡B²§°Ê¥óªº¤£¬d
    begin
      CaseTrans := 0;
    end;
    if CaseTrans = -1 then  //¥¢±Ñ
    begin
      Showmessage(_Msg('¸ß°Ý®×¥ó¥i§_¶Ç°e®É,ºô¸ôµo¥Í¿ù»~!!')+HttpErrStr);
      DataLoading(False,False);
      LoadImgFile;
      Exit;
    end;
    if CaseTrans = 1 then
    begin
      ////­«½Æ³B²z/////
      Inc(ReCasecount);
      ////­«½Æ³B²z/////
      Continue;
    end
    Else if CaseTrans = 0 then   //¥i¥H¶Ç°e
    begin
      ///////ÀË®Ö//////  20100927 User§ï¬°·h¦Ü¥~­±°µ  ///20101019 User¤S§ï¦^¤W¶Ç­n°µ
      //if FMode = 'NSCAN' then  //20101019§ï¦¨Åª³]©w¨º¨Ç¼Ò¦¡­n°µ¨º¨ÇÀË®Ö
      //begin
       ///¨Ì¤Q¦r©w¦ìÂIÁY©ñ////
       CaseReSize(CaseID);   //©Ò¥H¼v¹³¦A°µ¤@¦¸ÁY©ñ
       ////¨Ì¤Q¦r©w¦ìÂIÁY©ñ///////   }
        if (FMode <> 'FSCAN') then
        begin
          if (NewTreenode.Item[i].ImageIndex <> 7) and (NewTreenode.Item[i].ImageIndex <> 5) then  //Àˮ֧¹¦¨ªº¤£¦AÀË®Ö
          begin
            ShowText := CaseID+_Msg('Àˮ֤¤,½Ðµy­Ô');
            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('¸ê®Æ¤W¶Ç¤¤,½Ðµy­Ô');
      DataLoading(True,True);
      If Not TransCaseID(TransPath,CaseID,True) Then  //¶Ç°e®×¥ó
      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('µLªk¤W¶Ç¥ó%d¥ó'),[ReCasecount]);
  if CheckErrCount > 0 then
    TransMsg := TransMsg + #13#10 + Format(_Msg('Àˮ֥¢±Ñ¥ó%d¥ó'),[CheckErrCount]);
  Showmessage(_Msg('¶Ç°e§¹¦¨')+#13#10+TransMsg);
  LoadImgFile;
  if (FMode = 'ESCAN') 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;  //­¶¼Æ²M³æ
  //Panel18.Enabled:= False;
  UseOldCaseLb.Visible := False;
  PM107.Visible := False; //³Æµù¥\¯à
  CaseHelpBtn.Visible := False; //Àˮ֥¢±Ñ­ì¦]¶s
  Panel5.Visible := True;
  ContextList.Clear;
  SortMode := false;
  ISB1.ZoomMode := zmFullPage;
  IF TreeView1.Selected.Parent <> nil Then
  begin
    if TreeView1.Selected.Parent = NewTreenode then  //ÂI¦b®×¥ó¤W
    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    //ÂI¦b¤å¥ó¤W
    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('±q%s¤Þ¥Î',[GetUseCase('F',DisplayPath,NowDocDir)]);
      if GetUseCase('T',DisplayPath,NowDocDir) <> '' then
        StatusBar1.Panels[2].Text := Format('³Q%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 //ÂI¦bªí³æ¤W
    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  //ÂI¦bªþ¥óªº­¶¼Æ
      begin
        NowFormCode := '';
        page := 1;
      end;
      DisplayPath := ImageSavePath+NowCaseNo+'\';
      if GetUseCase('F',DisplayPath,NowDocDir) <> '' then
        StatusBar1.Panels[2].Text := Format('±q%s¤Þ¥Î',[GetUseCase('F',DisplayPath,NowDocDir)]);
      if GetUseCase('T',DisplayPath,NowDocDir) <> '' then
        StatusBar1.Panels[2].Text := Format('³Q%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);
  end
  Else     //ÂI¦bNewTreenode or MyTreenode1 ¤W
  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  //¦Û­q¤å¥ó
    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  //¦P®×¥ó
    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   //¤£¦P®×¥ó
    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  //¦P®×¥ó¤£§ï¶¶§Ç
    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)®×¥óµL¼v¹³,±N§R°£¦¹®×¥ó,¬O§_½T©w²¾°Ê?'),[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);  //²M±¼ÀˮְO¿ý
  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('¥¼µù¥U¤å¥ó'),Newnode.Text)>0)
     Then
      Accept := False;}
end;
procedure TCB_IMGPSScanX.TreeView1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  TreeView1Click(nil);
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;
    TreeView1.Selected := TreeView1.GetNodeAt(X,Y);
    TreeView1Click(self);
    TreeView1.PopupMenu.Popup(Mouse.CursorPos.X ,Mouse.CursorPos.Y);
  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 FileExists(LngPath+'Language.lng') then
  begin
    InitialLanguage(Self);  //¸ü¤J¦h°ê»y¨¥
  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;  //­n¤£­n¥Î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;
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('A6A94A8D91B08A9D58F300C0573EA9EF1B9DB0BF69B90E13B958DB4CB6B44F5A' +
  '4EE9CB22C9A68C2D07ED52ED4D13C755D890E4074996755361E6CDE2A6F1B563' +
  '5DDC8999AC4D71FB092EA9F1F87BFA25694FBF0D6D250087D2B39629713FCCB0' +
  'D0A83135BC14FC63A4E8331CFF9E24C45C2D9CFD837EB70BAFDB79A75B7B97D5' +
  'E9EB271685118C29D90A7C85E7793908989E295DA50021C795A448366026E975' +
  'F49EA75B721B80427B99E5CF24A225FB498C07946ED7B806B483654C00D85C66' +
  'E34215CA3EDEF1D4C3F5896090E97E1E2C9752BA2D5B49EE58CF19A0D374077F' +
  '6D13B90B6FED22D9EBC3AD6CDC76E595E08725BF2E12B8EF30A524A2E00504DF');
end.
{$I reassemble/CB_IMGPSScanImp.misc.pas}
{$I reassemble/view/toolBar.pas}
{$I reassemble/CB_IMGPSScanImp.lfcycle.pas}
{$I reassemble/view/misc.pas}
{$I reassemble/view/scrollView.pas}
{$I reassemble/view/popupMenu.pas}
{$I reassemble/view/listView.pas}
{$I reassemble/view/msger.pas}
{$I reassemble/scan/twain.pas}
{$I reassemble/CB_IMGPSScanImp.omr.pas}
{$I reassemble/CB_IMGPSScanImp.api.pas}
{$I reassemble/CB_IMGPSScanImp.listMgr.pas}
{$I reassemble/CB_IMGPSScanImp.fileOp.pas}
{$I reassemble/CB_IMGPSScanImp.docq.pas}
{$I reassemble/img/transformer.pas}
{$I reassemble/CB_IMGPSScanImp.caseMgr.pas}
{$I reassemble/bloc/entityMapping.pas}
{$I reassemble/transp/payloadArchiver.pas}
{$I reassemble/view/treeView.pas}
{$I reassemble/CB_IMGPSScanImp.custdoc.pas}
{$I reassemble/CB_IMGPSScanImp.docmod.pas}
{$I reassemble/CB_IMGPSScanImp.convert.pas}
{$I reassemble/CB_IMGPSScanImp.inbound.pas}
{$I reassemble/CB_IMGPSScanImp.prUpload.pas}
{$I reassemble/transp/fileClient.pas}
{$I reassemble/bloc/caseManager.pas}
{$I reassemble/CB_IMGPSScanImp.preview.pas}