From a83839e2935c06f2a70ee1f2be40caca54f42aaf Mon Sep 17 00:00:00 2001
From: Hong <chlin1022@i-mps.com>
Date: 星期一, 25 五月 2020 11:19:57 +0800
Subject: [PATCH] Ver 2,0,1,72

---
 CB_IMGPSScanImp.pas |  357 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 324 insertions(+), 33 deletions(-)

diff --git a/CB_IMGPSScanImp.pas b/CB_IMGPSScanImp.pas
index 65d6fe7..99818e3 100644
--- a/CB_IMGPSScanImp.pas
+++ b/CB_IMGPSScanImp.pas
@@ -14,7 +14,8 @@
   ExtCtrls, ComCtrls, Menus, StdCtrls, Gauges, EnImgScr, PJMenuSpeedButtons,
   Buttons, ImgList, SBSimpleSSL, SBHTTPSClient, SBWinCertStorage, SBX509,
   SBCustomCertStorage, SBUtils,mpsBarco,BarcodesFinder,HTTPApp,ErrList,
-  Xmltool,inifiles,printers,IdHashMessageDigest, idHash, LogFile;
+  Xmltool,inifiles,printers,IdHashMessageDigest, idHash, LogFile,ShellApi,
+  SBSocket;
 
 var
   Ch_WriteNote : Boolean;
@@ -111,7 +112,6 @@
     Splitter1: TSplitter;
     Panel3: TPanel;
     Label7: TLabel;
-    TreeView1: TTreeView;
     Panel6: TPanel;
     CB1: TCheckBox;
     ScanDuplexCB: TCheckBox;
@@ -180,7 +180,6 @@
     PM402: TMenuItem;
     PM403: TMenuItem;
     PM404: TMenuItem;
-    HTTPSClient: TElHTTPSClient;
     ElWinCertStorage: TElWinCertStorage;
     ElMemoryCertStorage: TElMemoryCertStorage;
     Panel5: TPanel;
@@ -188,8 +187,6 @@
     Panel11: TPanel;
     SampleScanBtn: TBitBtn;
     WNoteBtn: TBitBtn;
-    Panel13: TPanel;
-    CaseHelpBtn: TBitBtn;
     PopupMenu1: TPopupMenu;
     PM101: TMenuItem;
     N12: TMenuItem;
@@ -247,7 +244,6 @@
     Edit1: TEdit;
     PM110: TMenuItem;
     Image1: TImage;
-    PrtLb: TLabel;
     UseOldCaseLb: TLabel;
     PM111: TMenuItem;
     SmoothCB: TCheckBox;
@@ -258,6 +254,18 @@
     Label3: TLabel;
     LogFile1: TLogFile;
     ScanGrayCB: TCheckBox;
+    AttFileGB: TGroupBox;
+    AttListBox: TListBox;
+    Panel20: TPanel;
+    AddAttFileLB: TLabel;
+    DelAttFileLB: TLabel;
+    Splitter2: TSplitter;
+    Panel17: TPanel;
+    TreeView1: TTreeView;
+    Panel13: TPanel;
+    PrtLb: TLabel;
+    CaseHelpBtn: TBitBtn;
+    HTTPSClient: TElHTTPSClient;
     procedure ActiveFormCreate(Sender: TObject);
     procedure Panel9Resize(Sender: TObject);
     procedure ISB1Click(Sender: TObject);
@@ -376,6 +384,14 @@
     procedure TreeView1MouseEnter(Sender: TObject);
     procedure ScrollBox1MouseEnter(Sender: TObject);
     procedure ScanGrayCBClick(Sender: TObject);
+    procedure AddAttFileLBClick(Sender: TObject);
+    procedure DelAttFileLBClick(Sender: TObject);
+    procedure AttListBoxDblClick(Sender: TObject);
+    procedure AttListBoxClick(Sender: TObject);
+    procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
+      Shift: TShiftState; X, Y: Integer);
+    procedure HTTPSClientRedirection(Sender: TObject; const OldURL: string;
+      var NewURL: string; var AllowRedirection: Boolean);
   private
     { Private declarations }
     HotKeyId1,HotKeyId2,HotKeyId3,HotKeyId4 :Integer;
@@ -473,6 +489,7 @@
     CaseDocNoList : TStringlist;  //案件裡的DocNo清單(不重複)
     CaseDocNo_CopiesList : TStringlist; //案件裡的DocNo份數清單
     ContextList : TStringlist; //案件裡的檔案清單
