doom4ster
2017-12-15 1eaff9bbfd37549483bbc57011900dda1c11e908
CB_IMGPSScanImp.pas
@@ -14,7 +14,7 @@
  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;
var
  Ch_WriteNote : Boolean;
@@ -145,7 +145,6 @@
    ISB2: TImageScrollBox;
    imgp1: TPanel;
    lb1: TLabel;
    ISB1: TImageScrollBox;
    Memo1: TMemo;
    Display1: TMemo;
    Panel22: TPanel;
@@ -255,6 +254,9 @@
    ISB_BW: TImageScrollBox;
    N1: TMenuItem;
    N2: TMenuItem;
    ISB1: TImageScrollBox;
    Label3: TLabel;
    LogFile1: TLogFile;
    procedure ActiveFormCreate(Sender: TObject);
    procedure Panel9Resize(Sender: TObject);
    procedure ISB1Click(Sender: TObject);
@@ -406,6 +408,7 @@
    FImgDelete:string; // Y/N  有權限可在補件時刪除影像
    FIsExternal:string;//Y/N
    FCheck_main_form:string; //Y/N
    FWH_category:string;  //Y/N  Y是歸類時有區分入庫非入庫文件  N 是不區分
    ////////傳入參數///////
    //********Http參數********
@@ -481,8 +484,12 @@
    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存入
    //********清單區********
    //********顯示區********
@@ -554,8 +561,11 @@
    Has_Authorize :String; //是否有授權書影像
    AttName : String; //未歸類目錄名稱
    NowGuideFormID : String;
    NowDivPageFormID:String;
    FirstDocDir : String;
    FMaxUploadSize:String;// 上傳zip大小限制
    FJpgCompression:integer;// 20171211 jpg to tif 的壓縮率
    Draging : Boolean;
@@ -676,7 +686,7 @@
    Function FindFormCodePages(CaseID,FormCode:String):Integer;  //計算案件裡FormID的頁數
    Function GetDataFormCodePages(FormCode:String):Integer;   //取記錄的FormcID的頁數
    Procedure CaseReSize(CaseID:String); //案件的影像縮放
    Procedure ImageReSize(CaseID,FileName:String);  //依十字定位點做縮放
    Procedure ImageReSize_FormID(CaseID,FileName:String);  //依十字定位點做縮放
    Procedure ImageReSize_tmp(FormID,FileName:String);  //依十字定位點做縮放(暫存檔)
    Function TransCaseID(Path,CaseID:String;MainCase:Boolean):Boolean; //傳送案件
    Procedure NewTreeNodeRefresh;
@@ -827,6 +837,18 @@
    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 ;
  protected
    { Protected declarations }
    procedure DefinePropertyPages(DefinePropertyPage: TDefinePropertyPage); override;
@@ -946,6 +968,8 @@
    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;
@@ -1196,6 +1220,31 @@
  PM605Click(nil);
end;
procedure TCB_IMGPSScanX.InitExistImgList(casepath: String);
var
  ST1,ST2,ST3,ST4:TStringList;
  i,j,k:Integer;
begin
  ST1:=TStringList.Create;
  ST2:=TStringList.Create;
  ST3:=TStringList.Create;
  ExistImgList.Clear;
  ST1.LoadFromFile(casepath+'Download\Context.dat');
  for I := 0 to ST1.Count - 1 do
  begin
