From 630dbb00b682c2e5ebee6ec666694441230b29cf Mon Sep 17 00:00:00 2001
From: Hong-Dell\Hong <chlin1022@i-mps.com>
Date: 星期四, 04 七月 2024 15:22:55 +0800
Subject: [PATCH] Ver 2,0,1,80

---
 CB_IMGPSScanImp.pas |  597 ++++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 446 insertions(+), 151 deletions(-)

diff --git a/CB_IMGPSScanImp.pas b/CB_IMGPSScanImp.pas
index 0b115dd..88d347a 100644
--- a/CB_IMGPSScanImp.pas
+++ b/CB_IMGPSScanImp.pas
@@ -1,5 +1,5 @@
 unit CB_IMGPSScanImp;
-
+//TEST
 {$WARN SYMBOL_PLATFORM OFF}
 
 interface
@@ -9,13 +9,22 @@
   EnDiGrph, { for TDibGraphic }
   EnMisc,   { for MinFloat }
   EnTifGr,  { for TTifGraphic }
+  {$IFDEF Production}
+  CB_IMGPSScan_TLB,
+  {$ENDIF}
+  {$IFDEF Test}
+  CB_IMGPSScan_test_TLB,
+  {$ENDIF}
+
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
-  ActiveX, AxCtrls, CB_IMGPSScan_TLB, StdVcl, VCLUnZip, VCLZip, Encryp,
+  ActiveX, AxCtrls, StdVcl, VCLUnZip, VCLZip, Encryp,
   ExtCtrls, ComCtrls, Menus, StdCtrls, Gauges, EnImgScr, PJMenuSpeedButtons,
   Buttons, ImgList, SBSimpleSSL, SBHTTPSClient, SBWinCertStorage, SBX509,
   SBCustomCertStorage, SBUtils,mpsBarco,BarcodesFinder,HTTPApp,ErrList,
   Xmltool,inifiles,printers,IdHashMessageDigest, idHash, LogFile,ShellApi,
-  SBSocket;
+  SBSocket,IIS_Ftp, SBSimpleFTPS;
+Type
+  TTransMode =(tsHttp,tsFtp,tsNone);
 
 var
   Ch_WriteNote : Boolean;
@@ -266,6 +275,9 @@
     PrtLb: TLabel;
     CaseHelpBtn: TBitBtn;
     HTTPSClient: TElHTTPSClient;
+    Button5: TButton;
+    FTPSClient1: TElSimpleFTPSClient;
+    Button6: TButton;
     procedure ActiveFormCreate(Sender: TObject);
     procedure Panel9Resize(Sender: TObject);
     procedure ISB1Click(Sender: TObject);
@@ -392,6 +404,8 @@
       Shift: TShiftState; X, Y: Integer);
     procedure HTTPSClientRedirection(Sender: TObject; const OldURL: string;
       var NewURL: string; var AllowRedirection: Boolean);
+    procedure Button5Click(Sender: TObject);
+    procedure Button6Click(Sender: TObject);
   private
     { Private declarations }
     HotKeyId1,HotKeyId2,HotKeyId3,HotKeyId4 :Integer;
@@ -431,9 +445,20 @@
     FWH_category:string;  //Y/N  Y是歸類時有區分入庫非入庫文件  N 是不區分
     ////////傳入參數///////
 
+    TransMode : TTransMode;   //用何種方式上傳檔案
     //********Http參數********
     HttpErrStr : String; //錯誤訊息
     //********Http參數********
+
+    //********Ftp參數*********
+    FFtpIP : String;
+    FFtpID : String;
+    FFtpPwd : String;
+    FFtpRootPath : String;
+    FFtpExtraPath : String;
+    FFtpPort : Integer;
+    FFtpProtocol : TFtpProtocol;
+    //********Ftp參數*********
 
     //********ini參數********
     DeviceDelete : Boolean;     //空白頁刪除啟動
@@ -541,6 +566,7 @@
     DocNoLength : Integer;  //Docno長度
 
     PEFileName : String; //掃描時的檔名
+    DownFileErrStr : String;  //下載影像時發生的錯誤
 
     ISB : TImageScrollBox;
     ScanInfo    : TScanInfo;
@@ -604,6 +630,11 @@
     Function GetFindResult(Col:String):String;
     //*********SQL相關************
 
+    //*********FTP相關************
+    Function GetFtpinfo(CaseID,Action:String):Boolean;
+    Procedure SetFtpInfo;     //餵入FTP資訊
+    Function FtpCaseComplete(SendData:String):Boolean;
+    //*********FTP相關************
 
     //*******轉換區*********
     Function FindDivFormCode(FormCode:String):Boolean; //找有沒有分案的條碼
@@ -720,6 +751,7 @@
     Function Node3FormID(Node3:TTreeNode):String;  //MyTreeNode3取FormCode出來
     Function GetNode2Name(Node2:TTreeNode):String;  //取MyTreeNode2的識別字出來(記之前點選用)
     //Function Down_Replace_Img(SPAth,DPath,CaseID:String):Boolean;
+    Function DownLoadImage(Path,CaseID:String):Boolean;
     Function Down_Img(Path,CaseID:String):Boolean;
     Function GetNoNameCase(Path:string):String; //取未配號XXXX
     Procedure CaseResort(Path:String); //案件的檔案重新排序(次文件依Docno挑)
@@ -744,7 +776,6 @@
     Procedure PageReplaceFormID(Path,NowFormID,NewFormID:String); //選取頁更換FormID
     Function ModeNeedCheck(OMRMode,ScanMode:String):Boolean; //掃瞄模式是否要做檢核
     procedure WMMOUSEWHEEL(var message: TWMMouseWheel); message WM_MOUSEWHEEL;
-    Function GetInputMask:String; //取得輸入的保單號碼
     Function GetCasePage(Path,CaseID:String):Integer;
     Function GetFormIDPage(FileList:TStringlist;FormID:String):Integer;
     Procedure SetFile2Case(CaseID,FileName:String);
@@ -2212,11 +2243,11 @@
     GoAtt := True;
   end;
 
-  if InputQuery('輸入其他文件名稱','文件名稱',CustomDocName) then
+  if InputQuery(_Msg('輸入其他文件名稱'),_Msg('文件名稱'),CustomDocName) then
   begin
     if FindCustomDocName(DisplayPath,CustomDocName) then
     begin
-      Showmessage(Format('文件名稱:"%s"己存在',[CustomDocName]));
+      Showmessage(Format(_Msg('文件名稱:"%s"己存在'),[CustomDocName]));
       Exit;
     end;
     CustomDocNo := GetNewCustomDocNo(DisplayPath,CustomDocName);
@@ -2296,7 +2327,7 @@
   iISBName,OldName : String;
   iISB : TImageScrollBox;
 begin
