From 2631324407b8c12fe557f225688211d75d5ee02b Mon Sep 17 00:00:00 2001
From: doom4ster <doom4ster@gmail.com>
Date: 星期二, 26 九月 2017 17:57:04 +0800
Subject: [PATCH] CB_IMGPSScan.cab ver2.0.1.44 加入 A3 匯入切頁功能

---
 CB_IMGPSScanImp.pas |  555 +++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 358 insertions(+), 197 deletions(-)

diff --git a/CB_IMGPSScanImp.pas b/CB_IMGPSScanImp.pas
index 1ecad48..b7252a3 100644
--- a/CB_IMGPSScanImp.pas
+++ b/CB_IMGPSScanImp.pas
@@ -2634,197 +2634,328 @@
   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;
+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);
-//ISB.SaveToFile('C:\OCX\aaaaaa'+IntToStr(i)+'.tif');
-        DeskewImg(ISB.Graphic);
-//ISB.SaveToFile('C:\OCX\bbbbbb'+IntToStr(i)+'.tif');
-        if (TreeView1.Selected = NewTreeNode) or (TreeView1.Selected = MyTreeNode1) then
-        begin
+    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;
+
+    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);
+      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  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;
+            SaveFilename := Add_Zoo(ContextList.Count + 1, 3) + '_' +
+              SaveFilename + ext;
 
-          for n := 1 to MpsBarcodeinf.Count  do
-          begin
-            if MpsBarcodeinf.r180[n] <> 0 then  //依條碼角度轉影像
-            begin
-              Rotate(ISB.Graphic,MpsBarcodeinf.r180[n]);
-              MpsGetBarcode(ISB.Graphic,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;
-          //Rotate(ISB.Graphic,MpsBarcodeinf.r180[n]);  //20170705 加入有條碼就轉正
-          ISB.SaveToFile(SavePath+SaveFilename);
+            End;
+          End;
 
-          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);
+          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;
+          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(ISB.Graphic,MpsBarcodeinf.r180[n]);
-              MpsGetBarcode(ISB.Graphic,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;
-          //Rotate(ISB.Graphic,MpsBarcodeinf.r180[n]); //20170705 加入有條碼就轉正
-          ISB.SaveToFile(SavePath+SaveFilename);
+            End;
+          End;
+          // Rotate(ISB.Graphic,MpsBarcodeinf.r180[n]); //20170705 加入有條碼就轉正
+
+          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);
-//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;
+          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
@@ -3331,8 +3462,8 @@
     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
@@ -3348,8 +3479,8 @@
     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;
@@ -3383,8 +3514,8 @@
     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;   //歸類
@@ -7401,8 +7532,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;
@@ -9096,6 +9231,8 @@
     end;
 
   end;
+
+//ShowMessage('FormIDCount='+IntToStr(FormIDCount)+#10#13+'MpsBarcodeinf.count='+IntToStr(MpsBarcodeinf.count));
   if FormIDCount = 2 then
   begin
     Result := True;
@@ -9121,6 +9258,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);
@@ -12275,6 +12418,7 @@
   ISB : TImageScrollBox;
   Panel : TPanel;
   i,W,H : Integer;
+  myDate : TDateTime;
 begin
   FreePreViewISB;
   ScrollBox1.HorzScrollBar.Visible := False;
@@ -12282,32 +12426,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;
@@ -12316,25 +12466,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;
 
@@ -14220,7 +14374,6 @@
   NowDocNo := '';
   NowFormCode := '';
   NowFormName := '';
-
   NowPage := 0;
   NowShowFileList.Clear;
   StatusBar1.Panels[2].Text := '';
@@ -14640,7 +14793,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;

--
Gitblit v1.8.0