LogFile1.LogToFile(logTimeString+casepath+'Download\'+ST1.Strings[i]+',MD5='+LoadFileGetMD5(casepath+'Download\'+ST1.Strings[i]));
    ExistImgList.Add(LoadFileGetMD5(casepath+'Download\'+ST1.Strings[i])) ;
  end;
LogFile1.LogToFile(logTimeString+'ExistImgList.text'+ExistImgList.CommaText);
  ST1.Free;
  ST2.Free;
  ST3.Free;
end;
procedure TCB_IMGPSScanX.Initialize;
begin
  inherited Initialize;
@@ -1237,6 +1286,7 @@
    NowPage := p+1;
    PageLV.ItemIndex := P;
  end;
  //DisplayISB.SetFocus;
end;
procedure TCB_IMGPSScanX.ISB1EndScroll(Sender: TObject);
@@ -1256,7 +1306,7 @@
procedure TCB_IMGPSScanX.ISB1Enter(Sender: TObject);
begin
  ISB1.SetFocus;
  //ISB1.SetFocus;
end;
procedure TCB_IMGPSScanX.ISB1ImageMouseDown(Sender: TObject; Button: TMouseButton;
@@ -1298,12 +1348,19 @@
procedure TCB_IMGPSScanX.ISB1ImageMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
   Edit1.SetFocus;
   //Edit1.SetFocus;
  //TImageScrollBox(Sender).SetFocus;
  if TImageScrollBox(Sender).FileName = '' then
  begin
//ShowMessage('AAA');
Label3.Caption:='FileName='+TImageScrollBox(Sender).FileName+'  time='+FormatDateTime('yyyy/mm/dd HH:MM:SS', now);
    TImageScrollBox(Sender).MouseMode := mmUser
  end
  Else
  begin
Label3.Caption:='FileName='+TImageScrollBox(Sender).FileName;
    ViewMouseMode(NowClick);
  end;
end;
procedure TCB_IMGPSScanX.ISB1ImageMouseUp(Sender: TObject; Button: TMouseButton;
@@ -1555,9 +1612,12 @@
  Cust_DocNoList.Free; //自行定義文件名稱
  IN_WH_DocNoList.Free; //入庫的文件清單
  GuideFormIDList.Free; //要當導引頁表單清單
  DivPageFormIDList.Free; //要當分案頁表單清單
  LastInitFormidList.Free;
  LastAddFormidList.Free;
  SampleFormIDList.Free;
  ExistImgList.Free;
  reSizeExistImgList.Free;
  //********清單區********
  if FEvents <> nil then FEvents.OnDestroy;
end;
@@ -1886,8 +1946,10 @@
  iISB : TImageScrollBox;
  GoAtt : Boolean;
  AttLv : Integer;
  ST1 :TStringList;
begin
  PreNode2Name := '';
  ST1:=TStringList.Create;
  if TreeView1.Selected.Parent = MyTreeNode1 then
    PreNode2Name:= GetNode2Name(MyTreeNode2);
  ShowText := _Msg('文件歸類中,請稍候');
@@ -1902,12 +1964,13 @@
  try
    InitialLanguage(DocListForm); //載入多國語言
    //InitialLanguage(PatchDlg); //載入多國語言
    DocListForm.CheckBox1.Visible:=False;
    for i := 1 to FORM_INF_List.Count - 1 do
    begin
      FormID :=  GetSQLData(FORM_INF_List,'T1.FORM_ID',i);
      FormName := GetSQLData(FORM_INF_List,'T1.FORM_DESC',i);
      DocNo := GetSQLData(FORM_INF_List,'T1.DOC_NO',i)+GetSQLData(FORM_INF_List,'T1.DOC_VERSION',i);
      if not FormIDAppear(FormID) then Continue;
      if not FormIDAppear(FormID) then Continue;   //20170816 先秀全部
      //Showmessage(FORM_INF_List.Text);
      //showmessage(inttostr(FORM_INF_List.Count)+#13+inttostr(self.Doc_Inf_List.Count));
@@ -1927,23 +1990,48 @@
      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 DocListForm.CheckBox1.Checked then
          begin
            FormID := DocListForm.Edit1.Text;
            DocNo := GetNewCustomDocNo(DisplayPath,FormID);
          end
          else
          begin
            FormID := DocListForm.DocLV.Selected.Caption;
            DocNo := FormCode2DocNo(FormID);
          end;
          if DocNoDir2DocNo(Path2DocDir(ExtractFilePath(iISB.FileName),NowCaseno)) = DocNo then
            DocDir := Path2DocDir(ExtractFilePath(iISB.FileName),NowCaseNo)
          Else
            DocDir := FindLastestDocDir(NowCaseno,DocNo);
//ShowMessage('DocNoNeedDiv(DocNo)='+BoolToStr(DocNoNeedDiv(DocNo),true));
//ShowMessage('DocDir='+DocDir);
          if DocNoNeedDiv(DocNo) then   //要分份數
          begin
            if ((FormCode2Page(FormID) = '01') and (GetDocDir_Page(NowCaseno,DocDir)>0)) or (DocDir = '') then
            begin
              DocDir := DocNo2DocNoDir(ImageSavePath + NowCaseno+'\',DocNo);
            end
            else
            begin //20171016  真對補件影響 所加的判斷
              ST1.Clear;
              if FileExists(ImageSavePath + NowCaseno+'\'+DocDir+'\Context.dat') then
              begin
                ST1.LoadFromFile(ImageSavePath + NowCaseno+'\'+DocDir+'\Context.dat');
                if ISExistImg(ImageSavePath + NowCaseno+'\'+DocDir+'\'+ST1.Strings[0]) then
                begin
                  DocDir := DocNo2DocNoDir(ImageSavePath + NowCaseno+'\',DocNo);
                end;
              end;
            end;
          end
          Else        //不分份數
          begin
@@ -1977,6 +2065,7 @@
          //ReNameContext(iISB.FileName,OldName,NewName);
        end;
      end;
//ShowMessage('KKKK');
      ReSortFileName(ExtractFilePath(iISB.FileName));
      DrawDocItem2(MytreeNode1,NowCaseno);
      ClearErrini(NowCaseno,MyTreeNode1);  //清掉檢核記錄
@@ -1991,6 +2080,7 @@
  finally
  DataLoading(False,False);
  DocListForm.Free;
  ST1.Free;
  end;
end;
@@ -2111,9 +2201,21 @@
      //Showmessage(Components[i].Name);
      iISBName := ShapeName2PreViewISBName(TShape(Components[i]));
      iISB := TImageScrollBox(FindComponent(iISBName));
//ShowMessage('iISB.FileName='+iISB.FileName);
//ShowMessage(ExtractFilePath(iISB.FileName)+','+ExtractFileName(iISB.FileName)+','+NowCaseNo);
//      if (FMode = 'ESCAN') and (FModeName<>'異動件') then
//      begin
//        if ISExistImg(iISB.FileName) then
//        begin
//          ShowMessage(_Msg('此圖為非當次掃瞄,不可刪除'));
//          Exit;
//        end;
//      end;
      DeleteImageFile(ExtractFilePath(iISB.FileName),ExtractFileName(iISB.FileName),NowCaseNo);
    end;
  end;
//ShowMessage('iISB.FileName='+iISB.FileName);
  ReSortFileName(ExtractFilePath(iISB.FileName));
  DrawDocItem2(MytreeNode1,NowCaseno);
  MyTreeNode1.Text := Format('%s-%d'+_Msg('頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
@@ -2155,6 +2257,7 @@
      TreeView1click(nil);
      FirstDocDir := '';
      NowGuideFormID := '';
      NowDivPageFormID :='';
      AddScanBtnclick(nil);
    end;
  end
@@ -2170,6 +2273,7 @@
    ScanPath := '';
    ScanCaseno := '';
    NowGuideFormID := '';
    NowDivPageFormID :='';
    ClearView(1);
    ContextList.Clear;
    Try
@@ -2336,6 +2440,7 @@
begin
  if TreeView1.Selected = NewTreeNode then  //全刪  //新掃描件
  begin
    If Messagedlg(_Msg('是否刪除所有案件?'),mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
    clearView(1);
    Application.ProcessMessages;
@@ -2350,6 +2455,7 @@
  end
  Else if TreeView1.Selected = MyTreeNode1 then       //案件編號
  begin
    If Messagedlg(Format(_Msg('編號(%s)是否刪除?'),[NowCaseno]),mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
    clearView(1);
    Application.ProcessMessages;
@@ -2394,9 +2500,19 @@
    If Messagedlg(Format(_Msg('文件(%s)是否刪除?'),[DocNo2DocName(NowCaseno,NowDocNo)]),mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
    ClearView(1);
    Application.ProcessMessages;
    _DelTree(ImageSavePath+NowCaseno+'\'+NowDocDir);
//ShowMessage(NowDocDir);
    if (Length(NowDocDir)=8) or (NowDocDir=AttName) then
    begin
//ShowMessage('DeleteDocNoFileForESCAN');
      DeleteDocNoFileForESCAN(ImageSavePath+NowCaseno+'\'+NowDocDir,NowDocDir);
    end
    else
    begin
      _DelTree(ImageSavePath+NowCaseno+'\'+NowDocDir);
      SetDocNoList('D',-1,NowCaseNo,NowDocDir,'');
    end;
    SetUseCase('D',ImageSavePath+NowCaseno+'\',NowDocDir,'','');
    SetDocNoList('D',-1,NowCaseNo,NowDocDir,'');
    if (Copy(NowDocNo,1,5)='ZZZZZ') then   //20140703 刪除自定文件時要刪ini檔資料
      DeleteCustomDocDir(ImageSavePath+NowCaseno+'\',NowDocDir);
@@ -2405,34 +2521,11 @@
    ClearErrini(NowCaseno,MyTreeNode1);  //清掉檢核記錄
    NewTreeNodeRefresh;
    {if (FMode <>'ESCAN') and (ContextList.Count = NowShowFileList.Count) then
    begin
      if Messagedlg(_Msg('刪除後將無影像,案件將刪除,是否確定?'),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);  //清掉檢核記錄
      NewTreeNodeRefresh;
    end;
    Showmessage(_Msg('刪除完成')); }
    //Showmessage(_Msg('刪除完成'));  //20101102 User要求拿掉
  end
  Else if TreeView1.Selected = MyTreeNode3 then       //FormID層
  begin
    If Messagedlg(Format(_Msg('文件(%s)是否刪除?'),[NowFormName]),mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
    DeleteFormCodeFile(NowCaseNo,NowDocDir,NowFormCode);
    SetRecordEditedDocDir('A',NowCaseNo,NowDocDir);
    DrawDocItem2(MytreeNode1,NowCaseno);
@@ -2440,30 +2533,39 @@
    ClearErrini(NowCaseno,MyTreeNode1);  //清掉檢核記錄
    NewTreeNodeRefresh;
    {if (FMode <>'ESCAN') and (ContextList.Count = NowShowFileList.Count) then
    begin
      if Messagedlg(_Msg('刪除後將無影像,案件將刪除,是否確定?'),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);  //清掉檢核記錄
      NewTreeNodeRefresh;
    end;
    Showmessage(_Msg('刪除完成'));
    //Showmessage(_Msg('刪除完成'));   //20101102 User要求拿掉 }
  end;
end;
function TCB_IMGPSScanX.DocNoIsExistImg(DocNopath:String):boolean;
var
  i:integer;
  ST:TStringList;
begin
  Result:=False;
  ST:=TStringList.Create;
  ST.loadFromfile(DocNopath+'\Context.dat');
//ShowMessage(ST.Text);
  for I := 0 to ST.Count - 1 do
  begin
    if ISExistImg(DocNopath+ST.Strings[i]) then
    begin
      Result:=False;
      Exit;
      Break;
    end;
  end;
  Result:=True;
end;
procedure TCB_IMGPSScanX._DelTreeForExistImg(ASourceDir:String);
var
  i:integer;
  ST:TStringList;
begin
end;
procedure TCB_IMGPSScanX.PM102Click(Sender: TObject);
@@ -2542,171 +2644,347 @@
  end;
end;
procedure TCB_IMGPSScanX.PM104Click(Sender: TObject);
var
  i,n,m,ii,P,v,v1,page,imageCount : Integer;
  FName : String;
  CaseID,DocNo,FormID :String;
  DocDir :String;
  SavePath,SaveFilename:String;
  ISB : TImageScrollBox;
  FileRec:TSearchrec;
begin
Procedure TCB_IMGPSScanX.PM104Click(Sender: TObject);
Var
  i, n, m, ii, P, v, v1, page, imageCount: Integer;
  FName: String;
  CaseID, DocNo, FormID: String;
  DocDir: String;
  SavePath, SaveFilename: String;
  ISB: TImageScrollBox;
  FileRec: TSearchrec;
  iGraphic, iGraphic_First, iGraphic_sec: TTiffGraphic;
  iRect : TRect;
  JpgGr : TJpegGraphic;
  SaveStream     : TFileStream;
  SaveStreamA:TFileStream;
  SaveStreamB:TFileStream;
  cooom:integer;
Begin
  OpenDialog1.Filter := 'Image files|*.TIF;*.JPG';
  if OpenDialog1.Execute then
  begin
  If OpenDialog1.Execute Then
  Begin
    ISB := TImageScrollBox.Create(self);
    try
      ShowText :=_Msg('檔案加入中,請稍候');
      DataLoading(True,True);
      if TreeView1.Selected = nil then Exit;
      FName := OpenDialog1.FileName;
try
    ShowText := _Msg('檔案加入中,請稍候');
    DataLoading(True, True);
    If TreeView1.Selected = Nil Then
      Exit;
    FName := OpenDialog1.FileName;
      FindFirst(FName,faAnyfile,FileRec);
      //ShowMessage(IntToStr(FILEREC.Size)+','+IntToStr(FFileSizeLimit));
      if FFileSizeLimit=0 then
      begin
        FFileSizeLimit:=5*1024;
      end;
      if FILEREC.Size > FFileSizeLimit*1024 then //檢查檔案大小
      begin
        ShowMessage(Format('%.3f',[FILEREC.Size / 1024])+' KB, file size over limit.');
        FindClose(FILEREC);
        DataLoading(false,false);
        exit;
      end;
    FindFirst(FName, faAnyfile, FileRec);
      FindClose(FILEREC);
      CaseID := NowCaseno ;
      imageCount := 0;
      P := ISB.ImageCountFromFile(OpenDialog1.FileName);
      for I := 1 to P do
      begin
        ShowText :=_Msg('檔案加入中,請稍候('+inttostr(i)+'/'+inttostr(P)+')');
        DataLoading(True,True);
        ISB.LoadFromFile(FName,i);
        DeskewImg(ISB.Graphic);
        if (TreeView1.Selected = NewTreeNode) or (TreeView1.Selected = MyTreeNode1) then
        begin
    If FFileSizeLimit = 0 Then
    Begin
      FFileSizeLimit := 5 * 1024;
    End;
//FFileSizeLimit:=20*5*1024;
//ShowMessage(IntToStr(FileRec.Size)+','+IntToStr(FFileSizeLimit * 1024));
    If FileRec.Size > FFileSizeLimit * 1024 Then // 檢查檔案大小
    Begin
      ShowMessage(Format('目前檔案大小為 %.3f MB', [FileRec.Size / (1024*1024)]) +
        ',已超過單一檔案匯入限制'+Format('%.1f',[FFileSizeLimit/1024])+'MB');
      FindClose(FileRec);
      DataLoading(false, false);
      Exit;
    End;
    //MessageDlg()
    //cooom:=StrToInt(InputBox('輸入百分比','輸入百分比',''));
    cooom:=FJpgCompression;//20171211彩色tif採jpg壓縮的比例
    FindClose(FileRec);
    CaseID := NowCaseno;
    imageCount := 0;
    P := ISB.ImageCountFromFile(OpenDialog1.FileName);
    For i := 1 To P Do
    Begin
      ShowText := _Msg('檔案加入中,請稍候(' + inttostr(i) + '/' + inttostr(P) + ')');
      DataLoading(True, True);
      ISB.LoadFromFile(FName, i);
      // ISB.SaveToFile('C:\OCX\aaaaaa'+IntToStr(i)+'.tif');
      DeskewImg(ISB.Graphic);
      // ISB.SaveToFile('C:\OCX\bbbbbb'+IntToStr(i)+'.tif');
      iGraphic_First := TTiffGraphic.Create;
      iGraphic_sec := TTiffGraphic.Create;
      iGraphic_First.Assign(ISB.Graphic);
      //ShowMessage(IntToStr(iGraphic_First.Palette.palNumEntries)); //彩色 會為0  黑白 為2
      MpsGetBarcode(ISB.Graphic, MpsBarcodeinf); //判斷A3 有用FormID 所以要先辨條碼
      //有必要的話先把影像轉正 再開始切圖
      If CheckNeedCrop(iGraphic_First) Then
      Begin
        // 先取右邊的影像
        iRect.Left := ISB.Graphic.Width Div 2;
        iRect.Right := ISB.Graphic.Width;
        iRect.Top := 0;
        iRect.Bottom := ISB.Graphic.Height;
        CropImg(iGraphic_First, iRect);
        iGraphic_sec.Assign(ISB.Graphic);
        // 再取左邊的影像
        iRect.Left := 0;
        iRect.Right := ISB.Graphic.Width Div 2;
        iRect.Top := 0;
        iRect.Bottom := ISB.Graphic.Height;
        CropImg(iGraphic_sec, iRect);
      End;
      iGraphic := iGraphic_First;
      While Not iGraphic.IsEmpty Do
      Begin
        If (TreeView1.Selected = NewTreeNode) Or
          (TreeView1.Selected = MyTreeNode1) Then
        Begin
          SaveFilename := '';
          MpsGetBarcode(ISB.Graphic,MpsBarcodeinf);
          for n := 1 to MpsBarcodeinf.Count-1  do
          begin
            if MpsBarcodeinf.r180[n] <> 0 then  //依條碼角度轉影像
            begin
              Rotate(ISB.Graphic,MpsBarcodeinf.r180[n]);
              MpsGetBarcode(ISB.Graphic,MpsBarcodeinf);
          MpsGetBarcode(iGraphic, MpsBarcodeinf);
          For n := 1 To MpsBarcodeinf.Count Do
          Begin
            If MpsBarcodeinf.r180[n] <> 0 Then // 依條碼角度轉影像
            Begin
              Rotate(iGraphic, MpsBarcodeinf.r180[n]);
              MpsGetBarcode(iGraphic, MpsBarcodeinf);
              Break;
            end;
          end;
          FormID := BarCode2FormID; //取出FormID
            End;
          End;
          FormID := BarCode2FormID;
          // 取出FormID
          SaveFilename := FormID;
          if (TreeView1.Selected = NewTreeNode) Then
          begin
            if FindDivFormCode(FormID) Then  //只找分案頁上的案件條碼
            begin
          If (TreeView1.Selected = NewTreeNode) Then
          Begin
            If FindDivFormCode(FormID) Then // 只找分案頁上的案件條碼
            Begin
              imageCount := 0;
              ClearView(1);
              ContextList.Clear;
              CaseID := BarCode2CaseID;
              if DirectoryExists(ImageSavePath + CaseID+'\') then
              begin
                _DelTree(ImageSavePath + CaseID+'\');
                SetCaseList('D',-1,CaseID);
              end;
            end;
            if CaseID = '' then
            begin
              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+'\';
            End;
          End;
          SavePath := ImageSavePath + CaseID + '\';
          Str2Dir(SavePath);
          DocNo := FormCode2DocNo(FormID);
          DocDir := FindLastestDocDir(CaseID,DocNo);
          if DocNoNeedDiv(DocNo) then   //要分份數
          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 := FindLastestDocDir(CaseID, DocNo);
          If DocNoNeedDiv(DocNo) Then // 要分份數
          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   //是表單第一頁且要分份
            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+'\';
            Else // Attach 附件
              DocDir := DocNo2DocNoDir(ImageSavePath + CaseID + '\', DocNo);
          End;
          If (Not DirectoryExists(ImageSavePath + CaseID + '\' + DocDir + '\'))
            And (DocDir <> AttName) Then
            SetDocNoList('A', -1, CaseID, DocDir, '1');
          SavePath := ImageSavePath + CaseID + '\' + DocDir + '\';
          Str2Dir(SavePath);
          ContextList.Clear;
          if FileExists(SavePath+'Context.dat') then
            ContextList.LoadFromFile(SavePath+'Context.dat');
          If FileExists(SavePath + 'Context.dat') Then
            ContextList.LoadFromFile(SavePath + 'Context.dat');
          WriteCaseIndex(ImageSavePath + CaseID+'\');  //寫入案件索引
          if SaveFilename = '' then //附件
            SaveFilename:= Add_Zoo(ContextList.Count+1,3)+ext
          WriteCaseIndex(ImageSavePath + CaseID + '\');
          // 寫入案件索引
          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);
            SaveFilename := Add_Zoo(ContextList.Count + 1, 3) + '_' +
              SaveFilename + ext;
          SetContextList('A',-1,CaseID,DocDir,SaveFilename);
          if (TreeView1.Selected = NewTreeNode) Then
          For n := 1 To MpsBarcodeinf.Count Do
          Begin
            If MpsBarcodeinf.r180[n] <> 0 Then // 依條碼角度轉影像
            Begin
              Rotate(iGraphic, MpsBarcodeinf.r180[n]);
              MpsGetBarcode(iGraphic, MpsBarcodeinf);
              Break;
            End;
          End;
          if iGraphic.Palette.palNumEntries = 0 then  //20171130 彩色 會為0  黑白 為2
          begin
            if imageCount = 0 then
            begin
              SetCaseList('A',-1,CaseID);
              MyTreeNode1 := TreeView1.Items.AddChild(NewTreeNode,CaseID);
            iGraphic.Compression:=tcJPEG;
            iGraphic.JpegQuality:=cooom;
          end;
          If LowerCase(ExtractFileExt(SavePath + SaveFilename)) = '.tif' Then
          Begin
            If FileExists(SavePath + SaveFilename) Then
              SaveStream := TFileStream.Create(SavePath + SaveFilename, fmOpenReadWrite)
            Else
              SaveStream := TFileStream.Create(SavePath + SaveFilename, fmCreate);
            Try
              SaveStream.Seek(0, soFromBeginning);
              iGraphic.AppendToStream(SaveStream);
            Finally
              SaveStream.Free;
            End;
          End
          Else If LowerCase(ExtractFileExt(SavePath + SaveFilename))
            = '.jpg' Then
          Begin
            If FileExists(SavePath + SaveFilename) Then
              DeleteFile(SavePath + SaveFilename);
            // SaveStream := TFileStream.Create( PEFileName ,fmCreate );
            JpgGr := TJpegGraphic.Create;
            Try
              JpgGr.Assign(iGraphic);
              JpgGr.SaveQuality := 30;
              // JpgGr.AppendToStream(SaveStream);
              JpgGr.SaveToFile(SavePath + SaveFilename);
            Finally
              JpgGr.Free;
              // SaveStream.Free;
            End;
          End;
          // Rotate(ISB.Graphic,MpsBarcodeinf.r180[n]);  //20170705 加入有條碼就轉正
          // 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;
            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+'\';
          // 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);
          If FileExists(ImageSavePath + CaseID + '\' + NowDocDir +
            '\Context.dat') Then
            ContextList.LoadFromFile(ImageSavePath + CaseID + '\' + NowDocDir +
              '\Context.dat');
          If NowFormCode <> '' Then
            SaveFilename := Add_Zoo(ContextList.Count + 1, 3) + '_' +
              NowFormCode + ext
          Else
            SaveFilename := Add_Zoo(ContextList.Count + 1, 3) + ext;
          For n := 1 To MpsBarcodeinf.Count Do
          Begin
            If MpsBarcodeinf.r180[n] <> 0 Then // 依條碼角度轉影像
            Begin
              Rotate(iGraphic, MpsBarcodeinf.r180[n]);
              MpsGetBarcode(iGraphic, MpsBarcodeinf);
              Break;
            End;
          End;
          // Rotate(ISB.Graphic,MpsBarcodeinf.r180[n]); //20170705 加入有條碼就轉正
          if iGraphic.Palette.palNumEntries = 0 then  //20171130 彩色 會為0  黑白 為2
          begin
            iGraphic.Compression:=tcJPEG;
            iGraphic.JpegQuality:=cooom;
          end;
          If LowerCase(ExtractFileExt(SavePath + SaveFilename)) = '.tif' Then
          Begin
            If FileExists(SavePath + SaveFilename) Then
              SaveStream := TFileStream.Create(SavePath + SaveFilename,
                fmOpenReadWrite)
            Else
              SaveStream := TFileStream.Create(SavePath + SaveFilename,
                fmCreate);
            Try
              SaveStream.Seek(0, soFromBeginning);
              iGraphic.AppendToStream(SaveStream);
            Finally
              SaveStream.Free;
            End;
          End
          Else
          Begin
            If LowerCase(ExtractFileExt(SavePath + SaveFilename)) = '.jpg' Then
            Begin
              If FileExists(SavePath + SaveFilename) Then
                DeleteFile(SavePath + SaveFilename);
              // SaveStream := TFileStream.Create( PEFileName ,fmCreate );
              JpgGr := TJpegGraphic.Create;
              Try
                JpgGr.Assign(iGraphic);
                JpgGr.SaveQuality := 30;
                // JpgGr.AppendToStream(SaveStream);
                JpgGr.SaveToFile(SavePath + SaveFilename);
              Finally
                JpgGr.Free;
                // SaveStream.Free;
              End;
            End;
          End;
          // ISB.SaveToFile(SavePath+SaveFilename);
          ContextList.Add(SaveFilename);
          ContextList.SaveToFile(SavePath+'Context.dat');
        end;
      end;
      ClearErrini(CaseID,MyTreeNode1);  //清掉檢核記錄
      if (TreeView1.Selected = MyTreeNode1) or (TreeView1.Selected = NewTreeNode) then
      begin
        LoadImgFile;
      end
      Else
      begin
        DrawDocItem2(MytreeNode1,CaseID); //長出文件名稱的樹並傳回是否有申請書的影像
        page := GetCasePage(ImageSavePath,CaseID);
        MytreeNode1.Text := Format(_Msg('%s-%d頁'),[CaseID,page]);
      end;
      NewTreeNodeRefresh;
      Application.ProcessMessages;
      DataLoading(False,False);
    finally
    ISB.Free;
    end;
  end;
          ContextList.SaveToFile(SavePath + 'Context.dat');
        End;
        if iGraphic = iGraphic_First then
          iGraphic := iGraphic_Sec
        else
          iGraphic.Assign(nil);
      End //While 結束
    End;
    ClearErrini(CaseID, MyTreeNode1);
    // 清掉檢核記錄
    If (TreeView1.Selected = MyTreeNode1) Or
      (TreeView1.Selected = NewTreeNode) Then
    Begin
      LoadImgFile;
    End
    Else
    Begin
      DrawDocItem2(MyTreeNode1, CaseID);
      // 長出文件名稱的樹並傳回是否有申請書的影像
      page := GetCasePage(ImageSavePath, CaseID);
      // ShowMessage('page='+IntToStr(page));
      MyTreeNode1.Text := Format(_Msg('%s-%d頁'), [CaseID, page]);
    End;
    // ShowMessage('AAAA');
    NewTreeNodeRefresh;
    Application.ProcessMessages;
    DataLoading(false, false);
finally
ISB.Free;
end;
  End;
End;
procedure TCB_IMGPSScanX.PM106Click(Sender: TObject);
var
@@ -2812,16 +3090,17 @@
  i : Integer;
  DocListForm : TDocListForm;
  OldName,NewName,Ext : String;
  NewFormID,NewFormName : String;
  NewFormID,NewFormName,CustomDocNo : String;
begin
  DocListForm := TDocListForm.Create(self);
  try
    InitialLanguage(PatchDlg); //載入多國語言
    InitialLanguage(DocListForm); //載入多國語言
    DocListForm.CheckBox1.Visible:=True;
    for i := 1 to FORM_INF_List.Count - 1 do
    begin
      NewFormID := GetSQLData(FORM_INF_List,'T1.FORM_ID',i);
      NewFormName := GetSQLData(FORM_INF_List,'T1.FORM_DESC',i);
      if not FormIDAppear(NewFormID) then Continue;
      if not FormIDAppear(NewFormID) then Continue;   //20170816 先秀全部的
      if (NewFormID <> FileName2FormCode(DisplayISB.FileName)) and FormIDExists(NewFormID,False,i) then
      begin
        DocListForm.FormIDList.Add(NewFormID+'#@#'+NewFormName);
@@ -2834,30 +3113,64 @@
    end;
    if DocListForm.ShowModal = mrOk then
    begin
      NewFormID := DocListForm.DocLV.Selected.Caption;
      if NowFormCode <> AttName then
      if not (DocListForm.DocLV.Selected=nil) then
         NewFormID := DocListForm.DocLV.Selected.Caption;
      if DocListForm.CheckBox1.Checked then
      begin
        If Messagedlg(Format(_Msg('是否將"%s"的所有影像歸類成"%s"'),[FormCode2FormName(NowCaseNo,NowFormCode),FormCode2FormName(NowCaseNo,NewFormID)]),MtConfirmation,[mbyes,mbcancel],0) = mrcancel Then
        //歸類到自訂文件
        NewFormID:=DocListForm.Edit1.Text;
        if Trim(DocListForm.Edit1.Text)='' then
        begin
          Showmessage('未輸入文件名稱');
          Exit;
        end;
        if FindCustomDocName(DisplayPath,NewFormID) then
        begin
          Showmessage(Format('文件名稱:"%s"己存在',[NewFormID]));
          Exit;
        end;
        if NowFormCode <> AttName then
        begin
          If Messagedlg(Format(_Msg('是否將"%s"的所有影像歸類成"%s"'),[FormCode2FormName(NowCaseNo,NowFormCode),NewFormID]),MtConfirmation,[mbyes,mbcancel],0) = mrcancel Then
            Exit;
        end
        Else
        begin
          If Messagedlg(Format(_Msg('是否將"%s"的所有影像歸類成"%s"'),[_Msg('附件')+MyTreeNode3.Text,FormCode2FormName(NowCaseNo,NewFormID)]),MtConfirmation,[mbyes,mbcancel],0) = mrcancel Then
            Exit;
        end;
        CustomDocNo := GetNewCustomDocNo(DisplayPath,NewFormID);
//ShowMessage('CustomDocNo='+CustomDocNo);
        ShowText := _Msg('歸類中,請稍侯');
        DataLoading(True,True);
        FormIDReplace(NowCaseNo,NowDocDir,NowFormCode,CustomDocNo+'010101A');
      end
      Else
      else
      begin
        If Messagedlg(Format(_Msg('是否將"%s"的所有影像歸類成"%s"'),[_Msg('附件')+MyTreeNode3.Text,FormCode2FormName(NowCaseNo,NewFormID)]),MtConfirmation,[mbyes,mbcancel],0) = mrcancel Then
          Exit;
        //歸類到既有文件
        if NowFormCode <> AttName then
        begin
          If Messagedlg(Format(_Msg('是否將"%s"的所有影像歸類成"%s"'),[FormCode2FormName(NowCaseNo,NowFormCode),FormCode2FormName(NowCaseNo,NewFormID)]),MtConfirmation,[mbyes,mbcancel],0) = mrcancel Then
            Exit;
        end
        Else
        begin
          If Messagedlg(Format(_Msg('是否將"%s"的所有影像歸類成"%s"'),[_Msg('附件')+MyTreeNode3.Text,FormCode2FormName(NowCaseNo,NewFormID)]),MtConfirmation,[mbyes,mbcancel],0) = mrcancel Then
            Exit;
        end;
        ShowText := _Msg('歸類中,請稍侯');
        DataLoading(True,True);
        FormIDReplace(NowCaseNo,NowDocDir,NowFormCode,NewFormID);
      end;
      ShowText := _Msg('歸類中,請稍侯');
      DataLoading(True,True);
      //FormIDReplace(DisplayPath,NowFormCode,FormID);
      //ShowFileReplace(DisplayPath,FormID);
      FormIDReplace(NowCaseNo,NowDocDir,NowFormCode,NewFormID);
      ClearErrini(NowCaseno,MyTreeNode1);  //清掉檢核記錄
      DrawDocItem2(MytreeNode1,NowCaseno);
      //DrawDocItem(MytreeNode1,FORM_INF_List,NowCaseno);
      DataLoading(False,False);
      TreeView1.Selected := MyTreeNode1;
      TreeView1Click(self);
    end;
  finally
  DocListForm.Free;
  end;
@@ -2900,6 +3213,7 @@
  CustomDocNo : String;
  DocDir : String;
  SavePath : String;
  ST1:TStringList;
begin
  if InputQuery('輸入其他文件名稱','文件名稱',CustomDocName) then
  begin
@@ -2910,7 +3224,7 @@
        Showmessage(Format('文件名稱:"%s"己存在',[CustomDocName]));
        Exit;
      end;
      ST1:=TStringList.Create;
      CustomDocNo := GetNewCustomDocNo(DisplayPath,CustomDocName);
      DocDir := CustomDocNo;
      SavePath := ImageSavePath+NowCaseNo+'\'+DocDir+'\';
@@ -3176,14 +3490,36 @@
      PM104.Visible := True;   //檔案加入影像
    end;
    if FMode='ESCAN' then
    if FModeName='異動件' then
    begin
      PM101.Visible := False;
      PM101.Visible := True;
    end;
//    if FMode='ESCAN' then
//    begin
//      PM101.Visible := True;
//    end;
  end
  Else if TreeView1.Selected = MyTreeNode1 then    //案件層
  begin
    PM101.Visible := True;   //刪除
    if FImgDelete='Y' then
    begin
      PM101.Visible:=True;
    end;
    if FImgDelete='N' then
    begin
      PM101.Visible:=false;
    end;
    if FMode='ESCAN' then
      PM101.Visible:=false;
    if FModeName='異動件' then
    begin
      PM101.Visible := True;
    end;
    if not CaseDelete_Enable(NowCaseno) then //
      PM101.Enabled := False
    else
@@ -3191,25 +3527,39 @@
    PM103.Visible := True;   //掃瞄器加入影像
    //PM107.Visible := True;   //寫備註
    //PM109.Visible := True;   //檢核此筆
    if FCustDocYN <> 'N' Then
      PM110.Visible := True;   //新增自訂文件
//    if FCustDocYN <> 'N' Then
//      PM110.Visible := True;   //新增自訂文件  20170914 先不在tree 中做自訂文件  讓user在縮圖做
    PM104.Visible := True;   //檔案加入影像
    if (FMode = 'NSCAN') then
    begin
      PM102.Visible := True;   //修改案件編號
    end;
    if FMode='ESCAN' then
    begin
      PM101.Visible := False;
    end;
//    if FMode='ESCAN' then
//    begin
//      PM101.Visible := True;
//    end;
  end
  Else if TreeView1.Selected = MyTreeNode2 then    //文件層
  begin
    PM101.Visible := True;   //刪除
    //PM107.Visible := True;   //寫備註
    //PM109.Visible := True;   //檢核此筆
    if FCustDocYN <> 'N' Then
      PM110.Visible := True;   //新增自訂文件
//    if FCustDocYN <> 'N' Then
//      PM110.Visible := True;   //新增自訂文件
    if FImgDelete='Y' then
    begin
      PM101.Visible:=True;
    end;
    if FImgDelete='N' then
    begin
      PM101.Visible:=false;
    end;
    if FModeName='異動件' then
    begin
      PM101.Visible := True;
    end;
    if GetUseCase('T',DisplayPath,NowDocDir) <> '' then   //沒有被引用走的
      PM101.Enabled := False    //刪除
    Else
@@ -3218,10 +3568,10 @@
      PM111.Visible := True;   //修改份數
    if (FMode = 'NSCAN') then
      PM102.Visible := True;   //修改案件編號
    if FMode='ESCAN' then
    begin
      PM101.Visible := False;
    end;
//    if FMode='ESCAN' then
//    begin
//      PM101.Visible := True;
//    end;
  end
  Else if TreeView1.Selected = MyTreeNode3 then    //表單層
  begin
@@ -3229,10 +3579,26 @@
    PM104.Visible := True;   //檔案加入影像
    PM108.Visible := True;   //歸類
    PM103.Visible := True;   //掃瞄器加入影像
    if FCustDocYN <> 'N' Then
      PM110.Visible := True;   //新增自訂文件
//    if FCustDocYN <> 'N' Then
//      PM110.Visible := True;   //新增自訂文件
    if GetFormIDPage(ContextList,NowFormCode) < 1 Then
    begin
      PM108.Visible := False;   //歸類
    end;
    if FImgDelete='Y' then
    begin
      PM101.Visible:=True;
    end;
    if FImgDelete='N' then
    begin
      PM101.Visible:=false;
    end;
    if FModeName='異動件' then
    begin
      PM101.Visible := True;
    end;
    if GetUseCase('T',DisplayPath,NowDocDir) <> '' then   //被引用走的
    begin
      PM101.Enabled := False;   //刪除
@@ -3247,22 +3613,12 @@
    end;
    if (FMode = 'NSCAN') then
      PM102.Visible := True;   //修改案件編號
    //PM103.Visible := True;   //掃瞄器加入影像
    //PM104.Visible := True;   //檔案加入影像
    //PM107.Visible := True;   //寫備註
    //PM109.Visible := True;   //檢核此筆
    if FMode='ESCAN' then
    begin
      PM101.Visible := False;
      PM102.Visible := True;   //修改案件編號
    end;
  end;
  if FImgDelete='Y' then
  begin
    PM101.Visible:=True;
  end;
end;
@@ -3316,28 +3672,52 @@
procedure TCB_IMGPSScanX.PopupMenu6Popup(Sender: TObject);
begin
  PM601.Visible := False;  //歸類
  PM602.Visible := False;  //自行定義文件名稱
  PM601.Visible := True;  //歸類
  PM602.Visible := True;  //自行定義文件名稱
  PM603.Visible := False;  //掃描替換此頁
  PM604.Visible := False;  //歪斜矯正
  PM605.Visible := False;  //刪除
  if ((NowDocNo = 'Attach') or (NowDocNo = 'S_Attach')) and (FCustDocYN <> 'N') then
    PM602.Visible := True;  //自行定義文件名稱
  //PM603.Visible := True;  //掃描替換此頁
  PM604.Visible := True;  //歪斜矯正
  PM601.Visible := True;  //歸類
  PM605.Visible := True;  //刪除
//  if FMode='ESCAN' then
//  begin
//    PM601.Visible := False;  //歸類
//    PM602.Visible := False;  //自行定義文件名稱
//    PM603.Visible := False;  //掃描替換此頁
//    PM604.Visible := False;  //歪斜矯正
//    PM605.Visible := False;  //刪除
//  end;
  if ((NowDocNo = 'Attach') or (NowDocNo = 'S_Attach')) and (FCustDocYN <> 'N') then
  begin
    PM602.Visible := True;  //自行定義文件名稱
    //PM603.Visible := True;  //掃描替換此頁
    PM604.Visible := True;  //歪斜矯正
    PM601.Visible := True;  //歸類
    PM605.Visible := True;  //刪除
  end;
  if  FModeName<>'異動件' then
  begin
    if (FImgDelete='Y') then
    begin
      PM605.Enabled:=True;
    end;
    if FImgDelete='N' then
    begin
      PM605.Enabled:=false;
    end;
  end;
  if CheckSelectImg_UseCase(DisplayPath,NowCaseNo) then //選擇的影像不可有引用的
  begin
    PM601.Enabled := False;  //歸類
    PM605.Enabled := False;  //刪除
  end
  Else
  begin
    PM601.Enabled := True;  //歸類
    PM605.Enabled := True;  //刪除
  end;
end;
procedure TCB_IMGPSScanX.PrePageBtnClick(Sender: TObject);
@@ -3372,6 +3752,7 @@
var
  SampleFormID : String;
  SendData : String;
  buttonSelected : Integer;
begin
  ScanMode := smSample;
  ClearView(1);
@@ -3384,6 +3765,19 @@
  ShowText := _Msg('範本掃描中,請稍候');
  DataLoading(True,True);
  SampleFormID := UpperCase(InputBox(_Msg('範本檔掃瞄輸入畫面'),_Msg('請輸入文件編號'),''));
  if SampleFormIDList.IndexOf(SampleFormID)<>-1 then
  begin
    // Show a custom dialog
    buttonSelected := messagedlg(SampleFormID+'已有範本,是否取代?',mtCustom,
                                [mbYes,mbCancel], 0);
    if buttonSelected = mrCancel then
    begin
      DataLoading(false,false);
      Exit;
    end;
  end;
  if SampleFormID <> '' then
  begin
    if FormIDExists(SampleFormID,False,0) then
@@ -3635,11 +4029,11 @@
  //CreateFormID_FormName(DisplayPath);  //產生FormID_FormName.dat
  //CreateDocNo_DocName(DisplayPath); //產生DocNo_Name.dat
  //Showmessage(CreateDocNo_Info(DisplayPath));  //產生 Docno,份數,頁數;Docno,份數,頁數 的回傳字串
  //lb1.Caption:='AAAAAAAAAAA';
  //Showmessage(CreateDocnoFrom_Info(NowCaseno));
  //Showmessage(self.CreateCustDocNoFrom_Info(NowCaseno));
        initkscan;
  //ShowMessage('FMaxUploadSize='+FMaxUploadSize);
        //initkscan;
   showmessage('FUrl='+FUrl+#10#13+
   'FCaseID='+FCaseID+#10#13+
   'FMode='+FMode+#10#13+
@@ -3669,8 +4063,16 @@
    'FCaseNoLength='+ IntToStr(FCaseNoLength)   +#10#13+
    'FImgDelete='+    FImgDelete+#10#13+
    'FIsExternal='+    FIsExternal+#10#13+
    'FCheck_main_form='+    FCheck_main_form);
    'FWH_category='+FWH_category+
    'FCheck_main_form='+    FCheck_main_form+#10#13+
    'FMaxUploadSize='+FMaxUploadSize);
    //FImgDelete:='Y';
  LoadImgFile;
 { ShowMessage('UpLPoint='+IntToStr(UpLPoint.X)+','+IntToStr(UpLPoint.Y)+#10#13+
    'UpRPoint='+IntToStr(UpRPoint.X)+','+IntToStr(UpRPoint.Y)+#10#13+
    'DownLPoint='+IntToStr(DownLPoint.X)+','+IntToStr(DownLPoint.Y)+#10#13+
    'DownRPoint='+IntToStr(DownRPoint.X)+','+IntToStr(DownRPoint.Y));
  }
end;
procedure TCB_IMGPSScanX.Button4Click(Sender: TObject);
@@ -3681,6 +4083,8 @@
  //Showmessage(self.Doc_Inf_List.Text);
  //LoadImgFile;
  //LoadImgFile1;
  //ISB1.MouseMode:=mmAmplifier;
  str:='';
  for I := 1 to 11 do // 看 OMRErrInfo 的內容
  begin
@@ -3696,6 +4100,14 @@
  ShowMessage('MEMO_INF_List='+MEMO_INF_List.Text)         ;
  ShowMessage('WORK_INF_List='+WORK_INF_List.Text)          ;
  ShowMessage('LASTEST_FORM_INF_List='+LASTEST_FORM_INF_List.Text)   ;
  ShowMessage('SampleFormIDList='+SampleFormIDList.Text);
  ShowMessage('ExistImgList='+ExistImgList.Text);
  ShowMessage('LastInitFormidList='+LastInitFormidList.Text);
  ShowMessage('IN_WH_DocNoList='+IN_WH_DocNoList.Text);
//  SampleFormIDList.Add('31A00101011706A');
//  SampleFormIDList.Add('31A00101021706A');
//  SampleFormIDList.Add('31A00101031706A');
end;
procedure TCB_IMGPSScanX.StatrTwainScan;
@@ -3713,6 +4125,7 @@
  ScanInfo.Graphic := TTiffGraphic.Create;
  try
    ISB := nil; //規零
//ShowMessage(IntToStr(ScanDpi));
    Scanner.RequestedXDpi := ScanDpi;
    Scanner.RequestedYDpi := ScanDpi;
    Scanner.RequestedImageFormat := ScanColor;
@@ -3721,6 +4134,10 @@
    Try
      Scanner.OpenSource;
      Scanner.Duplex := ScanDuplex; //雙面
      if FMode='SAMPLESCAN' then
        Scanner.Duplex:=False;
      //Scanner.FEEDERENABLED  := not ScanFlatCB.Checked;     // 先拿掉平台
      If ScanImgSetUse Then
      begin
@@ -4019,17 +4436,28 @@
          if FormID = '' then
          begin
            FormID := BarCode2FormID; //取出FormID
          end;
          if (FormID <> '') and ISGuideFormID(FormID) then
            NowGuideFormID := FormID;
          if (FormID <> '') and ISDivPageFormID(FormID) then
          begin
            NowDivPageFormID := FormID;
          end;
          if (FormID <> '') and ISGuideFormID(FormID) then
          begin
            NowGuideFormID := FormID;
          end;
//ShowMessage('NowGuideFormID='+NowGuideFormID);
          if (not (FindDivFormCode(FormID))) and (NowGuideFormID <> '') {and (FormID = '')} then
            FormID := NowGuideFormID;
          DocNo := FormCode2DocNo(FormID);
          if (FormID <>'') and FindDivFormCode(FormID) Then  //只找分案頁上的案件條碼
//ShowMessage('FormID='+FormID);
//ShowMessage('ISDivPageFormID(FormID)='+BoolToStr(ISDivPageFormID(FormID),true));
//ShowMessage('FindDivFormCode(FormID)='+BoolToStr(FindDivFormCode(FormID),true));
//ShowMessage('A NowDivPageFormID='+NowDivPageFormID+#10#13+'FormID='+FormID+#10#13+'ScanCaseno='+ScanCaseno);
          if (FormID <>'') and FindDivFormCode(FormID) and (NowDivPageFormID <> '')  Then  //只找分案頁上的案件條碼
          begin
            ScanInfo.ImageCount := 0;
            ClearView(1);
            ContextList.Clear;
@@ -4037,6 +4465,8 @@
            ClearCaseIndex;                //清掉案件索引
            ScanCaseno := BarCode2CaseID; //取出案件編號
            NowGuideFormID := '';
            NowDivPageFormID :='';
//ShowMessage('B NowGuideFormID='+NowGuideFormID+#10#13+'FormID='+FormID+#10#13+'ScanCaseno='+ScanCaseno);
          end;
          if ScanCaseno = '' then //一開始都沒找到
          begin
@@ -4126,10 +4556,9 @@
      begin
        ScanSaveFilename := '';
        FormID := BarCode2FormID; //取出FormID
        if (FormID <> '') and ISGuideFormID(FormID) then
        if (FormID <> '') and ISGuideFormID(FormID) then   //20170510 註解 因為DSCAN 會全擠在導引頁下
          NowGuideFormID := FormID;
        //Showmessage('A:'+FormID+#13+'B:'+NowGuideFormID);
        if (NowGuideFormID <> '') {and (FormID = '')} then
        if (NowGuideFormID <> '') {and (FormID = '')} then  //20170510 註解  因為DSCAN 會全擠在導引頁下
          FormID := NowGuideFormID;
        DocNo := FormCode2DocNo(FormID);
        ScanDocDir := FindLastestDocDir(ScanCaseno,DocNo);
@@ -4426,21 +4855,39 @@
  W,H : Integer;
begin
  Result := 0;
//ShowMessage('GetSiteOMR');
  IF (ImageScrollBox1.FileName <> FileName) and (FileName <> '') then
  begin
//ShowMessage('11111'+ImageScrollBox1.FileName+#10#13+FileName);
    ImageScrollBox1.LoadFromFile(FileName,1);
    FindPoint(ImageScrollBox1.Graphic,UpLPoint,UpRPoint,DownLPoint,'NONE');
{
ShowMessage('UpLPoint='+IntToStr(UpLPoint.X)+','+IntToStr(UpLPoint.Y)+#10#13+
'UpRPoint='+IntToStr(UpRPoint.X)+','+IntToStr(UpRPoint.Y)+#10#13+
'DownLPoint='+IntToStr(DownLPoint.X)+','+IntToStr(DownLPoint.Y)+#10#13+
'DownRPoint='+IntToStr(DownRPoint.X)+','+IntToStr(DownRPoint.Y));
    FindPoint(ImageScrollBox1.Graphic,UpLPoint,UpRPoint,DownLPoint,'');
ShowMessage('UpLPoint='+IntToStr(UpLPoint.X)+','+IntToStr(UpLPoint.Y)+#10#13+
'UpRPoint='+IntToStr(UpRPoint.X)+','+IntToStr(UpRPoint.Y)+#10#13+
'DownLPoint='+IntToStr(DownLPoint.X)+','+IntToStr(DownLPoint.Y)+#10#13+
'DownRPoint='+IntToStr(DownRPoint.X)+','+IntToStr(DownRPoint.Y));
}
    ClearLine(ISB_BW.Graphic,bt);
    ISB_BW.Redraw(True);
    Application.ProcessMessages;
  end;
  If ImageScrollBox1.FileName <> '' Then
  begin
//ShowMessage('22222'+ImageScrollBox1.FileName);
    Xdpi := ImagescrollBox1.Graphic.XDotsPerInch;
    Ydpi := ImagescrollBox1.Graphic.YDotsPerInch;
    H := ImageScrollBox1.Graphic.Height;
    W := ImageScrollBox1.Graphic.Width;
//ShowMessage('Xdpi='+IntToStr(Xdpi)+#10#13+'Ydpi='+IntToStr(Ydpi)+#10#13+'H='+IntToStr(H)+#10#13+'W='+IntToStr(W)+#10#13);
//ShowMessage('Site='+Site);
    OMRRect := CM_Str2Rect(Site,Xdpi,UpLPoint);
Display1.Lines.Add('UpLPoint=('+IntToStr(UpLPoint.X)+','+IntToStr(UpLPoint.Y)+');'+Site+';'+IntToStr(OMRRect.Left)+','+IntToStr(OMRRect.top)+','+IntToStr(OMRRect.Right)+','+IntToStr(OMRRect.Bottom));
    if OMRRect.Left < 0 then
      OMRRect.Left := 0;
    if OMRRect.Top < 0  then
@@ -4451,6 +4898,8 @@
      OMRRect.Bottom := ImageScrollBox1.Graphic.Height;
    result := Get_OMR(ISB_BW.Graphic,OMRRect);
//ShowMessage('result='+IntToStr(result));
  end;
end;
@@ -4492,7 +4941,7 @@
          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);
          //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);
@@ -4506,7 +4955,7 @@
          ini.WriteInteger('DeviceDelete','Size_New',DeviceDeleteSize);
          ini.WriteBool('Scanner','Reverse',ScannerReverse);
          ini.WriteBool('Scanner','BoardClear',BoardClear);
          ini.ReadInteger('Scanner','Dpi',ScanDpi);
          //ini.ReadInteger('Scanner','Dpi',ScanDpi);
          //ini.WriteBool('Scanner','Duplex',ScanDuplex);
          ini.WriteInteger('Scanner','ScanRotate',ScanRotate);
          ini.WriteBool('Scanner','ScanDeskew',ScanDeskew);
@@ -4532,7 +4981,7 @@
  Def_ScannerReverse := False;
  Def_BoardClear := False;
  Def_ScanDpi := 300;
  Def_ScanDuplex := False;
  Def_ScanDuplex := True;
  Def_ScanRotate := 0;
  Def_ScanDeskew := False;
  Def_ScanImgSetUse := False;
@@ -4679,6 +5128,21 @@
    begin
      PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
      GuideFormIDList.CommaText := PARA_CONTENT;
    end
    Else if UpperCase(GetSQLData(WORK_INF_List,'PARA_NO',i)) = 'DIVPAGEFORMID' Then     //當分案頁的表單
    begin
      PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
      DivPageFormIDList.CommaText := PARA_CONTENT;
    end
    Else if UpperCase(GetSQLData(WORK_INF_List,'PARA_NO',i)) = 'FILE_COMPRESSION' Then     //20171211 jpg to tif 壓縮比
    begin
      PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
      FJpgCompression := StrToInt(PARA_CONTENT);
    end
    Else if UpperCase(GetSQLData(WORK_INF_List,'PARA_NO',i)) = 'MAX_UPLOAD_SIZE' Then     //取得 上傳大小的限制(MB)
    begin
      PARA_CONTENT := GetSQLData(WORK_INF_List,'PARA_CONTENT',i);
      FMaxUploadSize := PARA_CONTENT;
    end;
  end;
  ScanDuplex := Def_ScanDuplex;
@@ -4730,6 +5194,7 @@
  Md : TMouseMode;
  ISB : TImageScrollBox;
begin
//ShowMessage(IntToStr(v));
  case v of
   -1 : Md := TMouseMode(mmUser);
    0 : Md := TMouseMode(mmAmplifier);
@@ -4744,6 +5209,7 @@
  begin
    ISB := TImageScrollBox(FindComponent('ISB'+inttostr(i)));
    ISB.MouseMode := TMouseMode(Md);
    //Label3.Caption:='v='+IntToStr(v)+'  time'+FormatDateTime('yyyy/mm/dd HH:MM:SS', now);
  end;
end;
@@ -4824,6 +5290,39 @@
    ServerTime := Copy(ServerDate,9,6);
    ServerDate := Copy(ServerDate,1,8);
    Balance := GetBalance(ServerTime); //Server 跟Local的時間差
    Result := True;
  end
  Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
  begin
    HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
    Result := False;
    Exit;
  end;
end;
Function TCB_IMGPSScanX.GetSampleInf : Boolean;
var
  str:String;
begin
  Result := False;
  If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/serversampleforocx','work_no='+FWork_no,FReWrite,Memo1,False) Then
  begin
    HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
    Result := False;
    Exit;
  end;
  IF memo1.Lines.Strings[0] = '1' Then
  begin
    HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
    Result := False;
    Exit;
  end
  Else IF memo1.Lines.Strings[0] = '0' Then
  begin
    str := memo1.Lines.Strings[1];
    SampleFormIDList.CommaText:=str;
    Result := True;
  end
  Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
@@ -5142,6 +5641,16 @@
  StringtoFile(IN_WH_DocNoList.Text,'D:\121.txt');}
end;
function TCB_IMGPSScanX.CheckRequiredColumnValues(workno, caseno:String): Boolean;
begin
//
  Result:=False;
  if (workno='HLN') and (caseno[9]='3') then
    Result:=True;
  if (workno='HLN') and (caseno[9]='4') then
    Result:=True;
end;
Procedure TCB_IMGPSScanX.CheckRule2OMRErrInfo;   //檢核規則填入OMRErrINFo Record
var i : Integer;
    CheckNo : String;
@@ -5193,8 +5702,11 @@
  FileList:TStringlist;
  DocDir : String;
begin
  DeleteFile(Path+FileName);
  DocDir := Path2DocDir(Path,CaseID);
//ShowMessage('DocDir='+DocDir);
  SetContextList('D',-1,CaseID,DocDir,FileName);
  {FileList:=TStringlist.Create;
  try
@@ -5231,6 +5743,15 @@
    begin
      if FileName2FormCode(FileList.Strings[i]) = FormID then
      begin
        if (FMode = 'ESCAN') and (FModeName<>'異動件') then
        begin
          if ISExistImg(ImageSavePath+CaseID+'\'+DocDir+'\'+FileList.Strings[i]) then
          begin
            //ShowMessage('有圖為非當次掃瞄,不可刪除');
            Break;
          end;
        end;
//ShowMessage(FileList.Strings[i]);
        DeleteImageFile(ImageSavePath+CaseID+'\'+DocDir+'\',FileList.Strings[i],CaseID);
      end;
    end;
@@ -5288,6 +5809,40 @@
    Cust_DocNoList.LoadFromFile(Path+'CustomDocNo.dat');
end;
Function TCB_IMGPSScanX.DeleteDocNoFileForESCAN(Path,DocNo:String):Boolean;  //刪除指定DocNo文件
var
  i,j,k: Integer;
  FName : String;
  ST1,ST2,ST3:TStringList;
begin
  Result := False;
//ShowMessage(DocNo);
  for i := ContextList.Count - 1 downto 0 do
  begin
    FName := ContextList.Strings[i];
    If (DocNo = FormCode2DocNo(FileName2FormCode(FName))) or (DocNo=AttName) then
    begin
      if not ISExistImg(Path+'\'+FName) then
      begin
        DeleteFile(Path+'\'+FName);
        ContextList.Delete(i);
      end;
      Result := True; //有刪到指定文件
    end;
  end;
  ContextList.SaveToFile(Path+'\Context.dat');
  ContextList.LoadFromFile(Path+'\Context.dat');
  if ContextList.Count=0 then
  begin
    _DelTree(Path);
    SetDocNoList('D',-1,NowCaseNo,NowDocDir,'');
  end;
end;
Procedure TCB_IMGPSScanX.DeleteShowFile(Path:String); //刪除顯示中的影像
var
  i : Integer;
@@ -5332,10 +5887,20 @@
      iPage := Add_Zoo(i,2);
      for n := 0 to S.Count - 1 do
      begin
        if (FWH_category='N') and (FIs_In_Wh='Y') then
        begin
          if ISExistImg(ImageSavePath+CaseID+'\upload\'+S.Strings[n]) then
          begin
            Continue;
          end;
        end;
        FormCode := FileName2FormCode(S.Strings[n]);
//Showmessage('1:'+version+','+FormCode2Version(FormCode)+','+DocNo+','+FormCode2DocNo(FormCode)+','+iPage+','+FormCode2Page(FormCode));
LogFile1.LogToFile(logTimeString+'CheckCaseDocNoPage caseno='+CaseID+','+version+','+FormCode2Version(FormCode)+','+DocNo+','+FormCode2DocNo(FormCode)+','+iPage+','+FormCode2Page(FormCode));
        if (version = FormCode2Version(FormCode)) and (DocNo = FormCode2DocNo(FormCode)) and (ipage = FormCode2Page(FormCode)) then
        begin
LogFile1.LogToFile(logTimeString+'CheckCaseDocNoPage caseno='+CaseID+','+version+','+FormCode2Version(FormCode)+','+DocNo+','+FormCode2DocNo(FormCode)+','+iPage+','+FormCode2Page(FormCode));
//Showmessage(version+','+DocNo+',iPage='+iPage);
//Showmessage(inttostr(Count+1));
          Inc(Count);
@@ -5361,6 +5926,13 @@
    S.LoadFromFile(ImageSavePath+CaseID+'\upload\Context.dat');
    for i := 0 to S.Count - 1 do
    begin
      if FWH_category='N' then
      begin
        if ISExistImg(ImageSavePath+CaseID+'\upload\'+S.Strings[i]) then
        begin
          Continue;
        end;
      end;
      iFormCode := FileName2FormCode(S.Strings[i]);
      if FormCode = iFormCode then
      begin
@@ -5400,14 +5972,14 @@
    For i := 0 to S.Count -1 do
    begin
      FileName := S.Strings[i];
      ImageReSize(CaseID,FileName);  //依十字定位點做縮放
      ImageReSize_FormID(CaseID,FileName);  //依十字定位點做縮放
    end;
  finally
  S.Free;
  end;
end;
Procedure TCB_IMGPSScanX.ImageReSize(CaseID,FileName:String);  //依十字定位點做縮放
Procedure TCB_IMGPSScanX.ImageReSize_FormID(CaseID,FileName:String);  //依十字定位點做縮放
var
  FormID : String;
  DH,DW : String;
@@ -5416,7 +5988,9 @@
  SizeStr : String;
  S : TStringlist;
  v,v1:Integer;
  IsRecordMD5:Boolean;
begin
  IsRecordMD5:=False;
  FormID := FileName2FormCode(FileName);
  if FormID = '' then Exit;
@@ -5426,17 +6000,40 @@
    DW := GetFindResult('T1.FORM_WIDTH');
    ANCHOR := UpperCase(GetFindResult('T1.ANCHOR'));
    ANCHOR := Index2Anchor(ANCHOR);
Display1.Lines.Add(FormID+','+DH+','+DW);
//ShowMessage('AAAAAAAAA');
    if ((ANCHOR = 'ANCHOR') or (ANCHOR = 'FRAME')) and (DH <> '') and (DW <> '') then  //有十字定位點
    begin
//ShowMessage('BBBBBBB');
      ImageScrollBox1.LoadFromFile(ImageSavePath+CaseID+'\Upload\'+FileName,1);
      if (FWH_category='N') and  ISExistImg(ImageSavePath+CaseID+'\Upload\'+FileName) then
      begin
        Exit;//20171103  補件  原有的圖不作resize
      end;
      //FindPoint(ImageScrollBox1.Graphic,UpLPoint,UpRPoint,DownLPoint,NowW,NowH);
      FindPoint(ISB_BW.Graphic,UpLPoint,UpRPoint,DownLPoint,NowW,NowH,ANCHOR);
      SizeStr := CheckSize(ISB_BW,UpLPoint,UpRPoint,DownLPoint,DW,DH);
      ImageResize(ImageScrollBox1.Graphic,ISB_BW.Graphic.Width,ISB_BW.Graphic.Height);
      FindPoint(ISB_BW.Graphic,UpLPoint,UpRPoint,DownLPoint,NowW,NowH,ANCHOR);
      v := 5;
      v1 := length(SizeStr);
      IF (SizeStr <> '') and (Copy(SizeStr,1,v) <> 'ERROR') then
      begin
//ShowMessage('CCCCC');
        if (ISExistImg(ImageSavePath+CaseID+'\Upload\'+FileName)) and (reSizeExistImgList.IndexOf(LoadFileGetMD5(ImageSavePath+CaseID+'\Upload\'+FileName))=-1) then
        begin
          IsRecordMD5:=True;
        end;
        ImageScrollBox1.SaveToFile(ImageSavePath+CaseID+'\Upload\'+FileName);
        if IsRecordMD5 then
        begin
          reSizeExistImgList.add(LoadFileGetMD5(ImageSavePath+CaseID+'\Upload\'+FileName));
        end;
//showmessage(ImageSavePath+CaseID+'\Upload\'+FileName);
        S := TStringlist.Create;                     ///20110422拿掉 換成上傳才做
        if FileExists(ImageSavePath+CaseID+'\Upload\ReSize.dat') then
          S.LoadFromFile(ImageSavePath+CaseID+'\Upload\ReSize.dat');
@@ -5518,6 +6115,8 @@
  casepath:String;
  filesizeInt:integer;
  case_page:string;
  Fname:String;
  FileRec:TSearchrec;
begin
  Result := True;
  TransName := CaseID;
@@ -5576,21 +6175,21 @@
  ST1:=TStringList.Create;
  ST1.LoadFromFile(path+'FormCode_Name.dat');
//ShowMessage(ST1.Text);
//ShowMessage(LastInitFormidList.Text);
  ST2:=TStringList.Create;
  for I := 0 to ST1.Count - 1 do
  begin
    if (Pos('_',St1.Strings[i])<>1) and (Pos('_',St1.Strings[i])<>-11) then
    if (Pos('_',St1.Strings[i])<>1) and (Pos('_',St1.Strings[i])<>-1) then
    begin
      str1:=Copy(ST1.Strings[i],1,Pos('_',St1.Strings[i])-1);
      if ST2.IndexOf(str1) = -1 then
      begin
        ST2.Add(str1);
        must_formidStr:= must_formidStr+str1+'@#,';
      end;
      ST2.Add(str1);
      must_formidStr:= must_formidStr+str1+'@#,';
    end;
  end;
  must_formidStr:=Copy(must_formidStr,1,Length(must_formidStr)-3) ;
//ShowMessage('must_formidStr='+must_formidStr);
//ShowMessage('AST2='+ST2.Text);
  for I := 0 to LastInitFormidList.Count - 1 do
  begin
    if ST2.IndexOf(LastInitFormidList.Strings[i]) <> -1 then
@@ -5598,19 +6197,15 @@
      ST2.Delete(ST2.IndexOf(LastInitFormidList.Strings[i]));
    end;
  end;
//ShowMessage('BST2='+ST2.Text);
  for I := 0 to ST2.Count - 1 do
  begin
    if i <> ST2.Count then
    begin
      last_add_formidstr:=last_add_formidstr+ST2.Strings[i]+'@#,';
    end
    else
    begin
      last_add_formidstr:=last_add_formidstr+ST2.Strings[i]
    end;
  end;
  last_add_formidstr:=Copy(last_add_formidstr,1,Length(last_add_formidstr)-3) ;
  ST1.Free;
  ST2.Free;
//ShowMessage('last_add_formidstr='+last_add_formidstr);
  ///////必要formid 20170315 end //////////////////////////
  ///保留外部影像  start///////////////////////////////
@@ -5639,6 +6234,26 @@
  if HaveMask then
    ZipMaskFile(Path,MaskPath,Path,'MaskImg.zip');  //有遮罩設定的才產生
  /////壓檔////
  ///檢查上傳的zip大小////
   FName :=Path+ 'Img.zip';
    FindFirst(FName, faAnyfile, FileRec);
    //FMaxUploadSize
//ShowMessage(IntToStr(FileRec.Size));
//Result:=False;
//exit;           //目前上傳檔案大小為xxMB,已超過50MB,無法上傳    %.3f  ,[FileRec.Size / 1048576]
    If FileRec.Size > StrtoInt(FMaxUploadSize) * 1048576 Then // 檢查檔案大小
    Begin
      ShowMessage(Format('%s目前上傳檔案大小為%.3fMB,已超過'+FMaxUploadSize+'MB,無法上傳',[caseid,FileRec.Size / 1048576]) );
      FindClose(FileRec);
      Result := False;
      Exit;
    End;
    FindClose(FileRec);
  ///檢查上傳的zip大小////
//ShowMessage('last_add_formidstr='+last_add_formidstr);
  ////上傳/////
  SendData:='data='+HTTPEncode(UTF8Encode(FData))
  +'&verify='+FVerify
@@ -5656,23 +6271,21 @@
  +'&in_doc2='+HTTPEncode(UTF8Encode(In_Doc2));
//ShowMessage('SendData='+SendData);
//ShowMessage(FData+#10#13+Doc_Data);
//exit;
  if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/caseupload',SendData,'file',Path+'Img.zip',FReWrite,Memo1,False) then
  begin
    Showmessage(Format(_Msg('傳送案件編號(%s)檔案時,網路發生錯誤!!'+_Msg('錯誤代碼:')),[CaseID])+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
    Showmessage(Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason+'.');
    Result := False;
    Exit;
  end;
  if memo1.Lines.Strings[0] = '1' then
  begin
    Showmessage(Format(_Msg('傳送案件編號(%s)檔案時,網路發生錯誤!!')+_Msg('錯誤原因:'),[CaseID])+memo1.Lines.Strings[1]);
    Showmessage(Format(_Msg('')+_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
  Else if Pos('<script type="text/javascript" src="scripts/IMGPS00/login.js"></script>',Memo1.Lines.Text) > 0 then
  begin
    Showmessage(Format(_Msg('傳送案件編號(%s)檔案時,網路發生錯誤!!')+_Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入'),[CaseID]));
    Showmessage(Format(_Msg('')+_Msg('')+_Msg('閒置過久或被登出,請重新登入'),[CaseID]));
    Result := False;
    Exit;
  end;
@@ -5925,17 +6538,17 @@
  end;
  if Memo1.Lines.Strings[0] = '1' then
  begin
    HttpErrStr :=_Msg('錯誤原因:')+memo1.Lines.Strings[1];
    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
  Else if Pos('<script type="text/javascript" src="scripts/IMGPS00/login.js"></script>',Memo1.Lines.Text) > 0 then
  begin
    HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
    Result := False;
    Exit;
  end;
//ShowMessage('sssss');
//ShowMessage('替換zip');
  AttPath := Path + 'AttFile\';
  if FileExists(Path+CaseID+'.zip') then
  begin
@@ -6247,6 +6860,13 @@
    S.LoadFromFile(Path+'Context.dat');
    for I := 0 to S.Count - 1 do
    begin
      if FWH_category='N' then
      begin
        if (ISExistImg(Path+S.Strings[i])) or (reSizeExistImgList.IndexOf(LoadFileGetMD5(Path+S.Strings[i]))<>-1)  then
        begin
          Continue;
        end;
      end;
      FormCode := FileName2FormCode(S.Strings[i]);
      DocNo := FormCode2DocNo(FormCode);
      Ver := FormCode2Version(FormCode);
@@ -6397,7 +7017,8 @@
            if Index <> -1 then
            begin
              //SetRecordEditedDocDir('D',CaseNo,CaseDocNoList.Strings[Index]);  //20140624 修改刪除文件時也記一筆異動,刪掉會無法通知前端網頁有異動
              SetRecordEditedDocDir('A',CaseNo,CaseDocNoList.Strings[Index]);
              SetRecordEditedDocDir('A',CaseNo,CaseDocNoList.Strings[Index]);  //20170912 要刪除  不然我寫不下去
              CaseDocNoList.Delete(Index);
              CaseDocNo_CopiesList.Delete(Index);
@@ -6409,7 +7030,7 @@
                if DocDir = CaseDocNoList.Strings[i] then
                begin
                  //SetRecordEditedDocDir('D',CaseNo,CaseDocNoList.Strings[i]);  //20140624 修改刪除文件時也記一筆異動,刪掉會無法通知前端網頁有異動
                  SetRecordEditedDocDir('A',CaseNo,CaseDocNoList.Strings[i]);
                  SetRecordEditedDocDir('A',CaseNo,CaseDocNoList.Strings[i]);  //20170912 要刪除  不然我寫不下去
                  CaseDocNoList.Delete(i);
                  CaseDocNo_CopiesList.Delete(i);
                  Break;
@@ -6423,7 +7044,7 @@
          end;
    end;
    //Showmessage('abc'+#13+ImageSavePath+CaseNo+'\CaseDocNo.dat'+#13+inttostr(CaseDocNoList.Count)+#13+CaseDocNoList.Text);
    if CaseDocNoList.Count > 0 then
    if CaseDocNoList.Count >= 0 then
    begin
      CaseDocNoList.SaveToFile(ImageSavePath+CaseNo+'\CaseDocNo.dat');
      CaseDocNo_CopiesList.SaveToFile(ImageSavePath+CaseNo+'\CaseDocNo_Copies.dat');
@@ -6441,6 +7062,7 @@
  //DocNo:String;
begin
  //DocNo := FormCode2DocNo(FileName2FormCode(FileName));
//ShowMessage('FileName='+FileName);
  if DocDir = '' then
    DocDir := AttName ; //附件
  ContextList.Clear;
@@ -6534,6 +7156,24 @@
  end;
end;
Function TCB_IMGPSScanX.CheckCaseAttach_OK:Boolean;  //檢查是否有未歸類的案件
var
  i,j : Integer;
begin
  Result := True;
  for i := 0 to NewTreeNode.Count - 1 do
  begin
    for j := 0 to NewTreeNode.Item[i].Count - 1 do
    begin
      if Pos(_msg('未歸類'),NewTreeNode.Item[i].Item[j].Text) > 0 then
      begin
        Result := False;
        Break;
      end;
    end;
  end;
end;
Procedure TCB_IMGPSScanX.CreateEmptyCase(Path,CaseID:String);  //產生空白案號(重掃件用)
var
  S : TStringlist;
@@ -6586,7 +7226,9 @@
  FormID : String;
  OldFile,NewFile:String;
  Ext : String;
  ST1:TStringList;
begin
  ST1:=TStringList.Create;
  OldFileList := TStringlist.Create;
  NewFileList := TStringlist.Create;
  try
@@ -6594,8 +7236,23 @@
    NewDocDir := FindLastestDocDir(CaseID,NewDocNo);
    if NewDocDir = '' then
      NewDocDir := NewDocNo;
//ShowMessage('NewDocDir='+NewDocDir);
    if DocNoNeedDiv(NewDocNo) and (FormCode2Page(NewFormID)='01') then
    begin
      NewDocDir := DocNo2DocNoDir(ImageSavePath+CaseID+'\',NewDocNo);
    end
    else
    begin
      ST1.Clear;
      if FileExists(ImageSavePath + NowCaseno+'\'+NewDocDir+'\Context.dat') then
      begin
        ST1.LoadFromFile(ImageSavePath + NowCaseno+'\'+NewDocDir+'\Context.dat');
        if ISExistImg(ImageSavePath + NowCaseno+'\'+NewDocDir+'\'+ST1.Strings[0]) then
        begin
          NewDocDir := DocNo2DocNoDir(ImageSavePath + NowCaseno+'\',NewDocNo);
        end;
      end;
    end;
    if Not DirectoryExists(ImageSavePath+CaseID+'\'+NewDocDir) then
    begin
      MkDir(ImageSavePath+CaseID+'\'+NewDocDir);
@@ -6638,6 +7295,7 @@
  finally
  OldFileList.Free;
  NewFileList.Free;
  ST1.Free;
  end;
end;
@@ -6736,13 +7394,14 @@
Function TCB_IMGPSScanX.GetCasePage(Path,CaseID:String):Integer;
var
  DocDirList,FileList :TStringlist;
  DocDirList,FileList,ST1 :TStringlist;
  iDocDir,iDocNo : String;
  i,Count : Integer;
  i,n,Count : Integer;
begin
  Count := 0;
  DocDirList := TStringlist.Create;
  FileList := TStringlist.Create;
  ST1:=TStringList.Create;
  try
    if FileExists(Path+CaseID+'\CaseDocNo.dat') then
      DocDirList.LoadFromFile(Path+CaseID+'\CaseDocNo.dat');
@@ -6757,11 +7416,35 @@
      begin
        Continue;
      end;}
      if not DocNoAppear(iDocNo) then Continue;
      //if not DocNoAppear(iDocNo) then Continue; //20170817 先註解
      FileList.Clear;
      if FileExists(Path+CaseID+'\'+iDocDir+'\Context.dat') then
      begin
        FileList.LoadFromFile(Path+CaseID+'\'+iDocDir+'\Context.dat');
        if (FWH_category='N') and (FIs_In_Wh='Y') then
        begin
          ST1.Clear;
          for n := 0 to FileList.Count - 1 do
          begin
            if ISExistImg(Path+CaseID+'\'+iDocDir+'\'+FileList.Strings[n]) then
            begin
              ST1.Add(FileList.Strings[n]);
            end;
          end;
          for n := 0 to ST1.Count - 1 do
          begin
            if (FileList.IndexOf(ST1.Strings[n])<>-1) and (not DocNoIs_In_WH(iDocNo)) then
            begin
              FileList.Delete(FileList.IndexOf(ST1.Strings[n]));
            end;
          end;
        end;
      end;
      Count := Count+ FileList.Count;
    end;
    if FileExists(Path+CaseID+'\'+AttName+'\Context.dat') then
@@ -6774,6 +7457,7 @@
  finally
  DocDirList.Free;
  FileList.Free;
  ST1.free;
  end;
end;
@@ -6851,8 +7535,8 @@
Function TCB_IMGPSScanX.GetCase_PageCount(var CaseCount,PageCount:Integer):Boolean; //取出案件的數量及頁數
var
  i,n: Integer;
  CaseList,DocList,FileList : TStringlist;
  i,n,k: Integer;
  CaseList,DocList,FileList,ST1 : TStringlist;
begin
  Result := False;
  CaseCount := 0;
@@ -6860,19 +7544,23 @@
  CaseList := TStringlist.Create;
  DocList := TStringlist.Create;
  FileList := TStringlist.Create;
  ST1:= TStringlist.Create;
  try
    ImageSavePath := ImagePath;
    CaseList.Clear;
    if FileExists(ImageSavePath + 'CaseList.dat') then
      CaseList.LoadFromFile(ImageSavePath + 'CaseList.dat');
    CaseCount :=  CaseCount+CaseList.Count;
//ShowMessage('ImageSavePath='+ImageSavePath+#10#13+'CaseList.Count='+IntToStr(CaseList.Count));
    for i := 0 to CaseList.Count - 1 do
    begin
      DocList.Clear;
      If FileExists(ImageSavePath+CaseList.Strings[i]+'\CaseDocNo.dat') Then
        DocList.LoadFromFile(ImageSavePath+CaseList.Strings[i]+'\CaseDocNo.dat');
//ShowMessage('DocList='+DocList.Text);
      for n := 0 to DocList.Count - 1 do
      begin
//ShowMessage(DocList.Strings[n]+','+BoolToStr(DocNoAppear(DocNoDir2DocNo(DocList.Strings[n])),true));
        if not DocNoAppear(DocNoDir2DocNo(DocList.Strings[n])) then Continue;
        FileList.Clear;
        If FileExists(ImageSavePath+CaseList.Strings[i]+'\'+DocList.Strings[n]+'\Context.dat') Then
@@ -6884,14 +7572,41 @@
      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);
//Showmessage('FileList='+FileList.Text);
      PageCount := PageCount+FileList.Count;
      //Showmessage(inttostr(PageCount));
//Showmessage('PageCount='+inttostr(PageCount));
      if (FWH_category='N') and (FIs_In_Wh='Y') then  //20170912 針對非入庫並當次掃描做頁數計算
      begin
        if FileExists(ImageSavePath+NowCaseno+'\EditedDocDir.dat') then
        begin
          ST1.LoadFromFile(ImageSavePath+NowCaseno+'\EditedDocDir.dat');
          for n := 0 to ST1.Count - 1 do
          begin
            if ST1.Strings[n]=AttName then  Continue;
//ShowMessage(ST1.Strings[n]+','+BoolToStr(DocNoIs_In_WH(DocNoDir2DocNo(ST1.Strings[n])),true));
            if not DocNoIs_In_WH(DocNoDir2DocNo(ST1.Strings[n])) then
            begin
              FileList.Clear;
              if FileExists(ImageSavePath+CaseList.Strings[i]+'\'+ST1.Strings[n]+'\Context.dat') then
              begin
                FileList.LoadFromFile(ImageSavePath+CaseList.Strings[i]+'\'+ST1.Strings[n]+'\Context.dat');
                for k := 0 to FileList.Count - 1 do
                begin
                  if not ISExistImg(ImageSavePath+CaseList.Strings[i]+'\'+ST1.Strings[n]+'\'+FileList.Strings[k]) then
                    PageCount := PageCount+1;
                end;
              end;
            end;
          end;
        end;
      end;
    end;
  Finally
  CaseList.Free;
  DocList.Free;
  FileList.Free;
  ST1.Free
  end;
  Result := True;
end;
@@ -6964,8 +7679,12 @@
  if Path = '' then Exit;
  S := TStringlist.Create;
  try
    S.Add(Case_loandoc);
    S.SaveToFile(Path+'CaseIndex.dat');
    try
      S.Add(Case_loandoc);
      S.SaveToFile(Path+'CaseIndex.dat');
    except on E: Exception do
    end;
  finally
  S.Free;
  end;
@@ -6999,6 +7718,27 @@
end;
procedure TCB_IMGPSScanX.ReduceLogFile; //20171011 必免log檔掌太大
var
  ST1:TStringlist;
  I:integer;
begin
  ST1:=TStringList.Create;
  if FileExists(LngPath+'IMGPSCheck.log') then
  begin
    ST1.LoadFromFile(LngPath+'IMGPSCheck.log');
    if ST1.count>100000 then
    begin
      for I := 0 to 10000 do
      begin
        ST1.Delete(0);
      end;
      ST1.SaveToFile(LngPath+'IMGPSCheck.log');
    end;
  end;
  ST1.Free;
end;
Procedure TCB_IMGPSScanX.ClearCaseIndex;
begin
@@ -7557,6 +8297,7 @@
  ErrlistForm : TErrlistForm;
  S : TStringlist;
  UpFormID : String;
  Anchor : String;
begin
  ShowText := _Msg('處理檢核失敗中,請稍候');
  DataLoading(True,True);
@@ -7573,7 +8314,7 @@
    ErrlistForm.Timer1.Enabled := true;
    if ErrlistForm.ShowModal = mrok then
    begin
      TransPath := ImageSavePath+NowCaseNo+'\';
      TransPath := ImageSavePath+NowCaseNo+'\upload\';
      if FMode = 'ISCAN' then
        TransPath :=  ImageSavePath + NowCaseNo+'\DownTemp\';
      ShowText := NowCaseNo+_Msg('資料上傳中,請稍候');
@@ -7597,7 +8338,16 @@
      end;
      CaseHelpBtn.Visible := False;
      LoadImgFile;
      Showmessage(NowCaseNo+_Msg('傳送完成'));
      if (FMode='NSCAN') or (FMode='DSCAN') then
      begin
        Showmessage(NowCaseNo+_Msg('影像上傳完成。此案已進入下一流程。'));
      end;
      if FMode='ESCAN' then
      begin
        Showmessage(NowCaseNo+_Msg('影像已補件完成。'));
      end;
      DataLoading(False,False);
    end
    Else
@@ -7679,12 +8429,15 @@
  FormName : String;
  CaseDocNoList,CaseDocNo_CopiesList,StrList : TStringlist;
  iiDocNo,iiFormID,iiDocVer : String;
  ST1:TStringList;
begin
  Result := False;
  FileList := TStringlist.Create;
  CaseDocNoList := TStringlist.Create;
  CaseDocNo_CopiesList := TStringlist.Create;
  StrList := TStringlist.Create;
  ST1:=TStringList.Create;
LogFile1.LogToFile(logTimeString+'產文件樹開始');
  try
    CaseNode.ImageIndex := 1;
    CaseNode.SelectedIndex := 1;
@@ -7703,19 +8456,46 @@
      //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);
      iDocNo := DocNoDir2DocNo(CaseDocNoList.Strings[i]);
      ST1.Clear;
LogFile1.LogToFile(logTimeString+'FileList.Text='+FileList.CommaText);
      if (FWH_category='N') and (FIs_In_Wh='Y') then
      begin
        for n := 0 to FileList.Count - 1 do
        begin
          if ISExistImg(ImageSavePath+Caseno+'\'+CaseDocNoList.Strings[i]+'\'+FileList.Strings[n]) then
          begin
            ST1.Add(FileList.Strings[n]);
          end;
        end;
        for n := 0 to ST1.Count - 1 do
        begin
          if (FileList.IndexOf(ST1.Strings[n])<>-1) and (not DocNoIs_In_WH(iDocNo)) then
          begin
            FileList.Delete(FileList.IndexOf(ST1.Strings[n]));
          end;
        end;
      end;
LogFile1.LogToFile(logTimeString+'WH_category='+FWH_category+',Is_In_Wh='+FIs_In_Wh+',FileList.Text='+FileList.CommaText);
      if FileList.Count=0 then Continue;
      DocNoCopies := Strtoint(CaseDocNo_CopiesList.Strings[i]);
      DocNoPage := FileList.Count;
      iDocNo := DocNoDir2DocNo(CaseDocNoList.Strings[i]);
      //Showmessage(iDocNo);
      //Showmessage(DocNo2DocName(Caseno,iDocNo));
//Showmessage(iDocNo);
//Showmessage(DocNo2DocName(Caseno,iDocNo));
//ShowMessage('FileList='+FileList.Text);
      {if (((FIs_In_Wh  = 'Y') and (not DocNoIs_In_WH(iDocNo))) or   //入庫掃描不看非入庫文件
         ((FIs_In_Wh  = 'N') and (DocNoIs_In_WH(iDocNo)))) and
         ((iDocNo <> 'Attach') and (Copy(iDocNo,1,5)<>'ZZZZZ')) then     //非入庫掃描不看入庫文件
      begin
        Continue;
      end;}
      if not DocNoAppear(iDocNo) then Continue;
      //if not DocNoAppear(iDocNo) then Continue;
      //DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('頁'),[CaseDocNoList.Strings[i],DocNo2DocName(Caseno,iDocNo),DocNoPage]));
@@ -7813,6 +8593,7 @@
    if DirectoryExists(ImageSavePath+Caseno+'\'+AttName) then
    begin
      FileList.Clear;
      if FileExists(ImageSavePath+Caseno+'\'+AttName+'\Context.dat') then
        FileList.LoadFromFile(ImageSavePath+Caseno+'\'+AttName+'\Context.dat')
@@ -7842,11 +8623,48 @@
        end;
      end;
    end;
    if FModeName='件' then  //20170904 先裝死  因為異動 同時存在兩種附件太難寫
    begin
      if DirectoryExists(ImageSavePath+Caseno+'\Attach') then
      begin
        FileList.Clear;
        if FileExists(ImageSavePath+Caseno+'\Attach'+'\Context.dat') then
          FileList.LoadFromFile(ImageSavePath+Caseno+'\Attach'+'\Context.dat')
        Else
        begin
          Rmdir(ImageSavePath+Caseno+'\Attach');
          Exit;
        end;
        DocNoPage := FileList.Count;
        iDocNo := DocNoDir2DocNo(AttName);
        //DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[AttName,DocNo2DocName(Caseno,iDocNo),1]));
        DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[DocNo2DocName(Caseno,iDocNo),'Attach',1]));
        DocNode.ImageIndex := 2;
        DocNode.SelectedIndex := 2;
        for n := 0 to FileList.Count - 1 do
        begin
          FormID := FileName2FormCode(FileList.Strings[n]);
          if not CheckFormIDExists(DocNode,FormID) then
          begin
            FormPage := GetFormIDPage(FileList,FormID);
            FormName := FormCode2FormName(Caseno,FormID);
            //FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
            FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
            FormNode.ImageIndex := 4;
            FormNode.SelectedIndex := 4;
          end;
        end;
      end;
    end;
LogFile1.LogToFile(logTimeString+'產文件樹結束');
  Finally
  FileList.Free;
  CaseDocNoList.Free;
  CaseDocNo_CopiesList.Free;
  StrList.Free;
  ST1.Free;
  end;
end;
@@ -7958,9 +8776,9 @@
        if PrintForm.CheckListBox1.Checked[i] then
        begin
          if S = '' then
            S := S+FileList.Strings[i]
            S := S+PrintForm.CheckListBox1.Items[i]
          Else
            S := S+#13+FileList.Strings[i];
            S := S+#13+PrintForm.CheckListBox1.Items[i];
        end;
      end;
      if S = '' then
@@ -8146,17 +8964,38 @@
  ST1.LoadFromFile(path+'FormCode_Name.dat');
  for I := 0 to ST1.Count - 1 do
  begin
    if (Pos('_',St1.Strings[i])<>1) and (Pos('_',St1.Strings[i])<>-11) then
    if (Pos('_',St1.Strings[i])<>1) and (Pos('_',St1.Strings[i])<>-1) then
    begin
      str1:=Copy(ST1.Strings[i],1,Pos('_',St1.Strings[i])-1);
      if LastInitFormidList.IndexOf(str1) = -1 then
      begin
        LastInitFormidList.Add(str1);
      end;
      LastInitFormidList.Add(str1);
    end;
  end;
  ST1.Free;
end;
function TCB_IMGPSScanX.LoadFileGetMD5(const filename: string): string;
var
  Stream: TFileStream;
  //Buffer: array[0..1023] of AnsiChar;
  Buffer: array[0..1023] of AnsiChar;
  TempStr: string;
  i: Integer;
  idmd5:TIdHashMessageDigest5;  //import IdHashMessageDigest, idHash
begin
  idmd5 := TIdHashMessageDigest5.Create;
  try
    Stream := TFileStream.Create(filename, fmOpenRead);
    Stream.Read(Buffer[0], SizeOf(Buffer));
    result := idmd5.HashStreamAsHex(Stream) ;
  finally
    idmd5.Free;
    Stream.Free;
  end;
end;
procedure TCB_IMGPSScanX.LoadImgFile;  //載入新件及替換件
@@ -8203,6 +9042,7 @@
    end;
    CasePage := GetCasePage(ImageSavePath,CaseList.Strings[i]);
//ShowMessage('CasePage='+IntToStr(CasePage));
    MytreeNode1 := TreeView1.Items.AddChild(NewTreeNode,Format(_Msg('%s-%d頁'),[CaseList.Strings[i],CasePage]));
    MytreeNode1.ImageIndex := 1;
    MytreeNode1.SelectedIndex := 1;
@@ -8351,6 +9191,11 @@
  end;
end;
function TCB_IMGPSScanX.logTimeString: String;
begin
Result:=FormatDateTime('yyyymmdd hh:mm:ss',now) +'  caseNo='+NowCaseno+'  ';
end;
Function TCB_IMGPSScanX.FindDivFormCode(FormCode:String):Boolean; //找有沒有分案的條碼
var
  i : Integer;
@@ -8486,7 +9331,7 @@
  end;
end;
Function TCB_IMGPSScanX.Case2Mask(SoPath,DePath:String):Boolean;//產生遮罩影像
Function TCB_IMGPSScanX.Case2Mask(SoPath,DePath:String):Boolean;//產生遮罩影像  20170639 發現沒用到
var
  XT : TXMLTool;
  i : Integer;
@@ -8568,6 +9413,8 @@
    end;
  end;
//ShowMessage('FormIDCount='+IntToStr(FormIDCount)+#10#13+'MpsBarcodeinf.count='+IntToStr(MpsBarcodeinf.count));
  if FormIDCount = 2 then
  begin
    Result := True;
@@ -8593,6 +9440,12 @@
    DocNo := 'ZZZZZ'+Add_Zoo(Ct,3);
    if FIs_In_Wh <> 'Y' then //不是入庫文件
      DocNo := 'YYYYY'+Add_Zoo(Ct,3);
    if (FMode='ESCAN') and (FWH_category='N') then //20170914 補件下改成非入庫的自定文件
    begin
      DocNo := 'YYYYY'+Add_Zoo(Ct,3);
    end;
    FormID := DocNo+'010101A';
    ini.WriteInteger('CustomCount','Count',Ct);
    ini.WriteString(DocNo,'FormID',FormID);
@@ -8787,6 +9640,7 @@
  S := TStringlist.Create;
  GraphicPrinter := TDibGraphicPrinter.Create;
  PrtDialog := TPrintDialog.Create(self);
  //PrtDialog.Copies:=99;
  try
    IF PrtDialog.Execute Then
    begin
@@ -9442,6 +10296,20 @@
     ((FIs_In_Wh  = 'N') and (DocNoIs_In_WH(iDocNo)))) and      //非入庫掃描不看入庫文件
     ((iDocNo <> 'Attach') and (iDocNo <> 'S_Attach') and (Copy(iDocNo,1,5)<>'ZZZZZ')) then
       Result := False;
  if (FIs_In_Wh='Y') and (FWH_category='Y') then //20170816 新加
  begin
    if (((FIs_In_Wh  = 'Y') and (not DocNoIs_In_WH(iDocNo))) or   //入庫掃描不看非入庫文件
     ((FIs_In_Wh  = 'N') and (DocNoIs_In_WH(iDocNo)))) and      //非入庫掃描不看入庫文件
     ((iDocNo <> 'Attach') and (iDocNo <> 'S_Attach') and (Copy(iDocNo,1,5)<>'ZZZZZ')) then
       Result := False;
  end;
  if (FIs_In_Wh='Y') and (FWH_category='N') then //20170816 新加
  begin
    Result:=True;
  end;
end;
Function TCB_IMGPSScanX.DocNoAppear(DocNo:String):Boolean;   //DocNo是否可出現
@@ -9451,6 +10319,7 @@
     ((FIs_In_Wh  = 'N') and (DocNoIs_In_WH(DocNo)) or (DocNo ='Attach') )) {and      //非入庫掃描不看入庫文件
     (Copy(DocNo,1,5)<>'ZZZZZ')} then
       Result := False;
end;
Function TCB_IMGPSScanX.GetDocNoCount(CaseID,DocNo:String):Integer; //取DocNo數量
@@ -9653,6 +10522,34 @@
      Result := True;
      Break;
    end;
  end;
end;
Function TCB_IMGPSScanX.ISDivPageFormID(FormID:String):Boolean;
var
  i : Integer;
begin
  Result := False;
  for i := 0 to DivPageFormIDList.Count - 1 do
  begin
    if FormID = DivPageFormIDList.Strings[i] then
    begin
      Result := True;
      Break;
    end;
  end;
end;
function TCB_IMGPSScanX.ISExistImg(const filename: string): boolean;
begin
  if ExistImgList.IndexOf(LoadFileGetMD5(filename))<>-1 then
  begin
    Result:=True;
  end
  else
  begin
    Result:=False;
  end;
end;
@@ -10090,6 +10987,12 @@
      end;
    end;}
    if FMode='ESCAN' then
    begin
      InitExistImgList(DeDir);
    end;
  finally
  iFileList.Free;
  FileList.Free;
@@ -10473,6 +11376,17 @@
    S.LoadFromFile(ImageSavePath + CaseID+'\upload\Context.dat');
    for i := 0 to S.Count - 1 do
    begin
LogFile1.LogToFile(logTimeString+S.Strings[i]+' ISExistImg='+BoolToStr(ISExistImg(ImageSavePath+CaseID+'\upload\'+S.Strings[i]),true));
LogFile1.LogToFile(logTimeString+S.Strings[i]+' reSizeExistImgList='+BoolToStr(reSizeExistImgList.IndexOf(LoadFileGetMD5(ImageSavePath+CaseID+'\upload\'+S.Strings[i]))<>-1,true));
      if FWH_category='N' then
      begin
        if (ISExistImg(ImageSavePath+CaseID+'\upload\'+S.Strings[i]))
        or  (reSizeExistImgList.IndexOf(LoadFileGetMD5(ImageSavePath+CaseID+'\upload\'+S.Strings[i]))<>-1)  then
        begin
          Continue;
        end;
      end;
      LForm := FileName2FormCode(S.Strings[i]);
      AddOk := True;
      for n := 0 to OMRFileList.Count - 1 do
@@ -10523,6 +11437,8 @@
  OMROkCount : Integer;
  //Casecheck : Boolean;  //是否要做檢核
  //AllCheck : Boolean;  //是否要做完整檢核
  ISB8W,ISB8H:integer;
begin
  ///OMRErrInfo  1: 必要文件  2:相依文件 3:互斥文件  4:必填 5:欄位有值附文件  6:欄位有值不附文件
  ///            7: 欄位有值相關欄位也要有值  8:欄位有值要寫備註 9:停用日期 10:最大頁數
@@ -10551,25 +11467,29 @@
        end;
//ShowMessage('MainFormID='+MainFormID);
LogFile1.LogToFile(logTimeString+' '+FModeName+' '+CaseID+' '+'MainFormID='+MainFormID);
        if MainFormID = ''then
        begin
          //20131203 yuu說不檢查這個,先拿掉   20170315 楷琳說未歸類要擋
          if FCheck_main_form='Y' then
          //20131203 yuu說不檢查這個,先拿掉   20170315 楷琳說未歸類要擋  20170726 因此有檢查必要FormID  所以 可以拿掉
          {if FCheck_main_form='Y' then
          begin
            if (FMode <> 'SSCAN') then  //簽署章件會換主FormID,先跳過
            if (FMode <> 'SSCAN') AND (FMode<>'ESCAN') then  //簽署章件會換主FormID,先跳過 20170629 ESCAN 也不檢查
            begin
              ErrStr:=_Msg('找不到分案文件');   //找不到主文件
              OMRErr2ini(CaseID,ErrStr,'','','','','','',False,False,True);
              CaseOk := false;
//ShowMessage('AAAAA');
            end;
          end;
          }
        end
        Else
        begin
          //////主要非主要文件//////
          DistinctDocinCase(ImageSavePath+CaseID+'\upload\');
//ShowMessage(DocNo_VerinCase.Text);
//DocNo_VerinCase.Add('31A00101_1706A');
LogFile1.LogToFile(logTimeString+' '+CaseID+' '+'DocNo_VerinCase.Text='+DocNo_VerinCase.Text);
          if ModeNeedCheck(OMRErrInfo[1].Mode,FMode) then //是否要檢核
          begin
            for i := 0 to DocNo_VerinCase.Count - 1 do
@@ -10580,6 +11500,7 @@
              MainVersion :=Copy(DocNo_VerinCase.Strings[i],v+1,v1-v); //FormCode2Version(MainFormID);
              MainFormPage := GetDataDocNoPage(MainDocNo,MainVersion); //資料庫記錄主文件頁數
              CaseFormPage := CheckCaseDocNoPage(CaseID,MainDocNo,MainVersion,MainFormPage); //案件主文件的頁數
LogFile1.LogToFile(logTimeString+CaseID+',MainDocNo='+MainDocNo+',MainVersion='+MainVersion+',MainFormPage='+IntToStr(MainFormPage)+',CaseFormPage='+IntToStr(CaseFormPage));
              IF (MainFormPage > 0) and (MainFormPage <> CaseFormPage) then
              begin
                ErrStr:=MainDocNo+Format(OMRErrInfo[1].Info,[Inttostr(MainFormPage),Inttostr(CaseFormPage)]); //主要文件需有XX頁僅附XX頁
@@ -10590,7 +11511,7 @@
            end;
          end;
          //////主要非主要文件/////
          //showmessage(MainFormID);
//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
@@ -10612,6 +11533,13 @@
            begin
              if not Case_DocNoExists(CaseID,List.Strings[i]) then  //沒附相依文件
              begin
                if FWH_category='N' then
                begin
                  if ISExistImg(ImageSavePath+CaseID+'\upload\'+List.Strings[i]) then
                  begin
                    Continue;
                  end;
                end;
                ErrStr:=Format(OMRErrInfo[2].Info,[DocNo2DocName(CaseID,List.Strings[i])]);   //沒附相依文件
                OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[2].Ignore,OMRErrInfo[2].Display);
                if OMRErrInfo[2].Display then
@@ -10629,6 +11557,13 @@
            begin
              if Case_DocNoExists(CaseID,List.Strings[i]) then  //附了互斥文件
              begin
                if FWH_category='N' then
                begin
                  if ISExistImg(ImageSavePath+CaseID+'\upload\'+List.Strings[i]) then
                  begin
                    Continue;
                  end;
                end;
                ErrStr:=Format(OMRErrInfo[3].Info,[DocNo2DocName(CaseID,List.Strings[i])]);   //有附互斥文件
                OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[3].Ignore,OMRErrInfo[3].Display);
                if OMRErrInfo[3].Display then
@@ -10637,7 +11572,7 @@
            end;
          end;
          //////互斥文件/////
        end;
        end; //MainFormID結束
      //end;
      List.LoadFromFile(ImageSavePath + CaseID+'\upload\Context.dat');
      for i := 0 to List.Count - 1 do
@@ -10677,12 +11612,24 @@
    end;
    //if AllCheck then
    //begin
      //////最大頁數/////
      //////最大頁數///
LogFile1.LogToFile(logTimeString+'最大頁數A段 '+CaseID+' '+'OMRFileList.Text='+OMRFileList.Text);
      DistinctFormCode(CaseID);
      if ModeNeedCheck(OMRErrInfo[10].Mode,FMode) then //是否要檢核
      begin
//ShowMessage('AAA'+OMRFileList.Text);
LogFile1.LogToFile(logTimeString+'最大頁數B段 '+CaseID+' '+'OMRFileList.Text='+OMRFileList.Text);
        For i := 0 to OMRFileList.Count - 1 do
        begin
          if FModeName='異動件' then Continue;
          if FWH_category='N' then
          begin
            if ISExistImg(ImageSavePath+CaseID+'\upload\'+OMRFileList.Strings[i]) then
            begin
              Continue;
            end;
          end;
          FormCode := FileName2FormCode(OMRFileList.Strings[i]);
          FormDataPages := GetDataFormCodePages(FormCode);
@@ -10705,22 +11652,30 @@
      DistinctFormCode(CaseID);
      ValueXT := TXmltool.Create;
      Try
//ShowMessage('必填'+OMRFileList.Text);
LogFile1.LogToFile(logTimeString+'必填 '+CaseID+' '+'OMRFileList.Text='+OMRFileList.Text);
        For i := 0 to OMRFileList.Count - 1 do
        begin
//ShowMessage('OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
          if CheckRequiredColumnValues(FWork_NO,CaseID) then Continue;
          OMRFile := OMRFileList.Strings[i];
          OMRFormCode := FileName2FormCode(OMRFileList.Strings[i]);
          OMRFormName := FormCode2FormName(CaseID,OMRFormCode);
          Anchor := FormID2Anchor(OMRFormCode);
          ///依十字定位點縮放////
          ImageReSize(CaseID,OMRFile);
          ////依十字定位點縮放////
          ImageReSize_FormID(CaseID,OMRFile);
          ////依十字定位點縮放///
//Display1.Lines.Add('OMRFile='+OMRFile+',OMRFormCode='+OMRFormCode+',OMRFormName='+OMRFormName);
LogFile1.LogToFile(logTimeString+'OMRFile='+OMRFile+',OMRFormCode='+OMRFormCode+',OMRFormName='+OMRFormName);
//ShowMessage('KKKKK');
          if not FileExists(CheckXmlPath+OMRFormCode+'.xml') then  //沒有Xml就不用檢核
            Continue;
//ShowMessage('11638 OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
          XT := TXmltool.Create(CheckXmlPath+OMRFormCode+'.xml');
          RelaXT := TXmltool.Create;
//ShowMessage('ModeNeedCheck='+BoolToStr(ModeNeedCheck(OMRErrInfo[4].Mode,FMode),true));
          try
            //*******必填********
            if ModeNeedCheck(OMRErrInfo[4].Mode,FMode) then //是否要檢核
@@ -10745,6 +11700,9 @@
                      SiteRec := SiteRec+'@'+Site;
                    //有填就ok
                    //Showmessage(ColCName +','+ inttostr(OMRMpsV1.GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site))+','+inttostr(Pixel + SafePixel));
//SafePixel:=90000;
Display1.Lines.Add(ColEName+' '+ColCName+'   圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
//FindPoint(ISB_BW.Graphic,UpLPoint,UpRPoint,DownLPoint,ANCHOR);
                    if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel)  then
                    begin
                      //Showmessage('oh');
@@ -10767,7 +11725,7 @@
              Until not XT.SubNodes['/form/settype1/'].Next ;
            end;
            //*******必填********
//ShowMessage('11692 OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
            //if AllCheck then
            //begin
            //*******有值相關文件的欄位也要有值*******
@@ -10786,6 +11744,7 @@
                else
                  SiteRec := SiteRec+'@'+Site;
                Pixel := XT.Node['/form/settype3/'+ColEName+'/'].Attributes['pixel'];
Display1.Lines.Add(ColEName+' '+ColCName+'   圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
                if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
                begin
                  ////有填寫////
@@ -10804,6 +11763,17 @@
                      RelaFormName := FormCode2FormName(CaseID,RelaFormCode);
                      Anchor1 := FormID2Anchor(RelaFormCode);
                      RelaXT.LoadFromFile(CheckXmlPath+RelaFormCode+'.xml');
Display1.Lines.Add(RelaFile+','+RelaFormName);
//ShowMessage(RelaFile);
//ShowMessage(ImageSavePath+CaseID+'\upload\'+RelaFile);
                      if RelaFile<>'' then
                      begin
                        ISB8.LoadFromFile(ImageSavePath+CaseID+'\upload\'+RelaFile,1); //20170815
                        ISB8W:= ISB8.Graphic.Width;
                        ISB8H:= ISB8.Graphic.Height;
                        FindPoint(ISB8.Graphic,UpLPoint,UpRPoint,DownLPoint,ISB8W,ISB8H,ANCHOR);  //20170815  抓相關然欄位所在圖檔的定位
                      end;
                      OMROK := False;
                      //OMROK := False;
                      //if RelaXT.SubNodes['/form/settype2/'].First then
@@ -10824,17 +11794,18 @@
                              RelaSiteRec := RelaSiteRec+'@'+RelaSite;
                            if  FileExists(ImageSavePath+CaseID+'\upload\'+RelaFile) then
                            begin
Display1.Lines.Add(ColEName+' '+ColCName+'   圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
                              if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+RelaFile,RelaSite,Bt) > (RelaPixel + SafePixel)  then
                              begin
                                OMROK := True;
                                Break;
                              end;
                              ///依十字定位點縮放////
                              ImageReSize_FormID(CaseID,OMRFile); //20170815 重新抓定位
                              ////依十字定位點縮放////
                            end;
                          end;
                          //Else
                          //begin
                            //ColCName := XT['/form/settype1/'+ColEName+'/'+nodename+'/'];
                          //end;
                        Until not RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].Next;
                        if not OMROk then
                        begin
@@ -10856,6 +11827,7 @@
              Until not XT.SubNodes['/form/settype3/'].Next ;
            end;
            //*******有值相關文件的欄位也要有值*******
//ShowMessage('11788 OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
            //*******有值相關文件的欄位不能有值*******
            if ModeNeedCheck(OMRErrInfo[11].Mode,FMode) then //是否要檢核
@@ -10874,6 +11846,7 @@
                else
                  SiteRec := SiteRec+'@'+Site;
                Pixel := XT.Node['/form/settype8/'+ColEName+'/'].Attributes['pixel'];
Display1.Lines.Add(ColEName+' '+ColCName+'   圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
                if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
                begin
@@ -10894,6 +11867,15 @@
                    RelaFormName := FormCode2FormName(CaseID,RelaFormCode);
                    Anchor1 := FormID2Anchor(RelaFormCode);
                    RelaXT.LoadFromFile(CheckXmlPath+RelaFormCode+'.xml');
                    if RelaFile<>'' then
                    begin
                      ISB8.LoadFromFile(ImageSavePath+CaseID+'\upload\'+RelaFile,1); //20170815
                      ISB8W:= ISB8.Graphic.Width;
                      ISB8H:= ISB8.Graphic.Height;
                      FindPoint(ISB8.Graphic,UpLPoint,UpRPoint,DownLPoint,ISB8W,ISB8H,ANCHOR);  //20170815  抓相關然欄位所在圖檔的定位
                    end;
                    OMROK := False;
                    //OMROK := False;
                    //if RelaXT.SubNodes['/form/settype2/'].First then
@@ -10914,12 +11896,16 @@
                            RelaSiteRec := RelaSiteRec+'@'+RelaSite;
                          if  FileExists(ImageSavePath+CaseID+'\upload\'+RelaFile) then
                          begin
Display1.Lines.Add(ColEName+' '+ColCName+'   圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
                            if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+RelaFile,RelaSite,Bt) > (RelaPixel + SafePixel)  then
                            begin
                              inc(OMROkCount);
                              //OMROK := True;
                              //Break;
                            end;
                            ///依十字定位點縮放////
                            ImageReSize_FormID(CaseID,OMRFile);
                            ////依十字定位點縮放////
                          end;
                        end;
                        //Else
@@ -10947,7 +11933,7 @@
            end;
            //*******有值相關文件的欄位不能有值*******
//ShowMessage('11889 OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
              //*******有值相依文件*******
            if ModeNeedCheck(OMRErrInfo[5].Mode,FMode) then //是否要檢核
@@ -10965,6 +11951,8 @@
                else
                  SiteRec := SiteRec+'@'+Site;
                Pixel := XT.Node['/form/settype4/'+ColEName+'/'].Attributes['pixel'];
 Display1.Lines.Add(ColEName+' '+ColCName+'   圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
                if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
                begin
                  ////有填寫////
@@ -11009,6 +11997,8 @@
                else
                  SiteRec := SiteRec+'@'+Site;
                Pixel := XT.Node['/form/settype5/'+ColEName+'/'].Attributes['pixel'];
 Display1.Lines.Add(ColEName+' '+ColCName+'   圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
                if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
                begin
                  ////有填寫////
@@ -11053,6 +12043,9 @@
                  SiteRec := Site
                else
                  SiteRec := SiteRec+'@'+Site;
 Display1.Lines.Add(ColEName+' '+ColCName+'   圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
                if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
                begin
                  ////有填寫////
@@ -11083,6 +12076,8 @@
                    OMRValue := XT.Node['/form/settype7/'+ColEName+'/'+nodename+'/'].Attributes['getvalue'];
                    //有填就ok
 Display1.Lines.Add(ColEName+' '+ColCName+'   圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
                    if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel)  then
                    begin
                      ValueXT['/content/'+ColEName+'/@savevalue'] := OMRValue;  //有填就換成設定的值
@@ -11101,6 +12096,7 @@
          RelaXT.Free;
          end;
        end;
        //必填迴圈結束
      Finally
      ValueXT.Free;
      end;
@@ -11327,10 +12323,13 @@
    v ,v1 : Integer;
    List_DocNo,Trans_DocNo,List_FormCode,Form_Page: String;
    iDocNo : String;
    iGroupNo,page,Ct : Integer;
    iGroupNo,page,Ct,int1 : Integer;
    ST1:TStringList;
begin
   ShowText := '影像顯示中,請稍候';
   DataLoading(True,True);
ST1:=TStringList.Create;
//Display1.Lines.Clear;
   IF DocNo = 'ShowAll' then  //顯示所有的影像 (因為附件會傳空字串,所以用ShowAll)
   begin
     ClearView(1);
@@ -11340,29 +12339,57 @@
       Exit;
     end;
     CreatePreViewISB(GetCasePage(ImageSavePath,NowCaseno));
     //Showmessage(inttostr(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   //入庫掃描不看非入庫文件
          ((FIs_In_Wh  = 'N') and (DocNoIs_In_WH(iDocNo)))) and
          ((iDocNo <> 'Attach') and (Copy(iDocNo,1,5)<>'ZZZZZ')) then     //非入庫掃描不看入庫文件
       if (FWH_category='N') and (FIs_In_Wh='Y') then
       begin
         Continue;
       end; }
         if FileExists(ImageSavePath+NowCaseno+'\EditedDocDir.dat') then
         begin
           ST1.LoadFromFile(ImageSavePath+NowCaseno+'\EditedDocDir.dat');
         end;
       end;
       iDocNo := CaseDocNoList.Strings[i];
       if not DocNoAppear(DocNoDir2DocNo(iDocNo)) then continue;
//ShowMessage('ST1.Count='+IntToStr(ST1.Count));
       if ST1.Count<>0 then
       begin
         if ST1.IndexOf(iDocNo)<>-1 then
         begin
         end
         else
         begin
           if not DocNoAppear(DocNoDir2DocNo(iDocNo)) then continue;  //20170817 這不能被註解
         end;
       end
       else
       begin
         if not DocNoAppear(DocNoDir2DocNo(iDocNo)) then continue;  //20170817 這不能被註解
       end;
       ContextList.Clear;
       if FileExists(Path+iDocNo+'\Context.dat') then
         ContextList.LoadFromFile(Path+iDocNo+'\Context.dat');
//ShowMessage('ContextList='+ContextList.Text);
       for n := 0 to ContextList.Count - 1 do
       begin
         if (FWH_category='N') and (FIs_In_Wh='Y') then
         begin
           if ISExistImg(Path+iDocNo+'\'+ContextList.Strings[n]) then
           begin
             if not DocNoIs_In_WH(Copy(iDocNo,1,8)) then
             begin
               Continue;
             end;
           end;
         end;
         inc(Ct);
         ISB := TImageScrollBox(FindComponent(ISBName+intToStr(Ct)));
         ISB.AntiAliased := False;
         ISB.AntiAliased := True;
         if ISB.ZoomPercent > 100  then
           ISB.AntiAliased := False;
         ISB.LoadFromFile(Path+iDocNo+'\'+ContextList.Strings[n],1);
@@ -11371,6 +12398,7 @@
         ISB.Redraw(true);
       end;
     end;
     //if DirectoryExists(Path+'Attach') then
     if DirectoryExists(Path+AttName) then
@@ -11390,18 +12418,38 @@
         ISB.LoadFromFile(Path+iDocNo+'\'+ContextList.Strings[n],1);
       end;
     end;
     FitPreViewISB;
   end
   Else if (DocNo <> '') and (FormID = '') then  //顯示指定DocNo+組別的影像  附件傳 Attach
   begin
   begin                               //顯示 文件層下的影像
     iDocNo := DocNo;
     ContextList.Clear;
     if FileExists(Path+iDocNo+'\Context.dat') then
       ContextList.LoadFromFile(Path+iDocNo+'\Context.dat');
//ShowMessage('ContextList.Count='+IntToStr(ContextList.Count));
     CreatePreViewISB(ContextList.Count);
//ShowMessage(IntToStr(ContextList.Count));
     int1:=0;
//ShowMessage(BoolToStr(DocNoIs_In_WH(Copy(iDocNo,1,8)),true));
     For i := 0 to ContextList.Count -1 do
     begin
       ISB := TImageScrollBox(FindComponent(ISBName+intToStr(i+1)));
       if (FWH_category='N') and (FIs_In_Wh='Y')  then
       begin
         if ISExistImg(Path+iDocNo+'\'+ContextList.Strings[i]) then
         begin
           if not DocNoIs_In_WH(Copy(iDocNo,1,8)) and ( iDocNo<>'Attach') then
           begin
             inc(int1);
             Continue;
           end;
         end;
       end;
//ShowMessage(Path+iDocNo+'\'+ContextList.Strings[i]);
       ISB := TImageScrollBox(FindComponent(ISBName+intToStr(i+1-int1)));
       ISB.AntiAliased := True;
       if ISB.ZoomPercent > 100  then
         ISB.AntiAliased := False;
@@ -11423,60 +12471,42 @@
       page := 0;
       Ct := 0;
       CreatePreViewISB(Pages);
//ShowMessage('formID page'+IntToStr(Pages)+', ContextList='+ContextList.Text);
       For i := 0 to ContextList.Count -1 do
       begin
         if FileName2FormCode(ContextList.Strings[i]) = FormID then
         begin
           if (FWH_category='N') and (FIs_In_Wh='Y') then
           begin
//ShowMessage(Path+iDocNo+'\'+ContextList.Strings[i]);
//ShowMessage(BoolToStr(ISExistImg(Path+iDocNo+'\'+ContextList.Strings[i]),true));
             if ISExistImg(Path+iDocNo+'\'+ContextList.Strings[i]) then
             begin
               if not DocNoIs_In_WH(FormCode2DocNo(FormID)) then
                 Continue;
             end;
           end;
           inc(Ct);
           ISB := TImageScrollBox(FindComponent(ISBName+intToStr(Ct)));
//ShowMessage(ISB.Name);
           ISB.AntiAliased := True;
           if ISB.ZoomPercent > 100  then
             ISB.AntiAliased := False;
           ISB.LoadFromFile(Path+iDocNo+'\'+ContextList.Strings[i],1);
           DpiResize(ISB.Graphic,36);
           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
   begin
     ISBClick(TImageScrollBox(FindComponent(ISBName+'1')));
   end;
   ISB1Click(ISB1);
   DataLoading(False,False);
end;
@@ -11593,6 +12623,7 @@
  ISB : TImageScrollBox;
  Panel : TPanel;
  i,W,H : Integer;
  myDate : TDateTime;
begin
  FreePreViewISB;
  ScrollBox1.HorzScrollBar.Visible := False;
@@ -11600,32 +12631,38 @@
  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;
    if FindComponent('M_Pl'+inttostr(i))=nil then
    begin
      Panel := TPanel.Create(Self);
      Panel.Name := 'M_Pl'+inttostr(i);//FormatDateTime('yyyymmddhhnnsszzz', now)
      Panel.Left := 4;
      Panel.Top := (i-1)*H+(6*i);
      Panel.Height := H;
      Panel.Width := W;
      Panel.Parent := ScrollBox1;
      Panel.Caption :='';
      if FindComponent(ISBName+inttostr(i))=nil then
      begin
        ISB := TImageScrollBox.Create(Self);
        ISB.Name := ISBName+inttostr(i);
        ISB.Parent := Panel;
        ISB.Align := alClient;
        ISB.ZoomMode := zmFullPage;
        ISB.DragMode := dmAutomatic;
        ISB.MouseMode := mmuser;
        ISB.OnImageClick := ISBClick;
        ISB.OnImageMouseMove := ISBMouseMove;
        ISB.PopupMenu := PopupMenu6;
        ISB.OnImageMouseDown := ISBImageMouseDown;
        ISB.OnImageMouseUp := ISBImageMouseUp;
        ISB.OnEndDrag := ISBEndDrag;
        ISB.OnDragDrop := ISBDragDrop;
        ISB.OnDragOver := ISBDragOver;
      end;
    end;
  end;
end;
@@ -11634,25 +12671,29 @@
var
  i : Integer;
begin
try
  For i:= ComponentCount -1 downto 0 do
  begin
    IF Components[i] is TImageScrollBox Then
    IF (Components[i] is TImageScrollBox) and (Components[i]<>nil) Then
    begin
      IF Pos(ISBName,Components[i].Name) > 0 Then
        Components[i].Free;
    end
    Else If Components[i] is TPanel Then
    Else If (Components[i] is TPanel) and  (Components[i]<>nil) Then
    begin
      IF Pos('M_Pl',Components[i].Name) > 0  Then
        Components[i].Free;
    end
    Else If Components[i] is TShape Then
    Else If (Components[i] is TShape) and (Components[i]<>nil) Then
    begin
      IF Pos('SP',Components[i].Name) > 0  Then
        Components[i].Free;
    end;
  end;
  Application.ProcessMessages;
except on E: Exception do
end;
  //showmessage(inttostr(Count));
end;
@@ -11799,6 +12840,9 @@
  ln := length(SelectISB.Name);
  SelectPage := Strtoint(Copy(SelectISB.Name,v+1,ln-v));
  ISB1.ZoomMode := zmFittoPage;
//ShowMessage('SelectISB.FileName='+SelectISB.FileName);
  //if SelectISB.FileName='' then exit;
  ISB1.LoadFromFile(SelectISB.FileName,1);
  if (ISB1.Graphic.ImageFormat <> ifBlackWhite) and (SmoothCB.Checked)then
    Image_Smooth(ISB1.Graphic);
@@ -11971,6 +13015,11 @@
  for I := 0 to ContextList.Count - 1 do
  begin
    FileFormID := FileName2FormCode(ContextList.Strings[i]);
    if DivPageFormIDList.IndexOf(FileFormID)<>-1 then //20170509 跳過分案頁的formid
    begin
      Continue;
    end;
    if FindDivFormCode(FileFormID) then
    begin
      Result := FileFormID;
@@ -12510,6 +13559,7 @@
        OldName := Filelist.Strings[i];
        //NewName := Add_Zoo(i+1,3)+Copy(OldName,4,length(OldName)-3);
        NewName := Add_Zoo(i+1,3)+FileName2NoQuene_Filename(OldName);
//ShowMessage(OldName+#10#13+NewName);
        ReNameFile(Path+OldName,Path+NewName);
        Filelist.Strings[i] := NewName;
      end;
@@ -12711,7 +13761,7 @@
//ShowMessage(Memo1.Lines.Text);
  IF memo1.Lines.Strings[0] <> '0' Then
  begin
    HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
    HttpErrStr := _Msg('')+memo1.Lines.Strings[1]+'。';
    Result := -1;
    Exit;
  end
@@ -12719,7 +13769,7 @@
  begin
    if (memo1.Lines.Count < 2) then
    begin
      HttpErrStr := _Msg('錯誤原因:')+'OCX:Index Count error';
      HttpErrStr := _Msg('')+'OCX:Index Count error';
      Result := -1;
      Exit;
    end
@@ -12733,7 +13783,7 @@
        Result := 1
      Else
      begin
        HttpErrStr := _Msg('錯誤原因:')+'OCX:Value error';
        HttpErrStr := _Msg('')+'OCX:Value error';
        Result := -1;
        Exit;
      end;
@@ -12976,11 +14026,16 @@
  i: Integer;
begin
  Timer1.Enabled := False;
  //FIs_In_Wh:='Y'; /// test 記得關掉
  //FWH_category :='N';  // test 記得關掉
//  FImgDelete := 'Y'; //test 記得關掉
  //Showmessage('a');
  //self.FIs_OldCase := 'Y';
  PageLVclear := True;
  InitialOk := False;
  FMaxUploadSize:='10';
  FJpgCompression:=50;
  //FMode := 'DSCAN' ;
  //FIs_In_Wh := 'Y';
  if FIs_In_Wh = 'Y' then
@@ -13082,8 +14137,12 @@
  Cust_DocNoList := TStringlist.Create; //自行定義的文件名稱
  IN_WH_DocNoList := TStringlist.Create; //入庫的文件清單
  GuideFormIDList := TStringlist.Create; //要當導引頁表單清單
  DivPageFormIDList := TStringList.Create; //要當分案頁表單清單
  LastInitFormidList :=TStringList.Create;
  LastAddFormidList := TStringList.Create;
  SampleFormIDList := TStringList.Create;//20170627 加入
  ExistImgList := TStringList.Create;  //20170724 新增
  reSizeExistImgList :=TStringList.Create; //20171012 新增
  //********清單區********
  ShowText := _Msg('資料載入中,請稍候');
@@ -13095,6 +14154,19 @@
    DataLoading(False,False);
    Exit;
  end;
  if FMode='SAMPLESCAN' then
  begin
    IF not GetSampleInf Then  //取已存在sample
    begin
      Showmessage(_Msg('取存在範本資訊時,網路發生錯誤!!')+HttpErrStr);
      DataLoading(False,False);
      Exit;
    end;
  end;
//ShowMessage('GetServerDate  '+ServerDate+' , '+ServerTime);
  ////下載系統資訊////
  IF not GetSetInf1 Then  //取DOC_INF  文件資訊
@@ -13168,14 +14240,19 @@
  initkscan;
  if ImagePath[Length(ImagePath)] <> '\' then
    ImagePath := ImagePath + '\';
//ShowMessage('ImagePath='+ImagePath);
  CheckXmlPath := ImagePath+'OMRSITE\'+FWork_No;
//ShowMessage('CheckXmlPath='+CheckXmlPath);
  SitePath := ImagePath+'Site\'+FWork_No+'\';
  LngPath := ImagePath;
  SamplePath := ImagePath+'Sample\'+FWork_No+'\';
  ImagePath := ImagePath + 'Scantemp\';
//ShowMessage('AA  ImagePath='+ImagePath);
  ScaniniPath :=ImagePath+FWork_No+'\'+FUserUnit +'\';
//ShowMessage('ScaniniPath='+ScaniniPath);
  ImagePath := ImagePath + FWork_No+'\'+FUserUnit+'\'+FMode+'\';
//ShowMessage('ImagePath='+ImagePath);
  ImagePath := StringReplace(ImagePath, '\\', '\',[rfReplaceAll, rfIgnoreCase]);
//ShowMessage('BB  ImagePath='+ImagePath);
  ImageSavePath := ImagePath;
  str2dir(CheckXmlPath);
  str2dir(SitePath);
@@ -13184,7 +14261,11 @@
  Del_Sub_NothingPath(ImagePath);  //清掉案件目錄是空的
  LogFile1.LogFile:=LngPath+'IMGPSCheck.log';
  ReduceLogFile;
  LogFile1.LogToFile(logTimeString+'OCX取表data結束');
  ShowText := _Msg('資料載入中,請稍候');
  DataLoading(True,True);
@@ -13224,7 +14305,7 @@
    MkDir(ImageSavePath+FCaseID);
    CreateEmptyCase(ImageSavePath,FCaseID);
    MkDir(ImageSavePath+FCaseID+'\Download');
    IF (FMode = 'ESCAN') then  //異動件先下載影像
    IF (FMode = 'ESCAN') or (FMode = 'DSCAN') then  //異動件先下載影像
    begin
      ShowText := _Msg('案件下載中,請稍候');
      DataLoading(True,True);
@@ -13256,7 +14337,8 @@
//        //LoadImgFile;
//      end;
      Create_Cust_DocDir(FCaseID); //產生外面傳入的文件
      LastInitFormidListCreate(ImageSavePath+FCaseID+'\Download\');
      if FMode='ESCAN' then
        LastInitFormidListCreate(ImageSavePath+FCaseID+'\Download\');
    end;
  end;
@@ -13284,8 +14366,11 @@
    DenialTimeLb.Visible := True;
    DenialTimeLb.Caption := Format(ScanDenialHint,[ScanDenialTime]);
  end;
//ShowMessage(IntToStr(ScanDpi));
  R_W_Scanini('R'); //掃瞄設定的ini
//ShowMessage(IntToStr(ScanDpi));
//ShowMessage('停掉DataLoading');
//DataLoading(False,False);
  ScanDuplexCB.Checked := ScanDuplex;
  if FMode <> 'SAMPLESCAN' then
    LoadImgFile;
@@ -13303,10 +14388,43 @@
  Splitter2.Visible := True;
  AttFileGB.Visible := False; //附加電子檔窗
  Splitter2.Visible := False; }
//ShowMessage('ImageSavePath='+ImageSavePath);
  DataLoading(False,False);
//ShowMessage('初始話執行完成');
//ShowMessage(GuideFormIDList.Text);
  LogFile1.LogToFile(logTimeString+'OCX初始化結束');
  LogFile1.LogToFile(logTimeString+'FUrl='+FUrl+
   ',FCaseID='+FCaseID+
   ',FMode='+FMode+
   ',FModeName='+FModeName+
   ',FWork_no='+FWork_no+
   ',FUserID='+FUserID+
   ',FUserName='+FUserName+
   ',FUserUnit='+FUserUnit+
   ',FData='+FData+
   ',FVerify='+FVerify+
   ',FReWrite='+FReWrite+
   ',FLanguage='+FLanguage+
   ',FLoanDoc_Value='+FLoanDoc_Value+
   ',FLoanDoc_Enable='+FLoanDoc_Enable+
   ',FUseProxy='+FUseProxy+
   ',FC_DocNoList='+FC_DocNoList+
   ',FC_DocNameList='+FC_DocNameList+
   ',FFixFileList='+FFixFileList+
   ',FIs_In_Wh='+FIs_In_Wh+
   ',FOldCaseInfo='+FOldCaseInfo+
   ',FPrintyn='+FPrintyn+
   ',FIs_OldCase='+FIs_OldCase+
   ',FCustDocYN='+FCustDocYN);
  LogFile1.LogToFile(logTimeString+'FImgDPI='+IntToStr(FImgDPI)+
    ',FScanColor='+    IntToStr(FScanColor)+
    ',FFileSizeLimit='+  IntToStr(FFileSizeLimit)+
    ',FCaseNoLength='+ IntToStr(FCaseNoLength)+
    ',FImgDelete='+FImgDelete+
    ',FIsExternal='+FIsExternal+
    ',FWH_category='+FWH_category+
    ',FCheck_main_form='+FCheck_main_form+
    ',FMaxUploadSize='+FMaxUploadSize);
end;
procedure TCB_IMGPSScanX.Timer2Timer(Sender: TObject);
@@ -13329,6 +14447,7 @@
  AreaStr : String;
  S : TStringlist;
  CheckStr : String;
  uploadMsg:String;//20171122 新增 配合不同mode下要秀不能上傳訊息
begin
  IF not InitialOk Then
  begin
@@ -13340,12 +14459,20 @@
  DisplayPath := '';
  ClearCaseIndex;
  RejectCase := False;
  uploadMsg:='';
  if not CheckCaseID_OK then  //檢查是否有未配號的案件
  begin
    Showmessage(_Msg('尚有未配號案件,無法上傳'));
    Showmessage(_Msg('尚有「無案件編號」之案件,無法上傳'));
    Exit;
  end;
  if not CheckCaseAttach_OK then  //20170911檢查是否有未歸類的案件
  begin
    Showmessage(_Msg('尚有未歸類文件,無法上傳'));
    Exit;
  end;
  if NewTreeNode.Count = 0  then
  begin
    Showmessage(_Msg('無影像需傳送'));
@@ -13401,7 +14528,7 @@
    end;
    if CaseTrans = -1 then  //失敗
    begin
      Showmessage(_Msg('詢問案件可否傳送時,網路發生錯誤!!')+HttpErrStr);
      Showmessage(_Msg('')+HttpErrStr+'.');
      DataLoading(False,False);
      LoadImgFile;
      Exit;
@@ -13427,7 +14554,7 @@
          begin
            ShowText := CaseID+_Msg('檢核中,請稍候');
            DataLoading(True,True);
            If not OMRCheckCase(CaseID) then
            If not OMRCheckCase(CaseID) then  //進檢核
            begin
              Inc(CheckErrCount);
              Continue;
@@ -13443,7 +14570,7 @@
      ///////檢核//////
      ShowText := CaseID+_Msg('資料上傳中,請稍候');
      DataLoading(True,True);
//ShowMessage('NNNNN');
//ShowMessage('退出');DataLoading(False,False);Exit;
      If Not TransCaseID(TransPath,CaseID,True) Then  //傳送案件
      begin
        DataLoading(False,False);
@@ -13454,13 +14581,30 @@
    end;
  end;
  DataLoading(False,False);
  TransMsg := Format(_Msg('成功件%d件'),[SuccessCount]);
  TransMsg := Format(_Msg('成功件【%d】件'),[SuccessCount]);
  if ReCasecount > 0 then
    TransMsg := TransMsg + #13#10 + Format(_Msg('無法上傳件%d件'),[ReCasecount]);
    TransMsg := TransMsg + #13#10 + Format(_Msg('無法上傳件【%d】件'),[ReCasecount]);
  if CheckErrCount > 0 then
    TransMsg := TransMsg + #13#10 + Format(_Msg('檢核失敗件%d件'),[CheckErrCount]);
    TransMsg := TransMsg + #13#10 + Format(_Msg('檢核失敗件【%d】件,請先點選「案件編號」,再點選「問號」查看錯誤原因'),[CheckErrCount]);
  Showmessage(_Msg('傳送完成')+#13#10+TransMsg);
  if (FMode = 'DSCAN') and (SuccessCount = 1)  then
  begin
    uploadMsg:=NowCaseNo+_Msg('影像上傳完成。此案已進入下一流程');
  end;
  if (FMode='ESCAN') and (FModeName='補件掃描') and (SuccessCount = 1) then
  begin
    uploadMsg:=NowCaseNo+_Msg('影像已補件完成');
  end;
//ShowMessage('uploadMsg='+uploadMsg);
  if uploadMsg<>'' then
  begin
    ShowMessage(uploadMsg);
  end
  else
  begin
    Showmessage(_Msg('傳送完成')+#13#10+TransMsg);
  end;
  LoadImgFile;
  if (FMode = 'ESCAN') and (SuccessCount = 1) then
@@ -13495,7 +14639,6 @@
  NowDocNo := '';
  NowFormCode := '';
  NowFormName := '';
  NowPage := 0;
  NowShowFileList.Clear;
  StatusBar1.Panels[2].Text := '';
@@ -13915,7 +15058,15 @@
procedure TCB_IMGPSScanX.TreeView1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  TreeView1Click(nil);
  IF TreeView1.Selected.Parent <> nil Then
  begin
    TreeView1Click(nil);
  end
  else
  begin
    ClearView(1);
  end;
end;
procedure TCB_IMGPSScanX.TreeView1MouseMove(Sender: TObject; Shift: TShiftState;
@@ -14229,6 +15380,7 @@
procedure TCB_IMGPSScanX.Set_filesizelimit(const Value: WideString);
begin
//ShowMessage(Value);
  FFileSizeLimit:=0;
  if Value ='' then
  begin
    FFileSizeLimit := 5*1024;
@@ -14311,6 +15463,16 @@
  FIsExternal:=Value;
end;
function TCB_IMGPSScanX.Get_WH_CATEGORY: WideString;
begin
end;
procedure TCB_IMGPSScanX.Set_WH_CATEGORY(const Value: WideString);
begin
  FWH_category:=Value;
end;
initialization
  TActiveFormFactory.Create(
    ComServer,