-  if MessageDlg('是否確定刪除??',mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
+  if MessageDlg(_Msg('是否確定刪除??'),mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
 
   for i := 0 to ComponentCount -1 do
   begin
@@ -2322,7 +2353,7 @@
 //ShowMessage('iISB.FileName='+iISB.FileName);
   ReSortFileName(ExtractFilePath(iISB.FileName));
   DrawDocItem2(MytreeNode1,NowCaseno);
-  MyTreeNode1.Text := Format('%s-%d'+_Msg('頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
+  MyTreeNode1.Text := Format(_Msg('%s-%d頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
   NewTreeNodeRefresh;
   ClearErrini(NowCaseno,MyTreeNode1);  //清掉檢核記錄
   TreeView1click(self);
@@ -2332,7 +2363,7 @@
 var
   mp:string;
 begin
-  mp := InputBox('移動頁數','請輸入移入頁碼','');
+  mp := InputBox(_Msg('移動頁數'),_Msg('請輸入移入頁碼'),'');
   if (mp <> '') then
   begin
     MoveImage(DisplayPath+NowDocDir+'\',strtoint(mp));
@@ -2773,7 +2804,7 @@
   SaveStreamB:TFileStream;
   cooom:integer;
 Begin
-  OpenDialog1.Filter := 'Image files|*.TIF;*.JPG';
+  OpenDialog1.Filter := 'Image files|*.TIF;*.JPG;*.PNG';
   If OpenDialog1.Execute Then
   Begin
     ISB := TImageScrollBox.Create(self);
@@ -2795,8 +2826,9 @@
 //ShowMessage(IntToStr(FileRec.Size)+','+IntToStr(FFileSizeLimit * 1024));
     If FileRec.Size > FFileSizeLimit * 1024 Then // 檢查檔案大小
     Begin
-      ShowMessage(Format('目前檔案大小為 %.3f MB', [FileRec.Size / (1024*1024)]) +
-        ',已超過單一檔案匯入限制'+Format('%.1f',[FFileSizeLimit/1024])+'MB');
+      ShowMessage(Format(_Msg('目前檔案大小為 %.3f MB,已超過單一檔案匯入限制%1.f MB'),[FileRec.Size / (1024*1024),FFileSizeLimit/1024]));
+      {ShowMessage(Format('目前檔案大小為 %.3f MB', [FileRec.Size / (1024*1024)]) +
+        ',已超過單一檔案匯入限制'+Format('%.1f',[FFileSizeLimit/1024])+'MB');}
       FindClose(FileRec);
       DataLoading(false, false);
       Exit;
@@ -2811,7 +2843,8 @@
     P := ISB.ImageCountFromFile(OpenDialog1.FileName);
     For i := 1 To P Do
     Begin
-      ShowText := _Msg('檔案加入中,請稍候(' + inttostr(i) + '/' + inttostr(P) + ')');
+      ShowText := Format(_Msg('檔案加入中,請稍候(%d/%d)'),[i,p]);
+      //ShowText := _Msg('檔案加入中,請稍候')+'(' + inttostr(i) + '/' + inttostr(P) + ')';
       DataLoading(True, True);
       ISB.LoadFromFile(FName, i);
       DeskewImg(ISB.Graphic);
@@ -2860,7 +2893,7 @@
         iRect.Bottom := ISB.Graphic.Height;
         CropImg(iGraphic_sec, iRect);
       End;
-
+      ISB.Graphic.Clear;  //20220711  Hong 覺得ISB後面沒有到了,先清掉減少記憶體使用
       iGraphic := iGraphic_First;
 
       While Not iGraphic.IsEmpty Do
@@ -2915,7 +2948,7 @@
 
           DocNo := FormCode2DocNo(FormID);
           DocDir := FindLastestDocDir(CaseID, DocNo);
-          if (FMode='ESCAN') and (FModeName='補件掃描') then
+          if (FMode='ESCAN') and (FModeName=_Msg('補件掃描')) then
           begin
             DocDir := FindLastestDocDirForPage(CaseID, DocNo,FormID);
 //ShowMessage('DocDir='+DocDir);
@@ -2966,16 +2999,19 @@
 //ShowMessage(IntToStr(iGraphic.Palette.palNumEntries));
           if iGraphic.ImageFormat = ifBlackWhite then   //20200806 出現無法匯入,是因color256無法壓JPEG,待報會後再開啟
           begin
+            SaveFilename := changefileext(SaveFilename,'.tif');    //20240320 Hong 調整黑白存tif
             iGraphic.Compression:=tcGroup4;
           end
           else if iGraphic.ImageFormat= ifColor256 then
           begin
+            SaveFilename := changefileext(SaveFilename,'.jpg');    //20240320 Hong 調整Color256存jpg
             ConverttoGray(iGraphic);
             iGraphic.Compression:=tcJPEG;
             iGraphic.JpegQuality:=cooom;
           end
           else if (iGraphic.ImageFormat = ifTrueColor) or (iGraphic.ImageFormat = ifGray256) then
           begin
+            SaveFilename := changefileext(SaveFilename,'.jpg');    //20240320 Hong 調整彩色灰階存jpg
             iGraphic.Compression:=tcJPEG;
             iGraphic.JpegQuality:=cooom;
           end
@@ -3003,8 +3039,7 @@
               SaveStream.Free;
             End;
           End
-          Else If LowerCase(ExtractFileExt(SavePath + SaveFilename))
-            = '.jpg' Then
+          Else If LowerCase(ExtractFileExt(SavePath + SaveFilename)) = '.jpg' Then
           Begin
             If FileExists(SavePath + SaveFilename) Then
               DeleteFile(SavePath + SaveFilename);
@@ -3093,7 +3128,7 @@
               JpgGr := TJpegGraphic.Create;
               Try
                 JpgGr.Assign(iGraphic);
-                JpgGr.SaveQuality := 30;
+                JpgGr.SaveQuality := cooom;
                 // JpgGr.AppendToStream(SaveStream);
                 JpgGr.SaveToFile(SavePath + SaveFilename);
               Finally
@@ -3139,6 +3174,8 @@
 
 finally
 ISB.Free;
+iGraphic_First.Free;
+iGraphic_sec.Free;
 end;
 
 
@@ -3284,12 +3321,12 @@
 
         if Trim(DocListForm.Edit1.Text)='' then
         begin
-          Showmessage('未輸入文件名稱');
+          Showmessage(_Msg('未輸入文件名稱'));
           Exit;
         end;
         if FindCustomDocName(DisplayPath,NewFormID) then
         begin
-          Showmessage(Format('文件名稱:"%s"己存在',[NewFormID]));
+          Showmessage(Format(_Msg('文件名稱:"%s"己存在'),[NewFormID]));
           Exit;
         end;
         if NowFormCode <> AttName then
@@ -3380,7 +3417,7 @@
   SavePath : String;
   ST1:TStringList;
 begin
-  if InputQuery('輸入其他文件名稱','文件名稱',CustomDocName) then
+  if InputQuery(_Msg('輸入其他文件名稱'),_Msg('文件名稱'),CustomDocName) then
   begin
     if CustomDocName <> '' then
     begin
@@ -3409,26 +3446,26 @@
 begin
   oldCopies := GetDocDirCopies(NowCaseno,NowDocDir);
   try
-    NewCopies := Strtoint(inputBox('修改份數','請輸入修改後的份數',inttostr(oldCopies)));
+    NewCopies := Strtoint(inputBox(_Msg('修改份數'),_Msg('請輸入修改後的份數'),inttostr(oldCopies)));
   except
-    Showmessage('輸入錯誤');
+    Showmessage(_Msg('輸入錯誤'));
     Exit;
   end;
   if (NewCopies <= 0) and (NewCopies >= 10000) then
   begin
-    Showmessage('輸入範圍錯誤');
+    Showmessage(_Msg('輸入範圍錯誤'));
     Exit;
   end;
 
   if (oldCopies <> NewCopies) and (NewCopies > 0) and (NewCopies < 10000) then
   begin
-    if DocNoNeedDiv(NowDocNo) and (NewCopies = 1) and (MessageDlg('修改至1份後此文件將無法再進行份數修改,是否確定??',mtConfirmation,[mbyes,mbcancel],0)= mrcancel) then
+    if DocNoNeedDiv(NowDocNo) and (NewCopies = 1) and (MessageDlg(_Msg('修改至1份後此文件將無法再進行份數修改,是否確定??'),mtConfirmation,[mbyes,mbcancel],0)= mrcancel) then
       Exit;
 
     SetDocDirCopies(NowCaseno,NowDocDir,NewCopies);
     SetRecordEditedDocDir('A',NowCaseNo,NowDocDir);
     DrawDocItem2(MytreeNode1,NowCaseno);
-    Showmessage('修改完成');
+    Showmessage(_Msg('修改完成'));
   end;
 
 end;
@@ -3584,7 +3621,7 @@
   if DisplayISB.FileName = '' then Exit;
   if (ContextList.Count = 1) and ((FMode = 'NSCAN') or (FMode = 'ASCAN') or (FMode = 'DSCAN') or (FMode = 'ISCAN') or (FMode = 'SSCAN') or (FMode = 'MSCAN') or (FMode = 'RI_SCAN')) then
   begin
-    if Messagedlg(_Msg('刪除後(%s)案件無影像,將刪除此案件,是否確定刪除?'),mtconfirmation,[mbyes,mbcancel],0) = mrCancel then Exit;
+    if Messagedlg(Format(_Msg('刪除後(%s)案件無影像,將刪除此案件,是否確定刪除?'),[NowCaseno]),mtconfirmation,[mbyes,mbcancel],0) = mrCancel then Exit;
     _DelTree(DisplayPath);
     SetCaseList('D',NewTreeNode.IndexOf(MyTreeNode1),'');
     LoadImgFile;
@@ -3655,7 +3692,7 @@
       PM104.Visible := True;   //檔案加入影像
     end;
 
-    if FModeName='異動件' then
+    if FModeName=_Msg('異動件') then
     begin
       PM101.Visible := True;
     end;
@@ -3680,7 +3717,7 @@
     if FMode='ESCAN' then
       PM101.Visible:=false;
 
-    if FModeName='異動件' then
+    if FModeName=_Msg('異動件') then
     begin
       PM101.Visible := True;
     end;
@@ -3720,7 +3757,7 @@
       PM101.Visible:=false;
     end;
 
-    if FModeName='異動件' then
+    if FModeName=_Msg('異動件') then
     begin
       PM101.Visible := True;
     end;
@@ -3759,7 +3796,7 @@
       PM101.Visible:=false;
     end;
 
-    if FModeName='異動件' then
+    if FModeName=_Msg('異動件') then
     begin
       PM101.Visible := True;
     end;
@@ -3861,7 +3898,7 @@
     PM605.Visible := True;  //刪除
   end;
 
-  if  FModeName<>'異動件' then
+  if  FModeName<>_Msg('異動件') then
   begin
     if (FImgDelete='Y') then
     begin
@@ -3934,7 +3971,7 @@
   if SampleFormIDList.IndexOf(SampleFormID)<>-1 then
   begin
     // Show a custom dialog
-    buttonSelected := messagedlg(SampleFormID+'已有範本,是否取代?',mtCustom,
+    buttonSelected := messagedlg(SampleFormID+_Msg('已有範本,是否取代?'),mtCustom,
                                 [mbYes,mbCancel], 0);
     if buttonSelected = mrCancel then
     begin
@@ -4141,7 +4178,7 @@
       AddFile := HTTPEncode(UTF8Encode(ExtractFileName(OpenDialog1.Files.Strings[i])));
       if FileExists(ImageSavePath+NowCaseno+'\'+AddFile) then
       begin
-        if Messagedlg(Format(_msg('%s己存在,是否覆蓋??'),[Addfile]),mtconfirmation,[mbyes,mbcancel],0) = mrcancel Then
+        if Messagedlg(Format(_Msg('%s己存在,是否覆蓋??'),[Addfile]),mtconfirmation,[mbyes,mbcancel],0) = mrcancel Then
           Continue;
         SetAttContextList('D',-1,NowCaseno,AddFile);
       end;
@@ -4174,7 +4211,7 @@
 begin
   IF not InitialOk Then
   begin
-    Showmessage(_msg('資訊尚未下載完成,請稍候或重新進入'));
+    Showmessage(_Msg('資訊尚未下載完成,請稍候或重新進入'));
     Exit;
   end;
   if MyTreeNode1 = nil then
@@ -4328,6 +4365,26 @@
 //  SampleFormIDList.Add('31A00101011706A');
 //  SampleFormIDList.Add('31A00101021706A');
 //  SampleFormIDList.Add('31A00101031706A');
+end;
+
+procedure TCB_IMGPSScanX.Button5Click(Sender: TObject);
+begin
+  GetftpInfo(NowCaseno,'upload');
+  SetFtpInfo;
+  IIS_Ftp.FtpsConnect;
+
+  IIS_Ftp.FtpsToMain(FFtpExtraPath,NowCaseno+'.pdf','d:\1.pdf',display1);
+end;
+
+procedure TCB_IMGPSScanX.Button6Click(Sender: TObject);
+begin
+  GetftpInfo(NowCaseno,'download');
+  SetFtpInfo;
+  IIS_Ftp.FtpsConnect;
+  IIS_Ftp.FtpsCWD(IIS_Ftp.FtpPath);
+  IIS_Ftp.FtpsReceive(NowCaseNo+'.zip','d:\'+NowCaseNo+'.zip');
+
+
 end;
 
 procedure TCB_IMGPSScanX.StatrTwainScan;
@@ -4823,7 +4880,7 @@
         DocNo := FormCode2DocNo(FormID);
         ScanDocDir := FindLastestDocDir(ScanCaseno,DocNo);
 
-        if (FMode='ESCAN') and (FModeName='補件掃描') then    //20180207 加入的特殊邏輯
+        if (FMode='ESCAN') and (FModeName=_Msg('補件掃描')) then    //20180207 加入的特殊邏輯
         begin
           ScanDocDir := FindLastestDocDirForPage(ScanCaseno, DocNo,FormID);
         end;
@@ -4951,7 +5008,7 @@
   DeleteFile(LngPath+'mps.dat');
   end;
   ////壓zip//////
-  Showmessage('匯出完成,匯出檔案:'+LngPath+'mps.zip');
+  Showmessage(_Msg('匯出完成,匯出檔案:')+LngPath+'mps.zip');
 end;
 
 procedure TCB_IMGPSScanX.ImportBtClick(Sender: TObject);
@@ -4978,16 +5035,16 @@
 
       str2dir(ZipPath);
       if not ExecuteUnZip_Pwd(OpenDialog1.FileName,ZipPath,False,'9338430') then
-        Showmessage('無法解壓縮');
+        Showmessage(_Msg('無法解壓縮'));
       if not FileExists(ZipPath+'mps.dat') then
       begin
-        Showmessage('格式不符,無法匯入');
+        Showmessage(_Msg('格式不符,無法匯入'));
         Exit;
       end;
       S.LoadFromFile(ZipPath+'mps.dat');
       if (En_DecryptionStr_Base64('D',S.Strings[0],'9338430')<> ServerDate) then
       begin
-        Showmessage('檔案過期,無法匯入');
+        Showmessage(_Msg('檔案過期,無法匯入'));
         Exit;
       end;
 
@@ -5027,7 +5084,7 @@
   S.Free;
   _DelTree(ZipPath);
   end;
-  Showmessage('匯入完成');
+  Showmessage(_Msg('匯入完成'));
 end;
 
 procedure TCB_IMGPSScanX.HotKeyDown (var Msg : TMessage);
@@ -5615,6 +5672,7 @@
 
   Result := False;     // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
   EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+
   ColumeStr := 'WORK_NO,DOC_NO,DOC_U_DESC,DOC_TYPE,DOC_VERSION,FORM_PAGES,START_DATE,STOP_DATE,IS_DOC_DIV,IS_IN_WH';
   //If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=1&col='+Doc_Inf_Colume+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
 
@@ -6014,7 +6072,7 @@
     begin
       if FileName2FormCode(FileList.Strings[i]) = FormID then
       begin
-        if (FMode = 'ESCAN') and (FModeName<>'異動件') then
+        if (FMode = 'ESCAN') and (FModeName<>_Msg('異動件')) then
         begin
           if ISExistImg(ImageSavePath+CaseID+'\'+DocDir+'\'+FileList.Strings[i]) then
           begin
@@ -6411,10 +6469,11 @@
   In_Doc1,In_Doc2 : String;
   AttachYN : String; //是否有附件 Y:有 N:沒有
 
-  ST1,ST2:TStringList;
+  ST1,ST2,ST3:TStringList;
   str1,str2:String;
   must_formidStr :string;
   last_add_formidstr :string;
+  ScanListStr:String;
   casepath:String;
   filesizeInt:integer;
   case_page:string;
@@ -6452,20 +6511,12 @@
   //CaseResort(Path);  //檔名照設定排序
   CreateFormID_FormName(Path,CaseID);  //產生FormID_FormName.dat
   CreateDocNo_DocName(Path,CaseID); //產生DocNo_Name.dat
-//ShowMessage('EEEEEEEEEE');
   Doc_Data := CreateDocNo_Info(CaseID);  //產生保管袋文件 Docno,份數,頁數;Docno,份數,頁數 的回傳字串
-//ShowMessage('1111111111');
   Doc_Data1 := CreateCustDocNo_Info(CaseID);  //產生自定文件 Docname,份數,頁數;Docno,份數,頁數 的回傳字串
-//ShowMessage('2222222222');
   In_Doc1 := CreateDocnoFrom_Info(CaseID); //產生被引進的保管袋文件資訊  Docno[tab]份數[tab]案件編號#13#10Docno[tab]份數[tab]案件編號
-//ShowMessage('333333333333333333');
   In_Doc2 := CreateCustDocNoFrom_Info(CaseID);   //產生被引進的自定文件資訊  Docno[tab]份數[tab]案件編號#13#10Docno[tab]份數[tab]案件編號
-//ShowMessage('4444444444444');
   AttachYN := CreateAttach_Info(CaseID); //是否還有附件 Y:有 N:沒有
-  //self.ReadCaseIndex()
-//ShowMessage('555555555555');
   ReadCaseIndex(Path);
-//ShowMessage('DDDDDDDDDD');
   //LoanDoc := 'Y';
   //產生遮罩影像
 //  if FWork_No = 'CW' then
@@ -6481,6 +6532,7 @@
 //ShowMessage(ST1.Text);
 //ShowMessage(LastInitFormidList.Text);
   ST2:=TStringList.Create;
+  ST3:=TStringlist.Create;
 
   for I := 0 to ST1.Count - 1 do
   begin
@@ -6494,6 +6546,8 @@
   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
@@ -6507,8 +6561,19 @@
       last_add_formidstr:=last_add_formidstr+ST2.Strings[i]+'@#,';
   end;
   last_add_formidstr:=Copy(last_add_formidstr,1,Length(last_add_formidstr)-3) ;
+
+  ST3.LoadFromFile(path+'scanlist.dat');
+  for I := 0 to ST3.Count - 1 do
+  begin
+    if ScanListStr = '' then
+      ScanListStr := FileName2FormCode(ST3.Strings[i])
+    else
+      ScanListStr := Format('%s,%s',[ScanListStr,FileName2FormCode(ST3.Strings[i])]);
+  end;
+
   ST1.Free;
   ST2.Free;
+  ST3.Free;
 //ShowMessage('last_add_formidstr='+last_add_formidstr);
   ///////必要formid 20170315 end //////////////////////////
 
@@ -6549,7 +6614,8 @@
 //exit;           //目前上傳檔案大小為xxMB,已超過50MB,無法上傳    %.3f  ,[FileRec.Size / 1048576]
     If FileRec.Size > StrtoInt(FMaxUploadSize) * 1048576 Then // 檢查檔案大小
     Begin
-      ShowMessage(Format('%s目前上傳檔案大小為%.3fMB,已超過'+FMaxUploadSize+'MB,無法上傳',[caseid,FileRec.Size / 1048576]) );
+      ShowMessage(Format(_Msg('%s目前上傳檔案大小為%.3fMB,已超過%sMB,無法上傳'),[caseid,FileRec.Size / 1048576,FMaxUploadSize]));
+      //ShowMessage(Format('%s目前上傳檔案大小為%.3fMB,已超過'+FMaxUploadSize+'MB,無法上傳',[caseid,FileRec.Size / 1048576]) );
       FindClose(FileRec);
       Result := False;
       Exit;
@@ -6557,44 +6623,89 @@
     FindClose(FileRec);
   ///檢查上傳的zip大小////
 //ShowMessage('last_add_formidstr='+last_add_formidstr);
-  ////上傳/////
+  if not GetftpInfo(CaseID,'upload') then   //取案件上傳方式
+  begin
+    //Showmessage(_Msg()Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason+'.');
+    DownFileErrStr := _Msg('取案件上傳資訊失敗!!')+HttpErrStr;
+    Result := False;
+    Exit;
+  end;
   SendData:='data='+HTTPEncode(UTF8Encode(FData))
-  +'&verify='+FVerify
-  +'&form_id='+UpformID
-  +'&loan_doc='+Case_loandoc
-  +'&case_no='+TransName
-  +'&doc_data='+HTTPEncode(UTF8Encode(Doc_Data))
-  +'&doc_data1='+HTTPEncode(UTF8Encode(Doc_Data1))
-  +'&attach='+AttachYN
-  +'&case_page='+case_page
-  +'&file_size='+IntToStr(filesizeInt)
-  +'&must_formid='+must_formidStr  //擁有的 formid
-  +'&last_add_formid='+last_add_formidstr   //當次新加的 formid
-  +'&in_doc1='+HTTPEncode(UTF8Encode(In_Doc1))
-  +'&in_doc2='+HTTPEncode(UTF8Encode(In_Doc2));
-//ShowMessage('SendData='+SendData);
-//ShowMessage(FData+#10#13+Doc_Data);
-  //Showmessage('Wait');
+      +'&verify='+FVerify
+      +'&form_id='+UpformID
+      +'&loan_doc='+Case_loandoc
+      +'&case_no='+TransName
+      +'&doc_data='+HTTPEncode(UTF8Encode(Doc_Data))
+      +'&doc_data1='+HTTPEncode(UTF8Encode(Doc_Data1))
+      +'&attach='+AttachYN
+      +'&case_page='+case_page
+      +'&file_size='+IntToStr(filesizeInt)
+      +'&must_formid='+must_formidStr  //擁有的 formid
+      +'&last_add_formid='+last_add_formidstr   //當次新加的 formid
+      +'&form_code='+ScanListStr      //scanlist.dat 表單代號
+      +'&ftp_image_path='+FFtpExtraPath   //加傳FTP目錄  HTTP上傳時會是空白
+      +'&in_doc1='+HTTPEncode(UTF8Encode(In_Doc1))
+      +'&in_doc2='+HTTPEncode(UTF8Encode(In_Doc2));
 
-  if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/caseupload',SendData,'file',Path+'Img.zip',FReWrite,Memo1,False) then
-  begin
-    Showmessage(Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason+'.');
-    Result := False;
-    Exit;
+  case TransMode of
+    tsHttp :
+    begin
+      ////上傳/////
+      ShowText := CaseID+_Msg('資料上傳中(Http),請稍候');
+      DataLoading(True,True);
+      if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/caseupload',SendData,'file',Path+'Img.zip',FReWrite,Memo1,False) then
+      begin
+        Showmessage(Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason+'.');
+        Result := False;
+        Exit;
+      end;
+      if memo1.Lines.Strings[0] = '1' then
+      begin
+        Showmessage(Format(_Msg('')+_Msg(''),[CaseID])+memo1.Lines.Strings[1]+'。');
+        Result := False;
+        Exit;
+      end
+      Else if Pos('<script type="text/javascript" src="scripts/IMGPS00/login.js"></script>',Memo1.Lines.Text) > 0 then
+      begin
+        Showmessage(Format(_Msg('')+_Msg('')+_Msg('閒置過久或被登出,請重新登入'),[CaseID]));
+        Result := False;
+        Exit;
+      end;
+      ////上傳////
+    end;
+    tsFtp :
+    begin
+       ShowText := CaseID+_Msg('資料上傳中(Ftp),請稍候');
+       DataLoading(True,True);
+       SetFtpInfo;
+       try
+         if not IIS_Ftp.FtpsConnect then
+         begin
+           Showmessage(Format('無法連上Ftp主機,錯誤原因:%s',[FtpErrReason]));
+           Result := False;
+           Exit;
+         end;
+         if not IIS_Ftp.FtpsToMain(FFtpExtraPath,CaseID+'.zip',Path+'Img.zip',display1) then
+         begin
+           Showmessage(Format(_msg('上傳案件(%s)時,發生錯誤,錯誤原因:%s'),[CaseID,FtpErrStr]));
+           Result := False;
+           Exit;
+         end;
+
+         if not FtpCaseComplete(SendData) then    //Ftp上傳後通知完成
+         begin
+           Showmessage(Format(_Msg('通知案件(%s)Ftp上傳完成時,發生錯誤!!'),[CaseID])+HttpErrStr);
+           Result := False;
+           Exit;
+         end;
+       finally
+       IIS_Ftp.FtpsClose;
+       end;
+    end;
+
   end;
-  if memo1.Lines.Strings[0] = '1' then
-  begin
-    Showmessage(Format(_Msg('')+_Msg(''),[CaseID])+memo1.Lines.Strings[1]+'。');
-    Result := False;
-    Exit;
-  end
-  Else if Pos('<script type="text/javascript" src="scripts/IMGPS00/login.js"></script>',Memo1.Lines.Text) > 0 then
-  begin
-    Showmessage(Format(_Msg('')+_Msg('')+_Msg('閒置過久或被登出,請重新登入'),[CaseID]));
-    Result := False;
-    Exit;
-  end;
-  ////上傳////
+
+
   if FMode = 'ESCAN' then    //上傳舊件引入檔案      //20140616 原本先搬舊件再搬新件,改為先搬新件再搬舊件
   begin
     if not TransOldCaseFile(ImageSavePath+CaseID+'\') then
@@ -6819,6 +6930,52 @@
   if DirectoryExists(SPath+'AttFile\') then
     AttFile_Arrange(SPath+'AttFile\',DPath+'AttFile\');
 end;}
+
+Function TCB_IMGPSScanX.DownLoadImage(Path,CaseID:String):Boolean;
+begin
+  Result := True;
+  if not GetftpInfo(CaseID,'download') then   //取案件下載方式
+  begin
+    DownFileErrStr := _Msg('取案件下載資訊失敗,')+HttpErrStr;
+    Result := False;
+    Exit;
+  end;
+  case TransMode of
+    tsHttp:
+    begin
+      ShowText := _Msg('案件下載中(Http),請稍候');
+      DataLoading(True,True);
+      If not Down_Img(ImageSavePath+FCaseID+'\Download\',FCaseID) then
+      begin
+        Showmessage(FCaseID+_msg('載入異動影像時,網路發生錯誤')+HttpErrStr);
+        DataLoading(False,False);
+        Exit;
+      end;
+    end;
+    tsFtp:
+    begin
+      ShowText := _Msg('案件下載中(Ftp),請稍候');
+      DataLoading(True,True);
+      SetFtpInfo;
+
+      if not IIS_Ftp.FtpsConnect then
+      begin
+        DownFileErrStr := Format(_Msg('無法連上Ftp主機,錯誤原因:%s')+#13+'%s',[FtpErrReason,FTPSClient1.LastReceivedReply]);
+        Result := False;
+        Exit;
+      end;
+      if not IIS_Ftp.FtpsDownloadFile(FFtpExtraPath,CaseID+'.zip',Path+CaseID+'.zip',display1) then
+      begin
+        DownFileErrStr := Format(_Msg('錯誤原因:%s'),[FtpErrStr]);
+        Result := False;
+        Exit;
+      end;
+      ExecuteUnZip(Path+CaseID+'.zip',Path,False);
+      DeleteFile(Path+CaseID+'.zip');
+    end;
+  end;
+end;
+
 
 Function TCB_IMGPSScanX.Down_Img(Path,CaseID:String):Boolean;
 var
@@ -7754,26 +7911,6 @@
     Result := True;
 end;
 
-Function TCB_IMGPSScanX.GetInputMask:String; //取得輸入的保單號碼
-var
-  InputMaskForm: TInputMaskForm;
-begin
-  Result := '';
-  ShowText := _msg('輸入保單號碼中');
-  DataLoading(True,True);
-  InputMaskForm := TInputMaskForm.Create(self);
-  try
-    InputMaskForm.MaskEdit1.ClearSelection;
-    if InputMaskForm.ShowModal = mrOk then
-    begin
-      Result := Trim(InputMaskForm.MaskEdit1.Text)+Trim(InputMaskForm.MaskEdit2.Text)+Trim(InputMaskForm.MaskEdit3.Text);
-    end;
-  finally
-  InputMaskForm.Free;
-  DataLoading(False,False);
-  end;
-end;
-
 Function TCB_IMGPSScanX.GetCasePage(Path,CaseID:String):Integer;
 var
   DocDirList,FileList,ST1 :TStringlist;
@@ -8487,7 +8624,7 @@
 begin
   if Mode = 'ID' then
   begin
-    Result := '自行輸入';
+    Result := _Msg('自行輸入');
     for i := 0 to ID_S.Count - 1 do
     begin
       if Str = ID_S.Strings[i] then
@@ -8679,7 +8816,6 @@
     if Col =RCol then
       Result := RValue;
   end;
-
 end;
 
 Procedure TCB_IMGPSScanX.DataLoading(Loading:Boolean;UseTimer:Boolean);  //資料載入中要停止點選的動作
@@ -8931,7 +9067,7 @@
       //DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('頁'),[CaseDocNoList.Strings[i],DocNo2DocName(Caseno,iDocNo),DocNoPage]));
       //DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[CaseDocNoList.Strings[i],DocNo2DocName(Caseno,iDocNo),DocNoCopies]));
 //ShowMessage('iDocNo='+iDocNo);
-      DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[DocNo2DocName(Caseno,iDocNo),CaseDocNoList.Strings[i],DocNoCopies]));
+      DocNode := TreeView1.Items.AddChild(CaseNode,Format(_Msg('%s{%s}-%d份'),[DocNo2DocName(Caseno,iDocNo),CaseDocNoList.Strings[i],DocNoCopies]));
 
       if GetUseCase('F',ImageSavePath+Caseno+'\',CaseDocNoList.Strings[i]) <> '' Then
       begin
@@ -8961,7 +9097,7 @@
             FormPage := GetFormIDPage(FileList,FormID);
             FormName := FormCode2FormName(Caseno,FormID);
             //FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
-            FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+            FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
             FormNode.ImageIndex := 4;
             FormNode.SelectedIndex := 4;
             DocNode.AlphaSort(True);
@@ -8975,7 +9111,8 @@
         FormPage := GetFormIDPage(FileList,FormID);
         FormName := FormCode2FormName(Caseno,FormID);
         //FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
-        FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+        //FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+        FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
         FormNode.ImageIndex := 4;
         FormNode.SelectedIndex := 4;
         DocNode.AlphaSort(True);
@@ -9001,8 +9138,8 @@
             FormPage := GetFormIDPage(FileList,FormID);
             FormName := FormCode2FormName(Caseno,FormID);
             //FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
-            FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
-
+            //FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+            FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
             FormNode.ImageIndex := 4;
             FormNode.SelectedIndex := 4;
             DocNode.AlphaSort(True);
@@ -9036,7 +9173,7 @@
       DocNoPage := FileList.Count;
       iDocNo := DocNoDir2DocNo(AttName);
       //DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[AttName,DocNo2DocName(Caseno,iDocNo),1]));
-      DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[DocNo2DocName(Caseno,iDocNo),AttName,1]));
+      DocNode := TreeView1.Items.AddChild(CaseNode,Format(_Msg('%s{%s}-%d份'),[DocNo2DocName(Caseno,iDocNo),AttName,1]));
       DocNode.ImageIndex := 2;
       DocNode.SelectedIndex := 2;
       for n := 0 to FileList.Count - 1 do
@@ -9047,8 +9184,8 @@
           FormPage := GetFormIDPage(FileList,FormID);
           FormName := FormCode2FormName(Caseno,FormID);
           //FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
-          FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
-
+          //FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+          FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
           FormNode.ImageIndex := 4;
           FormNode.SelectedIndex := 4;
         end;
@@ -9070,7 +9207,9 @@
         DocNoPage := FileList.Count;
         iDocNo := DocNoDir2DocNo(AttName);
         //DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[AttName,DocNo2DocName(Caseno,iDocNo),1]));
-        DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[DocNo2DocName(Caseno,iDocNo),'Attach',1]));
+        //DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[DocNo2DocName(Caseno,iDocNo),'Attach',1]));
+        DocNode := TreeView1.Items.AddChild(CaseNode,Format(_Msg('%s{%s}-%d份'),[DocNo2DocName(Caseno,iDocNo),'Attach',1]));
+
         DocNode.ImageIndex := 2;
         DocNode.SelectedIndex := 2;
         for n := 0 to FileList.Count - 1 do
@@ -9081,7 +9220,8 @@
             FormPage := GetFormIDPage(FileList,FormID);
             FormName := FormCode2FormName(Caseno,FormID);
             //FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
-            FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+            //FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+            FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
 
             FormNode.ImageIndex := 4;
             FormNode.SelectedIndex := 4;
@@ -9172,7 +9312,7 @@
     PrtDialog : TPrintDialog;
     S : String;
 begin
-  ShowText := '列印中,請稍候';
+  ShowText := _Msg('列印中,請稍候');
   DataLoading(True,True);
   Case2upload(NowCaseNo);   //產生原影像結構
 
@@ -9256,6 +9396,7 @@
   OldCaseInfoForm.IN_WH_DocNoList := TStringlist.Create;
   OldCaseInfoForm.OldCopiesList := TStringlist.Create;
   try
+    InitialLanguage(OldCaseInfoForm); //載入多國語言
     OldCaseInfoForm.Notebook1.ActivePage := 'CaseInfo';
     OldCaseInfoForm.ImageSavePath := ImageSavePath;
     OldCaseInfoForm.CaseID := NowCaseNo;
@@ -9282,7 +9423,7 @@
       Year := Caseinfolist.Strings[1];
       BS_No := Caseinfolist.Strings[2];
       IS_Old := Caseinfolist.Strings[3];
-      With OldCaseInfoForm.ListView1.Items.Add do
+      With OldCaseInfoForm.OldCaseLV.Items.Add do
       begin
         Caption := CaseID;
         SubItems.Add(Year);
@@ -9366,7 +9507,8 @@
       iDocNoList.SaveToFile(NewPath+'CaseDocNo.dat');
       iDocNo_CopiesList.SaveToFile(NewPath+'CaseDocNo_Copies.dat');
       DrawDocItem2(MyTreeNode1,NowCaseNo);
-      MyTreeNode1.Text := Format('%s-%d'+_Msg('頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
+      //MyTreeNode1.Text := Format('%s-%d'+_Msg('頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
+      MyTreeNode1.Text := Format(_Msg('%s-%d頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
       NewTreeNodeRefresh;
       ClearErrini(NowCaseno,MyTreeNode1);  //清掉檢核記錄
     end;
@@ -9773,9 +9915,9 @@
   if FileExists(LngPath+'MPSLIC_SCAN.lic') then
     DeleteFile(LngPath+'MPSLIC_SCAN.lic');
   if LegalDate = '' then
-    StatusBar1.Panels[4].Text := '註冊號:'+MacID+' 剩餘註冊數:'+inttostr(Totalcount-Nowcount);
+    StatusBar1.Panels[4].Text := Format(_Msg('註冊號:%s 剩餘註冊數:%s'),[MacID,inttostr(Totalcount-Nowcount)]);
   if LegalDate <> '' then
-    StatusBar1.Panels[4].Text := '*註冊號:'+MacID+'('+inttostr(Lic_Idx)+')'+' 剩餘註冊數:'+inttostr(Totalcount-Nowcount);
+    StatusBar1.Panels[4].Text := '*'+Format(_Msg('註冊號:%s 剩餘註冊數:%s'),[MacID+'('+inttostr(Lic_Idx)+')',inttostr(Totalcount-Nowcount)]);
 end;
 
 procedure TCB_IMGPSScanX.SmoothCBClick(Sender: TObject);
@@ -10098,7 +10240,7 @@
           Printer object. Otherwise, if UsePrintJob is True, the Title
           property of the TDibGraphicPrinter object is used to specify the
           job name. }
-        Printer.Title := '影像列印';
+        Printer.Title := _Msg('影像列印');
       end;
 
       IF (Page mod 2) = 1 Then
@@ -10123,7 +10265,7 @@
   procedure PrintWithAutoPrintJob;
   begin
       GraphicPrinter.UsePrintJob := True;
-      GraphicPrinter.Title       := '影像列印';
+      GraphicPrinter.Title       := _Msg('影像列印');
       GraphicPrinter.Print(ImageScrollBox1.Graphic);
   end;
 
@@ -10767,19 +10909,19 @@
         //Showmessage(FUrl+'service/slic/SLIC02/useOther?'+senddata);
         if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/useOther',SendData,'file',OldCasePath+'UseCase.ini',FReWrite,Memo1,False) then
         begin
-          Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'+_Msg('錯誤代碼:')),[OldCaseID])+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
+          Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'),[OldCaseID])+_Msg('錯誤代碼:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
           Result := False;
           Exit;
         end;
         if memo1.Lines.Strings[0] = '1' then
         begin
-          Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!')+_Msg('錯誤原因:'),[OldCaseID])+memo1.Lines.Strings[1]);
+          Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'),[OldCaseID])+_Msg('錯誤原因:')+memo1.Lines.Strings[1]);
           Result := False;
           Exit;
         end
         Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
         begin
-          Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!')+_Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入'),[OldCaseID]));
+          Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'),[OldCaseID])+_Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入'));
           Result := False;
           Exit;
         end;
@@ -10806,6 +10948,137 @@
     Exit;
   end;
   IF memo1.Lines.Strings[0] = '1' Then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+    Result := False;
+    Exit;
+  end
+  Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+    Result := False;
+    Exit;
+  end;
+end;
+
+Function TCB_IMGPSScanX.GetFtpinfo(CaseID,Action:String):Boolean;
+var
+  SendData : String;
+
+  Procedure DecodeFtpInfo(EncryStr:String);
+  var
+    FtpStr : String;
+    ftpinfoList : TStringlist;
+  begin
+    if EncryStr = '' then Exit;
+    ftpinfoList := TStringlist.Create;
+    try
+      FtpStr := En_DecryptionStr_Base64('D',EncryStr,MpsKey);
+      SplitString('!@!',FtpStr,ftpinfoList);
+      if ftpinfoList[0] = 'ftps' then
+        FFtpProtocol := fpftps
+      else if ftpinfoList[0] = 'ftp' then
+        FFtpProtocol := fpftp;
+      FFtpIP := ftpinfoList[1];
+      FFtpPort := strtoint(ftpinfoList[2]);
+      FFtpID := ftpinfoList[3];
+      FFtpPwd := ftpinfoList[4];
+
+    finally
+    ftpinfoList.Free;
+    end;
+  end;
+begin
+  Result := True;
+  SendData:='product='+FWork_no+'&case_no='+CaseID+'&department='+FUserUnit+'&action='+Action;
+  If not ProcessServlet_FormData(HTTPSClient,FURL+'service/imgpsc/IMGPSC02/ftps',SendData,FReWrite,Memo1,False) Then
+  begin
+    HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+    Result := False;
+    Exit;
+  end;
+  IF (memo1.Lines.Strings[0] = '1') Then
+  begin
+    if memo1.Lines.Strings[1]='nodata' then   //nodata 為正常可繼續的判斷
+    begin
+      TransMode := tsNone;
+      Result := True;
+      Exit;
+    end
+    else
+    begin
+      HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+      Result := False;
+      Exit;
+    end;
+  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
+  else if (memo1.Lines.Strings[0] <> '0') then//不認識的字串
+  begin
+    HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[0];
+    Result := False;
+    Exit;
+  end;
+  TransMode := tsHttp;
+  FFtpExtraPath := '';
+
+  if memo1.Lines.Strings[0] = '0' then
+  begin
+    if memo1.Lines.Strings[2] = 'Y' then   //要使用FTP
+      TransMode := tsFtp;
+    if memo1.Lines.Count > 3 then
+    begin
+      FFtpExtraPath := memo1.Lines.Strings[3];
+      DecodeFtpInfo(memo1.Lines.Strings[4]);
+    end;
+  end;
+end;
+
+Procedure TCB_IMGPSScanX.SetFtpInfo;     //餵入FTP資訊
+begin
+  IIS_Ftp.Display1 := Display1;
+  IIS_Ftp.FTPSClient1 := FTPSClient1;
+  IIS_Ftp.ElMemoryCertStorage := ElMemoryCertStorage;
+  IIS_Ftp.Display1 := Display1;
+  IIS_Ftp.Ftpip := FFtpIP;
+  IIS_Ftp.Ftpuserid := FFtpID;
+  IIS_Ftp.FtpPwd := FFtpPwd;
+  IIS_Ftp.FtpPath := FFtpRootPath;
+  IIS_Ftp.FtpPort := FFtpPort;
+  IIS_Ftp.FtpSSL := True;
+  IIS_Ftp.FtpPassive := True;
+  if FFtpProtocol = fpftp then
+     IIS_Ftp.FtpSSL := False;
+  IIS_Ftp.FtpEncryptDataChannel := true;
+  FTPSClient1.OnControlReceiveAsString := IIS_Ftp.EventHandlers.ControlReceiveAsString;
+  FTPSClient1.OnControlSendAsString := IIS_Ftp.EventHandlers.ControlSendAsString;
+  FTPSClient1.OnSSLError := IIS_Ftp.EventHandlers.SSLError;
+  FTPSClient1.OnCertificateValidate := IIS_Ftp.EventHandlers.CertificateValidate;
+  FTPSClient1.OnTextDataLine := IIS_Ftp.EventHandlers.TextDataLine;
+
+  {Showmessage(Format('Ftpip:%s'+#13
+              +'Ftpid:%s'+#13
+              +'Ftppwd:%s'+#13
+              +'Ftppath:%s'+#13
+              +'Ftpport:%s'+#13
+              ,[FFtpIP,FFtpid,FFtpPwd,Ftppath,inttostr(Ftpport)]));}
+end;
+
+Function TCB_IMGPSScanX.FtpCaseComplete(SendData:String):Boolean;
+begin
+  Result := True;
+  If not ProcessServlet_FormData(HTTPSClient,FURL+'service/imgpsc/IMGPSC02/caseupload',SendData,FReWrite,Memo1,False) Then
+  begin
+    HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+    Result := False;
+    Exit;
+  end;
+  IF (memo1.Lines.Strings[0] = '1') or (memo1.Lines.Strings[0] <> '0') Then
   begin
     HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
     Result := False;
@@ -12191,7 +12464,7 @@
 LogFile1.LogToFile(logTimeString+'最大頁數B段 '+CaseID+' '+'OMRFileList.Text='+OMRFileList.Text);
         For i := 0 to OMRFileList.Count - 1 do
         begin
-          if FModeName='異動件' then Continue;
+          if FModeName=_Msg('異動件') then Continue;
 
           if FWH_category='N' then
           begin
@@ -12787,7 +13060,7 @@
 begin
   Result := True;     // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
   //dnFile(HTTPSClient,FUrl+'Language.Lng','','',LngPath+'Language.Lng',FReWrite.Text,Memo1,False,DownImgStatus)
-  If not dnFile_Get(HTTPSClient,FUrl+'Language.Lng','','',LngPath+'Language.Lng',FReWrite,Memo1,False,'') Then
+  If not dnFile_Get(HTTPSClient,FUrl+'Language.Lng','','',LngPath+'Language.Lng',FReWrite,Memo1,False,DownImgStatus) Then
   begin
     HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
     Result := False;
@@ -12817,7 +13090,7 @@
     List_FormCode,Err_FormCode: String;
     iFormID : String;
 begin
-   ShowText := '影像顯示中,請稍候';
+   ShowText := _Msg('影像顯示中,請稍候');
    DataLoading(True,True);
 
    IF FormCode = 'ShowAll' then  //顯示所有的影像 (因為附件會傳空字串,所以用ShowAll)
@@ -12934,7 +13207,7 @@
     iGroupNo,page,Ct,int1 : Integer;
     ST1:TStringList;
 begin
-   ShowText := '影像顯示中,請稍候';
+   ShowText := _Msg('影像顯示中,請稍候');
    DataLoading(True,True);
 ST1:=TStringList.Create;
 //Display1.Lines.Clear;
@@ -14644,6 +14917,7 @@
 
   FMaxUploadSize:='10';
   FJpgCompression:=50;
+  FFtpRootPath := '';  //影像平台沒有給FtpRoot目錄,會直接用FFtpExtraPath切換至指定目錄
   //FMode := 'DSCAN' ;
   //FIs_In_Wh := 'Y';
   if FIs_In_Wh = 'Y' then
@@ -14695,7 +14969,12 @@
   DisplayMode(1,1,1,Panel9);
   Application.ProcessMessages;
   StatusBar1.Panels[0].Text := 'Ver'+GetCurrentVersionNo;
-  StatusBar1.Panels[1].Text := _Msg('登入人員:')+FUserName;
+  StatusBar1.Panels[1].Text := 'Login User:'+FUserName;
+  {$IFDEF Test}
+    StatusBar1.Panels[0].Text := StatusBar1.Panels[0].Text+'(test)';
+  {$ENDIF}
+    StatusBar1.Panels[0].Text := StatusBar1.Panels[0].Text;
+
   if FPrintyn = 'Y' then
     PrtLB.Visible := True;
 
@@ -14703,11 +14982,24 @@
   InitScrollRec;
   If FUrl = '' then
   begin
-    Showmessage(_Msg('URL不能為空白,請洽詢程式人員'));
+    Showmessage(_Msg('URL cannot be empty,please contact system administrator'));
     Exit;
   end;
   if FUrl[length(FUrl)]<>'/' then
     FUrl := FUrl + '/';
+  //20221028 把語言檔改放至 Local目錄裡,才不會有些文字來不及使用
+  LngPath := GetLocalAppDir(Handle)+'MPS\CB_IMGPS\';
+  Str2Dir(LngPath);
+  ////下載語言檔/////  20170218 先拿調以便測試
+  If not DownLanguage Then
+  begin
+    Showmessage('Language File error!!'+HttpErrStr);
+    DataLoading(False,False);
+    Exit;
+  end;
+
+  InitialLanguage(Self);  //載入多國語言
+
 
   if FWork_no='' then
   begin
@@ -14860,7 +15152,7 @@
 //ShowMessage('CheckXmlPath='+CheckXmlPath);
   //SitePath := ImagePath+'Site\'+FWork_No+'\';
   SitePath := ImagePath+'Site\';  // 20200612 發現影像平台是取回所有業務的設定,所以不能有業務別目錄
-  LngPath := ImagePath;
+  //LngPath := ImagePath; //改放至上面取Local目錄
   SamplePath := ImagePath+'Sample\'+FWork_No+'\';
   ImagePath := ImagePath + 'Scantemp\';
 //ShowMessage('AA  ImagePath='+ImagePath);
@@ -14899,15 +15191,8 @@
   ShowText := _Msg('資料載入中,請稍候');
   DataLoading(True,True);
 
-   ////下載語言檔/////  20170218 先拿調以便測試
-  If not DownLanguage Then
-  begin
-    Showmessage('Language File error!!'+HttpErrStr);
-    DataLoading(False,False);
-    Exit;
-  end;
 
-  InitialLanguage(Self);  //載入多國語言
+  StatusBar1.Panels[1].Text := _Msg('登入人員:')+FUserName;
   //FCaseID:='20150302180133';//測試用
   ////下載語言檔/////
 //ShowMessage('OOOO');
@@ -14925,12 +15210,19 @@
     begin
       ShowText := _Msg('案件下載中,請稍候');
       DataLoading(True,True);
-      If not Down_Img(ImageSavePath+FCaseID+'\Download\',FCaseID) then
+      If not DownLoadImage(ImageSavePath+FCaseID+'\Download\',FCaseID) Then
+      begin
+        Showmessage(FCaseID+_msg('載入異動影像時,網路發生錯誤')+DownFileErrStr);
+        DataLoading(False,False);
+        Exit;
+      end;
+
+      {If not Down_Img(ImageSavePath+FCaseID+'\Download\',FCaseID) then
       begin
         Showmessage(FCaseID+_msg('載入異動影像時,網路發生錯誤')+HttpErrStr);
         DataLoading(False,False);
         Exit;
-      end;
+      end;}
 //Showmessage(ImageSavePath+FCaseID+'\Download\'+#10#13+ImageSavePath+FCaseID+'\');
       Download2Case(ImageSavePath+FCaseID+'\Download\',ImageSavePath+FCaseID+'\');
 //Showmessage('aaa');
@@ -15136,6 +15428,9 @@
     begin
       /////訊問是否可上傳/////
       CaseTrans := CaseAsk(CaseID);
+      //Showmessage('記得改回來');
+      //CaseTrans := 0;
+
       /////訊問是否可上傳////
     end
     Else  ///不是新件、重掃件、異動件的不查
@@ -15210,7 +15505,7 @@
   begin
     uploadMsg:=NowCaseNo+_Msg('影像上傳完成。此案已進入下一流程');
   end;
-  if (FMode='ESCAN') and (FModeName='補件掃描') and (SuccessCount = 1) then
+  if (FMode='ESCAN') and (FModeName=_Msg('補件掃描')) and (SuccessCount = 1) then
   begin
     uploadMsg:=NowCaseNo+_Msg('影像已補件完成');
   end;
@@ -15341,9 +15636,9 @@
       DisplayPath := ImageSavePath+NowCaseNo+'\';
 
       if GetUseCase('F',DisplayPath,NowDocDir) <> '' then
-        StatusBar1.Panels[2].Text := Format('從%s引用',[GetUseCase('F',DisplayPath,NowDocDir)]);
+        StatusBar1.Panels[2].Text := Format(_Msg('從%s引用'),[GetUseCase('F',DisplayPath,NowDocDir)]);
       if GetUseCase('T',DisplayPath,NowDocDir) <> '' then
-        StatusBar1.Panels[2].Text := Format('被%s引用',[GetUseCase('T',DisplayPath,NowDocDir)]);
+        StatusBar1.Panels[2].Text := Format(_Msg('被%s引用'),[GetUseCase('T',DisplayPath,NowDocDir)]);
       if FLoanDoc_Enable = 'Y' then
       begin
         AddCredit1RG.Enabled := True;
@@ -15417,9 +15712,9 @@
       DisplayPath := ImageSavePath+NowCaseNo+'\';
 
       if GetUseCase('F',DisplayPath,NowDocDir) <> '' then
-        StatusBar1.Panels[2].Text := Format('從%s引用',[GetUseCase('F',DisplayPath,NowDocDir)]);
+        StatusBar1.Panels[2].Text := Format(_Msg('從%s引用'),[GetUseCase('F',DisplayPath,NowDocDir)]);
       if GetUseCase('T',DisplayPath,NowDocDir) <> '' then
-        StatusBar1.Panels[2].Text := Format('被%s引用',[GetUseCase('T',DisplayPath,NowDocDir)]);
+        StatusBar1.Panels[2].Text := Format(_Msg('被%s引用'),[GetUseCase('T',DisplayPath,NowDocDir)]);
 
       if FLoanDoc_Enable = 'Y' then
       begin

--
Gitblit v1.8.0