+    AttContextList : TStringlist; //案件裡的附加檔案清單
     OMRFileList : TStringList; //要OMR檢核的文件(只檢查每種Form的第一頁)
     Cust_DocNoList : TStringlist; //自行定義文件名稱
     IN_WH_DocNoList : TStringlist; //入庫的文件清單
@@ -572,7 +589,7 @@
     FJpgCompression:integer;// 20171211 jpg to tif 的壓縮率
 
     Draging : Boolean;
-
+    MDown : Boolean;  //20181210 用來判斷滑鼠右鍵要Popupmenu是否有MouseDonw發生
 
     FEvents: ICB_IMGPSScanXEvents;
 
@@ -650,6 +667,7 @@
     Procedure initkscan; //檢查掃描器的功能
     procedure LoadImgFile; //載入案件
     procedure LoadImgFile1; //載入案件
+    procedure LoadAttFile(CaseID:String); //載入附加檔案
     Procedure DistinctFormCode(CaseID:String); //案件裡的FormCode取出第一頁
     Function OMRCheckCase(CaseID:String):Boolean; //OMR檢核
     Procedure OMRErr2ini(CaseID,Reason,FileName,Site,RelaFileName,RelaSite,Anchor,Anchor1:String;Del,Ingnore,Display:Boolean); //OMR檢核失敗寫入ini
@@ -712,6 +730,9 @@
     Procedure SetCaseList(Mode:Char;Index:Integer;text:String);  //'A:加入,I:插入,D:刪除,E:修改'
     Procedure SetDocNoList(Mode:Char;Index:Integer;CaseNo,DocDir,Copies:String);  //'A:加入,I:插入,D:刪除,E:修改'
     Procedure SetContextList(Mode:Char;Index:Integer;CaseNo,DocDir,FileName:String);  //'A:加入,I:插入,D:刪除,E:修改'
+    Procedure SetAttContextList(Mode:Char;Index:Integer;CaseNo,FileName:String);  //'A:加入,I:插入,D:刪除,E:修改'
+
+
     Function checkCaseOMRDone:Boolean;  //檢查案件是否完成OMR檢核
     Function CheckCaseID_OK:Boolean;  //檢查是否有未配號的案件
     Procedure CreateEmptyCase(Path,CaseID:String);  //產生空白案號(重掃件用)
@@ -1679,6 +1700,7 @@
   DocNo_List.Free; //DocNo清單
   Context_DocnoList.Free; //案件裡的檔案Docno清單
   ContextList.Free; //案件裡的檔案清單
+  AttContextList.Free; //案件裡的附加檔案清單
   NowShowFileList.Free;  //目前顯示的影像清單
   NowSelectFileList.Free; //目前被點選的影像清單
   Cust_DocNoList.Free; //自行定義文件名稱
@@ -2106,7 +2128,7 @@
               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
+                if (ST1.Count > 0) and ISExistImg(ImageSavePath + NowCaseno+'\'+DocDir+'\'+ST1.Strings[0]) then   //20181210 多增加判斷ST1>0 否則會有機會出現List out of bound  Hong
                 begin
                   DocDir := DocNo2DocNoDir(ImageSavePath + NowCaseno+'\',DocNo);
                 end;
@@ -2629,7 +2651,8 @@
 begin
   Result:=False;
   ST:=TStringList.Create;
-  ST.loadFromfile(DocNopath+'\Context.dat');
+  if FileExists(DocNopath+'\Context.dat') then   /////20190319 Hong 當有空的Docno目錄時會掛掉,增加這行
+    ST.loadFromfile(DocNopath+'\Context.dat');
   for I := 0 to ST.Count - 1 do
   begin
     if ISExistImg(DocNopath+ST.Strings[i]) then
@@ -2810,7 +2833,7 @@
       MpsGetBarcode(ISB_BW.Graphic, MpsBarcodeinf); //判斷A3 有用FormID 所以要先辨條碼
       For n := 1 To MpsBarcodeinf.Count Do
       Begin
-        If MpsBarcodeinf.r180[n] <> 0 Then // 依條碼角度轉影像
+        If (MpsBarcodeinf.r180[n] <> 0) and (Length(MpsBarcodeinf.Text[n])=FormIDLength) Then // 依條碼角度轉影像
         Begin
           Rotate(ISB.Graphic, MpsBarcodeinf.r180[n]);
           //MpsGetBarcode(iGraphic_First, MpsBarcodeinf);
@@ -2855,7 +2878,7 @@
 //ShowMessage(IntToStr(MpsBarcodeinf.Count));
           For n := 1 To MpsBarcodeinf.Count Do
           Begin
-            If MpsBarcodeinf.r180[n] <> 0 Then // 依條碼角度轉影像
+            If (MpsBarcodeinf.r180[n] <> 0) and (Length(MpsBarcodeinf.Text[n])=FormIDLength) Then // 依條碼角度轉影像
             Begin
               Rotate(iGraphic, MpsBarcodeinf.r180[n]);
               MpsGetBarcode(ISB_BW.Graphic, MpsBarcodeinf);
@@ -2933,7 +2956,7 @@
 
           For n := 1 To MpsBarcodeinf.Count Do
           Begin
-            If MpsBarcodeinf.r180[n] <> 0 Then // 依條碼角度轉影像
+            If (MpsBarcodeinf.r180[n] <> 0) and (Length(MpsBarcodeinf.Text[n])=FormIDLength) Then // 依條碼角度轉影像
             Begin
               Rotate(iGraphic, MpsBarcodeinf.r180[n]);
               MpsGetBarcode(ISB_BW.Graphic, MpsBarcodeinf);
@@ -4082,6 +4105,36 @@
   end;
 end;
 
+procedure TCB_IMGPSScanX.AddAttFileLBClick(Sender: TObject);
+var
+  i : Integer;
+  Addfile : String;
+begin
+  OpenDialog1.Filter := 'PDF files|*.pdf';
+  OpenDialog1.Options := [ofAllowMultiSelect];
+  if OpenDialog1.Execute then
+  begin
+    ShowText :=_Msg('檔案加入中,請稍候');
+    DataLoading(True,True);
+    for i := 0 to OpenDialog1.Files.Count - 1 do
+    begin
+      AddFile := HTTPEncode(UTF8Encode(ExtractFileName(OpenDialog1.Files.Strings[i])));
+      if FileExists(ImageSavePath+NowCaseno+'\'+AddFile) then
+      begin
+        if Messagedlg(Format(_msg('%s己存在,是否覆蓋??'),[Addfile]),mtconfirmation,[mbyes,mbcancel],0) = mrcancel Then
+          Continue;
+        SetAttContextList('D',-1,NowCaseno,AddFile);
+      end;
+      // AttFileGB.Visible := True; //附加電子檔窗   //20120207楊玉說不在這加電子檔先拿掉
+      //   Splitter2.Visible := True;
+      CopyFile(Pchar(OpenDialog1.Files.Strings[i]),Pchar(ImageSavePath+NowCaseno+'\'+AddFile),False);
+      SetAttContextList('A',-1,NowCaseno,AddFile);
+      LoadAttFile(NowCaseno);
+    end;
+  end;
+  DataLoading(False,False);
+end;
+
 procedure TCB_IMGPSScanX.AddCredit1RGClick(Sender: TObject);
 begin
   if DisplayPath <> '' then
@@ -4135,6 +4188,26 @@
   ClearErrini(NowCaseno,MyTreeNode1);  //清掉檢核記錄
   SetDocDirtoSelected(MyTreeNode1,FirstDocDir);
   TreeView1Click(self);
+end;
+
+procedure TCB_IMGPSScanX.AttListBoxClick(Sender: TObject);
+begin
+  DelAttFileLB.Enabled := False;
+  if AttListBox.ItemIndex >= 0 then
+    DelAttFileLB.Enabled := True;
+end;
+
+procedure TCB_IMGPSScanX.AttListBoxDblClick(Sender: TObject);
+var
+  AttFile : String;
+begin
+  if AttListBox.ItemIndex < 0 then Exit;
+
+  AttFile := HTTPEncode(UTF8Encode(AttListBox.Items.Strings[AttListBox.ItemIndex]));
+  if FileExists(DisplayPath+AttFile) then
+    ShellExecute(Application.Handle,'open',PChar(DisplayPath+AttFile),nil,nil,SW_SHOW)
+  else
+    Showmessage(Format(_Msg('找不到檔案:%s'),[AttFile]));
 end;
 
 procedure TCB_IMGPSScanX.BtnMouseEnter(Sender: TObject);
@@ -5326,6 +5399,12 @@
   Validate := True;
 end;
 
+procedure TCB_IMGPSScanX.HTTPSClientRedirection(Sender: TObject;
+  const OldURL: string; var NewURL: string; var AllowRedirection: Boolean);
+begin
+  AllowRedirection := True;
+end;
+
 procedure TCB_IMGPSScanX.EnableImage(v:integer;Sender : TObject);
 var bmp : Tbitmap;
 begin
@@ -6330,6 +6409,7 @@
     ContextList.LoadFromFile(Path+'Context.dat');
     Context_DocnoList.LoadFromFile(Path+'Context_DocNo.dat');
   end;
+
   if FileExists(Path+'CustomDocNo.dat') then
     Cust_DocNoList.LoadFromFile(Path+'CustomDocNo.dat');
 
@@ -6438,7 +6518,6 @@
   if HaveMask then
     ZipMaskFile(Path,MaskPath,Path,'MaskImg.zip');  //有遮罩設定的才產生
   /////壓檔////
-
   ///檢查上傳的zip大小////
    FName :=Path+ 'Img.zip';
 
@@ -6475,6 +6554,8 @@
   +'&in_doc2='+HTTPEncode(UTF8Encode(In_Doc2));
 //ShowMessage('SendData='+SendData);
 //ShowMessage(FData+#10#13+Doc_Data);
+  //Showmessage('Wait');
+
   if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/caseupload',SendData,'file',Path+'Img.zip',FReWrite,Memo1,False) then
   begin
     Showmessage(Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason+'.');
@@ -6494,7 +6575,6 @@
     Exit;
   end;
   ////上傳////
-
   if FMode = 'ESCAN' then    //上傳舊件引入檔案      //20140616 原本先搬舊件再搬新件,改為先搬新件再搬舊件
   begin
     if not TransOldCaseFile(ImageSavePath+CaseID+'\') then
@@ -6503,9 +6583,6 @@
       Exit;
     end;
   end;
-
-
-
   // 呼叫Server完成 /////
   {If not CaseComplete(Path,CaseID,MainCase) Then
   begin
@@ -7309,6 +7386,49 @@
   end;
 end;
 
+Procedure TCB_IMGPSScanX.SetAttContextList(Mode:Char;Index:Integer;CaseNo,FileName:String);  //'A:加入,I:插入,D:刪除,E:修改'
+var
+  i : Integer;
+begin
+  AttContextList.Clear;
+  if FileExists(ImageSavePath+CaseNo+'\AttContext.dat') then
+    AttContextList.LoadFromFile(ImageSavePath+CaseNo+'\AttContext.dat');
+  case Mode of
+    'A':begin
+          AttContextList.Add(FileName);
+        end;
+    'I':begin
+          AttContextList.Insert(Index,FileName);
+        end;
+    'E':begin
+          AttContextList.Strings[Index] := FileName;
+        end;
+    'D':begin
+          if Index <> -1 then
+          begin
+            AttContextList.Delete(Index);
+          end
+          Else if (text <> '') then
+          begin
+            for i := 0 to AttContextList.Count - 1 do
+            begin
+              if FileName = AttContextList.Strings[i] then
+              begin
+                AttContextList.Delete(i);
+                Break;
+              end;
+            end;
+          end;
+          if AttContextList.Count = 0 then
+            DeleteFile(ImageSavePath+CaseNo+'\AttContext.dat');
+        end;
+  end;
+  if AttContextList.Count > 0 then
+  begin
+    AttContextList.SaveToFile(ImageSavePath+CaseNo+'\AttContext.dat');
+  end;
+end;
+
 Function TCB_IMGPSScanX.checkCaseOMRDone:Boolean;  //檢查案件是否完成OMR檢核
 var
   i : Integer;
@@ -7438,7 +7558,36 @@
   try
     NewDocNo := FormCode2DocNo(NewFormID);
     NewDocDir := FindLastestDocDir(CaseID,NewDocNo);
-    if NewDocDir = '' then
+
+    /////20190319 Hong 原本的程式判斷怪怪的先Mark在下方,改用這段
+    if DocNoNeedDiv(NewDocNo) then   //要分份數
+    begin
+      if ((FormCode2Page(NewFormID) = '01') and (GetDocDir_Page(CaseID,NewDocDir)>0)) or (NewDocDir = '') then
+      begin
+        NewDocDir := DocNo2DocNoDir(ImageSavePath + CaseID+'\',NewDocNo);
+      end
+      else
+      begin //20171016  真對補件影響 所加的判斷
+        ST1.Clear;
+        if FileExists(ImageSavePath + CaseID+'\'+NewDocDir+'\Context.dat') then
+        begin
+          ST1.LoadFromFile(ImageSavePath + CaseID+'\'+NewDocDir+'\Context.dat');
+          if (ST1.Count > 0) and ISExistImg(ImageSavePath + CaseID+'\'+NewDocDir+'\'+ST1.Strings[0]) then   //20181210 多增加判斷ST1>0 否則會有機會出現List out of bound  Hong
+          begin
+            NewDocDir := DocNo2DocNoDir(ImageSavePath + CaseID+'\',NewDocNo);
+          end;
+        end;
+      end;
+    end
+    Else        //不分份數
+    begin
+      if NewDocNo <> '' then
+        NewDocDir := NewDocNo
+      else      //Attach 附件
+        NewDocDir := DocNo2DocNoDir(ImageSavePath + CaseID+'\',NewDocNo);
+    end;
+
+    {if NewDocDir = '' then
     begin
       if DocNoNeedDiv(NewDocNo) then
       begin
@@ -7465,7 +7614,7 @@
           NewDocDir := DocNo2DocNoDir(ImageSavePath + NowCaseno+'\',NewDocNo);
         end;
       end;
-    end;
+    end; }
     if Not DirectoryExists(ImageSavePath+CaseID+'\'+NewDocDir) then
     begin
       MkDir(ImageSavePath+CaseID+'\'+NewDocDir);
@@ -8100,6 +8249,18 @@
     end;
     if FileExists(SoPath+'Context.dat') then
       ZipFileList.Add(SoPath+'Context.dat');
+
+    AttContextList.Clear;
+    if FileExists(SoPath+'ATTContext.dat') then
+      AttContextList.LoadFromFile(SoPath+'ATTContext.dat');
+    for n := 0 to AttContextList.Count - 1 do
+    begin
+      ZipFileList.Add(SoPath+AttContextList.Strings[n]);
+    end;
+    if FileExists(SoPath+'ATTContext.dat') then
+      ZipFileList.Add(SoPath+'ATTContext.dat');
+
+
     if FileExists(SoPath+'Context_DocNo.dat') then
       ZipFileList.Add(SoPath+'Context_DocNo.dat');
     if FileExists(SoPath+'scanlist.dat') then
@@ -9260,6 +9421,9 @@
 begin
   ClearView(1);
   PageLV.Clear;
+  AttListBox.Items.Clear;
+  AddAttFileLB.Enabled := False;
+  DelAttFileLB.Enabled := False;
   DisplayPath := '';
   ClearCaseIndex;
   CaseHelpBtn.Visible := False;
@@ -9439,6 +9603,27 @@
     GetCase_PageCount(CaseCount,PageCount);
     v := Pos('-',NewTreeNode.Text);
     NewTreeNode.Text := Format(_Msg('%s-共%d筆共%d頁'),[Copy(NewTreeNode.Text,1,v-1),CaseCount,PageCount]);
+  end;
+end;
+
+procedure TCB_IMGPSScanX.LoadAttFile(CaseID:String); //載入附加檔案
+var
+  AttContextList : TStringlist;
+  i : Integer;
+begin
+  AttListBox.Clear;
+  AttContextList := TStringlist.Create;
+  try
+    if FileExists(ImageSavePath+CaseID+'\AttContext.dat') then
+    begin
+      AttContextList.LoadFromFile(ImageSavePath+CaseID+'\AttContext.dat');
+    end;
+    for i := 0 to AttContextList.Count - 1 do
+    begin
+      AttListBox.Items.Add(UTF8Decode(HTTPDEcode(AttContextList.Strings[i])));
+    end;
+  finally
+  AttContextList.Free;
   end;
 end;
 
@@ -9810,6 +9995,41 @@
   finally
   ini.Free;
   end;
+end;
+
+procedure TCB_IMGPSScanX.DelAttFileLBClick(Sender: TObject);
+var
+  AttFile : String;
+  SelectCount : Integer;
+  i : Integer;
+begin
+  SelectCount := 0;
+  for i := 0 to AttListBox.Items.Count - 1 do
+  begin
+    if AttListBox.Selected[i] then
+      inc(SelectCount);
+  end;
+  if SelectCount = 0 then
+  begin
+    Showmessage(_Msg('請選擇要刪除的電子檔'));
+    Exit;
+  end;
+
+  if SelectCount > 0 then
+  begin
+    if Messagedlg(Format(_Msg('是否刪除這%d筆??'),[SelectCount]),MtConfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
+    for i := 0 to AttListBox.Items.Count - 1 do
+    begin
+      if AttListBox.Selected[i] then
+      begin
+        AttFile :=  HTTPEncode(UTF8Encode(AttListBox.Items.Strings[i]));
+        DeleteFile(ImageSavePath+NowCaseNo+'\'+AttFile);
+        SetAttContextList('D',-1,NowCaseno,AttFile);
+      end;
+    end;
+  end;
+  LoadAttFile(NowCaseNo);
+  Showmessage(_msg('刪除完成'));
 end;
 
 Procedure TCB_IMGPSScanX.DeleteCustomDocDir(Path,DocNo:String); //刪除自定文件DocNo
@@ -10608,10 +10828,17 @@
 Function TCB_IMGPSScanX.DocNoAppear(DocNo:String):Boolean;   //DocNo是否可出現
 begin
   Result := True;
-  if (((FIs_In_Wh  = 'Y') and (not DocNoIs_In_WH(DocNo)) or (DocNo ='S_Attach')) or   //入庫掃描不看非入庫文件
+
+  {if (((FIs_In_Wh  = 'Y') and (not DocNoIs_In_WH(DocNo)) or (DocNo ='S_Attach')) or   //入庫掃描不看非入庫文件
      ((FIs_In_Wh  = 'N') and (DocNoIs_In_WH(DocNo)) or (DocNo ='Attach') )) {and      //非入庫掃描不看入庫文件
+     (Copy(DocNo,1,5)<>'ZZZZZ')} {then
+       {Result := False;}
+  //20181031 應該要換成下面的判斷比較對,FIs_In_Wh傳空的話才會出全部
+  if (((FIs_In_Wh  = 'Y') and ((not DocNoIs_In_WH(DocNo)) or (DocNo ='S_Attach'))) or   //入庫掃描不看非入庫文件
+     ((FIs_In_Wh  = 'N') and ((DocNoIs_In_WH(DocNo)) or (DocNo ='Attach') ))) {and      //非入庫掃描不看入庫文件
      (Copy(DocNo,1,5)<>'ZZZZZ')} then
        Result := False;
+
 
 end;
 
@@ -11028,16 +11255,18 @@
 var
   i,n:Integer;
   OldPath,NewPath,DocDir : String;
-  OldFile,NewFile : String;
+  OldFile,NewFile,AttFile : String;
   DocNoList,FileList:TStringlist;
   iFileList,iFile_DocNoList :TStringlist;
   iDocDirList : TStringlist;
+  iAttFileList : TStringlist;
 begin
   DocNoList := TStringlist.Create;
   FileList := TStringlist.Create;
   iFileList := TStringlist.Create;
   iFile_DocNoList := TStringlist.Create;
   iDocDirList := TStringlist.Create;
+  iAttFileList := TStringlist.Create;
   try
     OldPath := ImageSavePath+CaseID+'\';
     NewPath := ImageSavePath+CaseID+'\Upload\';
@@ -11122,6 +11351,18 @@
         end;
       end;
     end;
+    OldPath := ImageSavePath+CaseID+'\';
+    if FileExists(OldPath+'AttContext.dat') then
+    begin
+      iAttFileList.LoadFromFile(OldPath+'AttContext.dat');
+      for n := 0 to iAttFileList.Count - 1 do
+      begin
+        AttFile := iAttFileList.Strings[n];
+        CopyFile(PWideChar(OldPath+AttFile),PWideChar(NewPath+AttFile),False);
+      end;
+      iAttFileList.SaveToFile(NewPath+'AttContext.dat');
+    end;
+
 
     iFileList.SaveToFile(NewPath+'Context.dat');
     iFile_DocNoList.SaveToFile(NewPath+'Context_DocNo.dat');
@@ -11129,6 +11370,7 @@
 
   finally
   iFileList.Free;
+  iAttFileList.Free;
   iFile_DocNoList.Free;
   DocNoList.Free;
   FileList.Free;
@@ -11139,9 +11381,10 @@
 var
   i,n : Integer;
   DocDir:String;
-  OldFile,NewFile:String;
+  OldFile,NewFile,AttFile:String;
   DocNoList,FileList : TStringlist;
   iFileList,iFile_DocDirList :TStringlist;
+  iAttFileList :TStringlist;
   AA,AA2,AA3,AA4:Boolean;
 begin
 
@@ -11166,6 +11409,7 @@
   FileList := TStringlist.Create;
   iFileList := TStringlist.Create;
   iFile_DocDirList := TStringlist.Create;
+  iAttFileList := TStringlist.Create;
   try
     //if Not FileExists(SoDir+'Context.dat') then  Exit;
     //iFileList.LoadFromFile(SoDir+'Context.dat');
@@ -11279,6 +11523,17 @@
         CaseDocNo_CopiesList.SaveToFile(DeDir+'CaseDocNo_Copies.dat');
       end;
     end;}
+    if FileExists(SoDir+'AttContext.dat') then
+    begin
+      iAttFileList.LoadFromFile(SoDir+'AttContext.dat');
+      for i := 0 to iAttFileList.Count - 1 do
+      begin
+        AttFile := iAttFileList.Strings[i];
+        CopyFile(PWideChar(SoDir+AttFile),PWideChar(DeDir+AttFile),False);
+      end;
+      iAttFileList.SaveToFile(DeDir+'AttContext.dat');
+    end;
+
 
     if FMode='ESCAN' then
     begin
@@ -12727,7 +12982,7 @@
            ISB.AntiAliased := False;
          ISB.LoadFromFile(Path+iDocNo+'\'+ContextList.Strings[n],1);
 
-         DpiResize(ISB.Graphic,36);
+         DpiResize(ISB.Graphic,36,False);
          ISB.Redraw(true);
 
        end;
@@ -12787,7 +13042,7 @@
        if ISB.ZoomPercent > 100  then
          ISB.AntiAliased := False;
        ISB.LoadFromFile(Path+iDocNo+'\'+ContextList.Strings[i],1);
-       DpiResize(ISB.Graphic,36);
+       DpiResize(ISB.Graphic,36,False);
        ISB.Redraw(true);
      end;
      FitPreViewISB;
@@ -12826,7 +13081,7 @@
            if ISB.ZoomPercent > 100  then
              ISB.AntiAliased := False;
            ISB.LoadFromFile(Path+iDocNo+'\'+ContextList.Strings[i],1);
-           DpiResize(ISB.Graphic,36);
+           DpiResize(ISB.Graphic,36,False);
            ISB.Redraw(true);
 
            //NowShowFileList.Add(ContextList.Strings[i]);
@@ -14091,7 +14346,7 @@
     end;
   end;
 //ShowMessage(SendData);
-//ShowMessage(Memo1.Lines.Text);
+
   IF memo1.Lines.Strings[0] <> '0' Then
   begin
     HttpErrStr := _Msg('')+memo1.Lines.Strings[1]+'。';
@@ -14397,6 +14652,9 @@
     Panel6.Visible := True;
     Panel21.Visible := True;
     Panel23.Visible := True;
+
+    AttFileGB.Visible := True;
+    Splitter2.Visible := True;
     ScanDuplexCB.Visible := True; //雙面掃描
   end
   Else if FMode = 'FSCAN' then
@@ -14411,6 +14669,8 @@
     Panel6.Visible := True;
     Panel21.Visible := True;
     Panel23.Visible := True;
+    AttFileGB.Visible := True;
+    Splitter2.Visible := True;
   end;
   DisplayMode(1,1,1,Panel9);
   Application.ProcessMessages;
@@ -14462,6 +14722,7 @@
   CaseList := TStringList.Create;    //記錄掃瞄案件的順序
   Context_DocnoList := TStringlist.Create; //案件裡的檔案Docno清單
   ContextList := TStringlist.Create; //案件裡的檔案清單
+  AttContextList := TStringlist.Create; //案件裡的附加檔案清單
   NoSaveBarCodeList := TStringlist.Create; //不儲存的條碼清單
   FormID_List := TStringlist.Create;  //FormID清單
   DocNo_List := TStringlist.Create; //DocNo清單
@@ -14833,7 +15094,6 @@
     CreateIn_WH(CaseID);    //產生入庫文件文字檔 In_Wh.dat
     Case2upload(CaseID);   //產生原影像結構
     TransPath := ImageSavePath+CaseID+'\Upload\';
-
     {if FMode = 'ESCAN' then    //20140320 yuu說拿掉此檢查
     begin
       S := TStringlist.Create;
@@ -14981,6 +15241,9 @@
   ClearCaseIndex;
   PageLv.Items.Clear;  //頁數清單
   //Panel18.Enabled:= False;
+  AttListBox.Items.Clear;
+  AddAttFileLB.Enabled := False;
+  DelAttFileLB.Enabled := False;
   UseOldCaseLb.Visible := False;
   PM107.Visible := False; //備註功能
   CaseHelpBtn.Visible := False; //檢核失敗原因鈕
@@ -15161,7 +15424,12 @@
       if FileExists(DisplayPath+'CustomDocNo.dat') then
         Cust_DocNoList.LoadFromFile(DisplayPath+'CustomDocNo.dat');
     end;
-     MyTreeNode1.Expand(True);
+    MyTreeNode1.Expand(True);
+    AddAttFileLB.Enabled := True;
+    if FileExists(DisplayPath+'ATTContext.dat') then
+    begin
+      LoadAttFile(NowCaseno);
+    end;
   end
   Else     //點在NewTreenode or MyTreenode1 上
   begin
@@ -15405,6 +15673,17 @@
 
 end;
 
+procedure TCB_IMGPSScanX.TreeView1MouseDown(Sender: TObject;
+  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+  IF Button = TMouseButton(MbRight) Then
+  begin
+    MDown := True;
+    If TreeView1.GetNodeAt(X,Y) = nil then Exit;
+    TreeView1.Selected := TreeView1.GetNodeAt(X,Y);
+  end;
+end;
+
 procedure TCB_IMGPSScanX.TreeView1MouseEnter(Sender: TObject);
 begin
 TreeView1.SetFocus;
@@ -15424,9 +15703,13 @@
   IF Button = TMouseButton(MbRight) Then
   begin
     If TreeView1.GetNodeAt(X,Y) = nil then Exit;
-    TreeView1.Selected := TreeView1.GetNodeAt(X,Y);
-    TreeView1Click(self);
-    TreeView1.PopupMenu.Popup(Mouse.CursorPos.X ,Mouse.CursorPos.Y);
+    if MDown then
+    begin
+      TreeView1Click(self);
+      TreeView1.PopupMenu.Popup(Mouse.CursorPos.X ,Mouse.CursorPos.Y);
+    end;
+    Application.ProcessMessages; //需加這行,不然有些全域變數會沒變到
+    MDown:= False;
   end;
 end;
 
@@ -15825,14 +16108,22 @@
     OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL,
     tmApartment);
 
-  SetLicenseKey('5B4451E676A1D2976FBB0F3BB18341336AF114C80B5ABAE7F6926B1CAF671F44' +
+  {SetLicenseKey('5B4451E676A1D2976FBB0F3BB18341336AF114C80B5ABAE7F6926B1CAF671F44' +
   'BD2F098CCEDA922F6389BFAE398DA6AEE67F97EEA0C17234C20D75C12173DBDA' +
   '594924D56DD8E342F454389C836AD880BB4352CA3BE62C4933B1BA3828E7462C' +
   '60514F2ECDAD322E6128D841F12D24DA00B623106D3F08EBCAA917D8A97CAA34' +
   '3D65F2DA567316457395BF9123EE53DF235D181F191A5712DBB27735284AA92D' +
   '5DFA0C8308308505F384707E900C6063F53F1BFF4C6972607955D1AE517B19D0' +
   '82CDD16301885403AD229D57BAEF98C056F31430861E5F68F339D658D72E1F92' +
-  '63899412EC2D07891FE3AFD35F3E4A4390B2F0A8A1BF1B7D6160E5F1CC009B17');
+  '63899412EC2D07891FE3AFD35F3E4A4390B2F0A8A1BF1B7D6160E5F1CC009B17'); }
+  SetLicenseKey('4B2CF65E8C2A86CE8A0DD0F6A7DB03BC0B0126168B48AE4C27EBD78CAE75CF0F' +
+   'A612190861E0D99F6FAE3ED97AC1941B5E97843CFFCF705A3787989072D4EB2C' +
+   'AE6CAB3F5B69B86616ACC8A37AD6A2AB21C7BDD5C9AE1EDF9E4193D353805C9A' +
+   '403631CE8A3D0803FEBB1BE4C209CE7A63B1298EF080EB34B8628CED567D2B68' +
+   'E777FAC58E2E32B7411FC217A04336231D1E861A93474759DAA6EDF53F6EB632' +
+   'A3055229A52F3053FB844754741409022DDE3DFB19473510F2BE63328E74BE20' +
+   'A6A29AA24878F91ADA9DF8CE1F320AF4DAF58EBF95D9BE761D70EEA274E19475' +
+   '1C15948B184264C5C49E60493F3BCD2FFAE2CA8B021D00B96F45550C5F050D8A');
 
 
   SetLicenseKey('A6A94A8D91B08A9D58F300C0573EA9EF1B9DB0BF69B90E13B958DB4CB6B44F5A' +

--
Gitblit v1.8.0