From 0756bf12d10cf1b7f78c571de0a9ad69cbaeb7ca Mon Sep 17 00:00:00 2001
From: curtis <curtis@i-mps.com>
Date: 星期一, 30 三月 2026 14:24:17 +0800
Subject: [PATCH] fix: 更新內部引用方法參照
---
reassemble/view/treeView.pas | 822 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 822 insertions(+), 0 deletions(-)
diff --git a/reassemble/view/treeView.pas b/reassemble/view/treeView.pas
new file mode 100644
index 0000000..cc13e2a
--- /dev/null
+++ b/reassemble/view/treeView.pas
@@ -0,0 +1,822 @@
+{ ==============================================================================
+ 方法名稱:DrawDocItem2
+ 引用相依:DirectoryExists, FileExists, LoadFromFile
+ 方法描述:在樹狀結構中繪製指定案件的文件與表單節點。讀取 CaseDocNo.dat 取得文件
+ 清單,逐一建立文件節點並根據引用狀態設定圖示。接著在文件節點下建立表單
+ 節點,區分制式表單與自定義表單。包含入庫過濾與附件處理,是樹狀 UI 呈現
+ 的核心。
+============================================================================== }
+Function TCB_IMGPSScanX.DrawDocItem2(CaseNode : TTreenode;Caseno:String):Boolean; //畫出文件名稱的Tree
+Var
+ i,n,m : Integer;
+ DocNode,FormNode : TTreeNode;
+ DocNoPage,FormPage : Integer;
+ DocNoCopies : Integer;
+ DocNo,iDocNo : String;
+ DocVer : String;
+ FileList : TStringlist;
+ FormID,iFormID : String;
+ FormName : String;
+ CaseDocNoList,CaseDocNo_CopiesList,StrList : TStringlist;
+ iiDocNo,iiFormID,iiDocVer : String;
+ ST1:TStringList;
+begin
+ Result := False;
+ FileList := TStringlist.Create;
+ CaseDocNoList := TStringlist.Create;
+ CaseDocNo_CopiesList := TStringlist.Create;
+ StrList := TStringlist.Create;
+ ST1:=TStringList.Create;
+LogFile1.LogToFile(logTimeString+'產文件樹開始');
+ try
+ CaseNode.ImageIndex := 1;
+ CaseNode.SelectedIndex := 1;
+ While CaseNode.Count > 0 do //全刪
+ begin
+ CaseNode.Item[0].Delete;
+ end;
+ CaseDocNoList.Clear;
+ if FileExists(ImageSavePath+Caseno+'\CaseDocNo.dat') then
+ CaseDocNoList.LoadFromFile(ImageSavePath+Caseno+'\CaseDocNo.dat');
+ if FileExists(ImageSavePath+Caseno+'\CaseDocNo_Copies.dat') then
+ CaseDocNo_CopiesList.LoadFromFile(ImageSavePath+Caseno+'\CaseDocNo_Copies.dat');
+ for i := 0 to CaseDocNoList.Count - 1 do
+ begin
+ FileList.Clear;
+ //Showmessage(ImageSavePath+Caseno+'\'+CaseDocNoList.Strings[i]+'\Context.dat');
+ if FileExists(ImageSavePath+Caseno+'\'+CaseDocNoList.Strings[i]+'\Context.dat') then
+ FileList.LoadFromFile(ImageSavePath+Caseno+'\'+CaseDocNoList.Strings[i]+'\Context.dat');
+ iDocNo := DocNoDir2DocNo(CaseDocNoList.Strings[i]);
+ ST1.Clear;
+
+LogFile1.LogToFile(logTimeString+'FileList.Text='+FileList.CommaText);
+ if (FWH_category='N') and (FIs_In_Wh='Y') then
+ begin
+ for n := 0 to FileList.Count - 1 do
+ begin
+ if ISExistImg(ImageSavePath+Caseno+'\'+CaseDocNoList.Strings[i]+'\'+FileList.Strings[n]) then
+ begin
+ ST1.Add(FileList.Strings[n]);
+ end;
+ end;
+ for n := 0 to ST1.Count - 1 do
+ begin
+ if (FileList.IndexOf(ST1.Strings[n])<>-1) and (not DocNoIs_In_WH(iDocNo)) then
+ begin
+ FileList.Delete(FileList.IndexOf(ST1.Strings[n]));
+ end;
+ end;
+ end
+ Else
+ if not DocNoAppear(iDocNo) then Continue; //20180925 Hong覺得應該加這段
+
+
+
+LogFile1.LogToFile(logTimeString+'WH_category='+FWH_category+',Is_In_Wh='+FIs_In_Wh+',FileList.Text='+FileList.CommaText);
+ if FileList.Count=0 then Continue;
+
+ DocNoCopies := Strtoint(CaseDocNo_CopiesList.Strings[i]);
+ DocNoPage := FileList.Count;
+ iDocNo := DocNoDir2DocNo(CaseDocNoList.Strings[i]);
+//Showmessage(iDocNo);
+//Showmessage(DocNo2DocName(Caseno,iDocNo));
+//ShowMessage('FileList='+FileList.Text);
+ {if (((FIs_In_Wh = 'Y') and (not DocNoIs_In_WH(iDocNo))) or //入庫掃描不看非入庫文件
+ ((FIs_In_Wh = 'N') and (DocNoIs_In_WH(iDocNo)))) and
+ ((iDocNo <> 'Attach') and (Copy(iDocNo,1,5)<>'ZZZZZ')) then //非入庫掃描不看入庫文件
+ begin
+ Continue;
+ end;}
+
+ //if not DocNoAppear(iDocNo) then Continue;
+
+
+ //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(_Msg('%s{%s}-%d份'),[DocNo2DocName(Caseno,iDocNo),CaseDocNoList.Strings[i],DocNoCopies]));
+
+ if GetUseCase('F',ImageSavePath+Caseno+'\',CaseDocNoList.Strings[i]) <> '' Then
+ begin
+ DocNode.ImageIndex := 8;
+ DocNode.SelectedIndex := 8;
+ end
+ Else if GetUseCase('T',ImageSavePath+Caseno+'\',CaseDocNoList.Strings[i]) <> '' Then
+ begin
+ DocNode.ImageIndex := 9;
+ DocNode.SelectedIndex := 9;
+ end
+ Else
+ begin
+ DocNode.ImageIndex := 2;
+ DocNode.SelectedIndex := 2;
+ end;
+ if ((Pos('ZZZZZ',DocNode.Text) = 0) and (Pos('YYYYY',DocNode.Text) = 0)) and (FileList.Count =0) then //制式文件
+ begin
+ for n := 1 to LASTEST_FORM_INF_List.Count - 1 do
+ begin
+ StrList := SplitString('!@!',LASTEST_FORM_INF_List.Strings[n]);
+ iiFormID := StrList.Strings[0];
+ iiDocNo := StrList.Strings[1];
+ if iiDocNo = iDocNo then
+ begin
+ FormID := iiFormID;
+ FormPage := GetFormIDPage(FileList,FormID);
+ FormName := FormCode2FormName(Caseno,FormID);
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
+ FormNode.ImageIndex := 4;
+ FormNode.SelectedIndex := 4;
+ DocNode.AlphaSort(True);
+ end;
+ end;
+ end
+ else if (Pos('ZZZZZ',DocNode.Text) > 0) or (Pos('YYYYY',DocNode.Text) > 0) then //自訂文件
+ begin
+ FormID := GetCustomFormID(ImageSavePath+Caseno+'\',CaseDocNoList.Strings[i]);
+ //showmessage(FileList.Text);
+ FormPage := GetFormIDPage(FileList,FormID);
+ FormName := FormCode2FormName(Caseno,FormID);
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
+ FormNode.ImageIndex := 4;
+ FormNode.SelectedIndex := 4;
+ DocNode.AlphaSort(True);
+ end;
+ SortDocDir_FormID(Caseno,CaseDocNoList.Strings[i]); //檔名依FormID排序
+
+ for n := 0 to FileList.Count - 1 do
+ begin
+ FormID := FileName2FormCode(FileList.Strings[n]);
+ DocVer := FormCode2Version(FormID);
+ DocNo := FormCode2DocNo(FormID);
+ if CheckFormIDExists(DocNode,FormID) then Continue;
+ //Showmessage(FormID+#13+DocNo+#13+DocVer);
+ for m := 0 to FormID_List.Count - 1 do
+ begin
+ iiFormID := FormID_List.Strings[m];
+ iiDocNo := DocNo_List.Strings[m];
+ iiDocVer := FormCode2Version(iiFormID);
+ if (iiDocNo = DocNo) and (iiDocVer = DocVer) then
+ begin
+ //Showmessage(iiFormID+#13+iiDocNo+#13+iiDocVer);
+ FormID := iiFormID;
+ FormPage := GetFormIDPage(FileList,FormID);
+ FormName := FormCode2FormName(Caseno,FormID);
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
+ FormNode.ImageIndex := 4;
+ FormNode.SelectedIndex := 4;
+ DocNode.AlphaSort(True);
+ end;
+ end;
+
+
+ //if not CheckFormIDExists(DocNode,FormID) then
+ //begin
+ // Application.ProcessMessages;
+ // FormPage := GetFormIDPage(FileList,FormID);
+ /// FormName := FormCode2FormName(Caseno,FormID);
+ /// FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
+ // FormNode.ImageIndex := 4;
+ // FormNode.SelectedIndex := 4;
+ //end;
+ end;
+ end;
+
+ if DirectoryExists(ImageSavePath+Caseno+'\'+AttName) then
+ begin
+
+ FileList.Clear;
+ if FileExists(ImageSavePath+Caseno+'\'+AttName+'\Context.dat') then
+ FileList.LoadFromFile(ImageSavePath+Caseno+'\'+AttName+'\Context.dat')
+ Else
+ begin
+ Rmdir(ImageSavePath+Caseno+'\'+AttName);
+ Exit;
+ end;
+ DocNoPage := FileList.Count;
+ iDocNo := DocNoDir2DocNo(AttName);
+ //DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[AttName,DocNo2DocName(Caseno,iDocNo),1]));
+ DocNode := TreeView1.Items.AddChild(CaseNode,Format(_Msg('%s{%s}-%d份'),[DocNo2DocName(Caseno,iDocNo),AttName,1]));
+ DocNode.ImageIndex := 2;
+ DocNode.SelectedIndex := 2;
+ for n := 0 to FileList.Count - 1 do
+ begin
+ FormID := FileName2FormCode(FileList.Strings[n]);
+ if not CheckFormIDExists(DocNode,FormID) then
+ begin
+ FormPage := GetFormIDPage(FileList,FormID);
+ FormName := FormCode2FormName(Caseno,FormID);
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
+ FormNode.ImageIndex := 4;
+ FormNode.SelectedIndex := 4;
+ end;
+ end;
+ end;
+
+ if FModeName='件' then //20170904 先裝死 因為異動 同時存在兩種附件太難寫
+ begin
+ if DirectoryExists(ImageSavePath+Caseno+'\Attach') then
+ begin
+ FileList.Clear;
+ if FileExists(ImageSavePath+Caseno+'\Attach'+'\Context.dat') then
+ FileList.LoadFromFile(ImageSavePath+Caseno+'\Attach'+'\Context.dat')
+ Else
+ begin
+ Rmdir(ImageSavePath+Caseno+'\Attach');
+ Exit;
+ end;
+ DocNoPage := FileList.Count;
+ iDocNo := DocNoDir2DocNo(AttName);
+ //DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[AttName,DocNo2DocName(Caseno,iDocNo),1]));
+ //DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[DocNo2DocName(Caseno,iDocNo),'Attach',1]));
+ DocNode := 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
+ begin
+ FormID := FileName2FormCode(FileList.Strings[n]);
+ if not CheckFormIDExists(DocNode,FormID) then
+ begin
+ FormPage := GetFormIDPage(FileList,FormID);
+ FormName := FormCode2FormName(Caseno,FormID);
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
+
+ FormNode.ImageIndex := 4;
+ FormNode.SelectedIndex := 4;
+ end;
+ end;
+ end;
+ end;
+LogFile1.LogToFile(logTimeString+'產文件樹結束');
+ Finally
+ FileList.Free;
+ CaseDocNoList.Free;
+ CaseDocNo_CopiesList.Free;
+ StrList.Free;
+ ST1.Free;
+ end;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:TreeView1Click
+ 引用相依:FileExists, LoadFromFile
+ 方法描述:處理樹狀結構(TreeView)的點擊事件,是切換顯示內容的核心入口。根據點擊的
+ 層級(案件、文件、表單),重置全域變數並設定對應的 DisplayPath、NowDocNo
+ 與 NowFormCode。接著載入並顯示該層級對應的影像與附件清單,同時動態調整
+ 按鈕與選單的可用性。
+============================================================================== }
+procedure TCB_IMGPSScanX.TreeView1Click(Sender: TObject);
+Var
+ v,v1,v2,v3,ln : Integer;
+ i,page : Integer;
+ F : TSearchrec;
+begin
+ ScanMode := smNew;
+ IF TreeView1.Selected = nil Then Exit;
+ Scrollbar1.Position := 1;
+ Scrollbar1.Max := 1;
+ DisplayPath := '';
+ NowCaseno := '';
+ NowDocDir := '';
+ NowDocNo := '';
+ NowFormCode := '';
+ NowFormName := '';
+ NowPage := 0;
+ NowShowFileList.Clear;
+ StatusBar1.Panels[2].Text := '';
+ ClearCaseIndex;
+ PageLv.Items.Clear; //頁數清單
+ //Panel18.Enabled:= False;
+ AttListBox.Items.Clear;
+ AddAttFileLB.Enabled := False;
+ DelAttFileLB.Enabled := False;
+ UseOldCaseLb.Visible := False;
+ PM107.Visible := False; //備註功能
+ CaseHelpBtn.Visible := False; //檢核失敗原因鈕
+ Panel5.Visible := True;
+ ContextList.Clear;
+ SortMode := false;
+ ISB1.ZoomMode := zmFullPage;
+ IF TreeView1.Selected.Parent <> nil Then
+ begin
+ if TreeView1.Selected.Parent = NewTreenode then //點在案件上
+ begin
+ //Panel18.Enabled := True;
+ PM107.Visible := True; //備註功能
+ MyTreeNode1 := TreeView1.Selected;
+ MyTreeNode2 := nil;
+ MyTreeNode3 := nil;
+ v := Posend('-',MyTreenode1.Text);
+ v1 := Length(MyTreenode1.Text);
+ NowCaseNo := Copy(TreeView1.Selected.Text,1,v-1);
+ if (FMode = 'ESCAN') and (FOldCaseInfo <> '') then
+ UseOldCaseLb.Visible := True;
+ ClearView(1);
+ DisplayPath := ImageSavePath+NowCaseNo+'\';
+ if FLoanDoc_Enable = 'Y' then
+ begin
+ AddCredit1RG.Enabled := True;
+ end;
+ ReadCaseIndex(DisplayPath);
+ If FileExists(DisplayPath+'\upload\Checkerr.ini') and (not FileExists(DisplayPath+'\upload\OMRCheckOk.dat')) Then
+ CaseHelpBtn.Visible := True;
+ IF FileExists(DisplayPath+'CaseDocNo.dat') Then
+ begin
+ CaseDocNoList.LoadFromFile(DisplayPath+'CaseDocNo.dat');
+
+
+ view_image_DocNo(DisplayPath,'ShowAll','',1);
+ end;
+ if FileExists(DisplayPath+'CustomDocNo.dat') then
+ Cust_DocNoList.LoadFromFile(DisplayPath+'CustomDocNo.dat');
+
+
+ Page := ContextList.Count;
+ For i := 1 to page do
+ begin
+ With PageLV.Items.Add do
+ begin
+ Caption := Add_Zoo(i,3);
+ end;
+ end;
+ If Page > 0 then
+ ScrollBar1.Max := page;
+ MyTreeNode1.Expand(True);
+ end
+ Else If TreeView1.Selected.Parent.Parent = NewTreenode Then //點在文件上
+ begin
+
+ MyTreeNode1 := TreeView1.Selected.Parent;
+ MyTreeNode2 := TreeView1.Selected;
+ MyTreeNode3 := nil;
+ v := Pos('-',MyTreenode1.Text);
+ NowCaseNo := Copy(MyTreenode1.Text,1,v-1);
+
+ v := Posend('{',MyTreenode2.Text);
+ v1 := Posend('}',MyTreenode2.Text);
+ v2 := posend('-',MyTreenode2.Text);
+ ln := length(MyTreenode2.Text);
+ NowDocDir := Copy(MyTreeNode2.Text,v+1,v1-v-1);
+ NowDocNo := DocNoDir2DocNo(NowDocDir);
+ page :=Strtoint(Copy(MyTreeNode2.Text,v2+1,ln-v2-1));
+ if (FMode = 'ESCAN') and (FOldCaseInfo <> '') then
+ UseOldCaseLb.Visible := True;
+ ClearView(1);
+ DisplayPath := ImageSavePath+NowCaseNo+'\';
+
+ if GetUseCase('F',DisplayPath,NowDocDir) <> '' then
+ StatusBar1.Panels[2].Text := Format(_Msg('從%s引用'),[GetUseCase('F',DisplayPath,NowDocDir)]);
+ if GetUseCase('T',DisplayPath,NowDocDir) <> '' then
+ StatusBar1.Panels[2].Text := Format(_Msg('被%s引用'),[GetUseCase('T',DisplayPath,NowDocDir)]);
+ if FLoanDoc_Enable = 'Y' then
+ begin
+ AddCredit1RG.Enabled := True;
+ end;
+ ReadCaseIndex(DisplayPath);
+ If FileExists(DisplayPath+'Checkerr.ini') and (not FileExists(DisplayPath+'OMRCheckOk.dat')) Then
+ CaseHelpBtn.Visible := True;
+ If Page > 0 then
+ ScrollBar1.Max := page;
+ For i := 1 to page do
+ begin
+ With PageLV.Items.Add do
+ begin
+ Caption := Add_Zoo(i,3);
+ end;
+ end;
+
+ If FileExists(DisplayPath+'Checkerr.ini') and (not FileExists(DisplayPath+'OMRCheckOk.dat')) Then
+ CaseHelpBtn.Visible := True;
+ IF FileExists(DisplayPath+NowDocDir+'\Context.dat') Then
+ begin
+ ContextList.LoadFromFile(DisplayPath+NowDocDir+'\Context.dat');
+ //Context_DocnoList.LoadFromFile(DisplayPath+'Context_Docno.dat');
+ view_image_DocNo(DisplayPath,NowDocDir,'',Page);
+ end;
+ if FileExists(DisplayPath+'CustomDocNo.dat') then
+ Cust_DocNoList.LoadFromFile(DisplayPath+'CustomDocNo.dat');
+ MyTreeNode1.Expand(True);
+ end
+ Else If (NewTreenode <> nil) and (TreeView1.Selected.Parent.Parent.Parent = NewTreenode) Then //點在表單上
+ begin
+ //NoteBtn.Visible := True; //備註功能
+ //Panel18.Enabled := True;
+ ClearView(1);
+ PM107.Visible := True; //備註功能
+ MyTreeNode1 := TreeView1.Selected.Parent.Parent;
+ MyTreeNode2 := TreeView1.Selected.Parent;
+ MyTreeNode3 := TreeView1.Selected;
+
+ v := Posend('-',MyTreenode1.Text);
+ NowCaseNo := Copy(MyTreenode1.Text,1,v-1);
+
+ if (FMode = 'ESCAN') and (FOldCaseInfo <> '') then
+ UseOldCaseLb.Visible := True;
+
+ v := Posend('{',MyTreenode2.Text);
+ v1 := Posend('}',MyTreenode2.Text);
+ v2 := posend('-',MyTreenode2.Text);
+ ln := length(MyTreenode2.Text);
+ NowDocDir := Copy(MyTreeNode2.Text,v+1,v1-v-1);
+ NowDocNo := DocNoDir2DocNo(NowDocDir);
+
+ v := Posend('{',MyTreenode3.Text);
+ v1 := Posend('}',MyTreeNode3.Text);
+ v2 := Posend('-',MyTreeNode3.Text);
+ ln := Length(MyTreeNode3.Text);
+ if v>0 then
+ begin
+ NowFormCode := Copy(MyTreeNode3.Text,v+1,v1-v-1);
+ if (NowFormCode = 'Attach') or (NowFormCode = 'S_Attach') then
+ NowFormCode := '';
+ NowFormName := Copy(MyTreeNode3.Text,v+1,v1-v-1);
+ page := strtoint(Copy(MyTreeNode3.Text,v2+1,ln-v2-1));
+ end
+ Else //點在附件的頁數
+ begin
+ NowFormCode := '';
+ page := 1;
+ end;
+
+ DisplayPath := ImageSavePath+NowCaseNo+'\';
+
+ if GetUseCase('F',DisplayPath,NowDocDir) <> '' then
+ StatusBar1.Panels[2].Text := Format(_Msg('從%s引用'),[GetUseCase('F',DisplayPath,NowDocDir)]);
+ if GetUseCase('T',DisplayPath,NowDocDir) <> '' then
+ StatusBar1.Panels[2].Text := Format(_Msg('被%s引用'),[GetUseCase('T',DisplayPath,NowDocDir)]);
+
+ if FLoanDoc_Enable = 'Y' then
+ begin
+ AddCredit1RG.Enabled := True;
+ end;
+ ReadCaseIndex(DisplayPath);
+ If FileExists(DisplayPath+'Checkerr.ini') and (not FileExists(DisplayPath+'OMRCheckOk.dat')) Then
+ CaseHelpBtn.Visible := True;
+ If Page > 0 then
+ ScrollBar1.Max := page;
+ For i := 1 to page do
+ begin
+ With PageLV.Items.Add do
+ begin
+ Caption := Add_Zoo(i,3);
+ end;
+ end;
+ If FileExists(DisplayPath+NowDocDir+'\Context.dat') Then
+ begin
+ ContextList.LoadFromFile(DisplayPath+NowDocDir+'\Context.dat');
+ view_image_DocNo(DisplayPath,NowDocDir,NowFormCode,Page);
+ //view_image_FormCode(DisplayPath,NowFormCode,1,1);
+ end;
+ if FileExists(DisplayPath+'CustomDocNo.dat') then
+ Cust_DocNoList.LoadFromFile(DisplayPath+'CustomDocNo.dat');
+ end;
+ MyTreeNode1.Expand(True);
+ AddAttFileLB.Enabled := True;
+ if FileExists(DisplayPath+'ATTContext.dat') then
+ begin
+ LoadAttFile(NowCaseno);
+ end;
+ end
+ Else //點在NewTreenode or MyTreenode1 上
+ begin
+ ClearView(1);
+ MyTreeNode1 := nil;
+ MyTreeNode2 := nil;
+ MyTreeNode3 := nil;
+ end;
+ TreeView1.Selected.MakeVisible;
+ CaseList.Clear;
+ if FileExists(ImageSavePath + 'CaseList.dat') then
+ CaseList.LoadFromFile(ImageSavePath + 'CaseList.dat');
+ //CountCaseno;
+ //CountCaseCount;
+ Application.ProcessMessages;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:TreeView1DragDrop
+ 引用相依:CopyFile, DeleteImageFile, LoadFromFile, ReSortFileName, RenameFile,
+ SaveToFile, _DelTree
+ 方法描述:處理樹狀結構的拖放操作,實現影像的快速歸類或跨案件移動。當使用者將影像
+ 縮圖拖至樹狀節點時,程序會判斷目標層級,執行實際的檔案搬移(Copy/Delete
+ )與更名,同步更新 Context.dat 索引檔案,並重新整理樹狀顯示與筆數統計。
+============================================================================== }
+procedure TCB_IMGPSScanX.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
+var
+ NewCaseno,NewDocNo,NewDocDir,NewFormCode,NewFormName : String;
+ NewPath,NewFileName:String;
+ OldFileName : String;
+ iTreeNode1,iTreeNode2,iTreeNode3: TTreeNode;
+ i,v,v1,v2 : Integer;
+ PreIndex,Precount,NowCount:Integer;
+ GoAtt : Boolean;
+ AttLv : Integer;
+begin
+ NewCaseno := '';
+ NewFormCode := '';
+ NewFormName := '';
+ Precount := MyTreeNode1.Count;
+ PreIndex := -1;
+ GoAtt := False;
+ if (MytreeNode2 <> nil) and (Pos('Attach',MyTreeNode2.Text)>0) then
+ begin
+ AttLv := TreeView1.Selected.Level;
+ GoAtt := True;
+ end;
+
+ if TTreeView(Sender).GetNodeAt(X,Y).Level =2 then
+ begin
+ iTreeNode2 := TTreeView(Sender).GetNodeAt(X,Y);
+ iTreeNode1 := iTreeNode2.Parent;
+ v := Pos('-',iTreenode1.Text);
+ v1 := Length(iTreenode1.Text);
+ NewCaseNo := Copy(iTreeNode1.Text,1,v-1);
+ v := Posend('{',iTreeNode2.Text);
+ v1 := Posend('}',iTreeNode2.Text);
+ NewDocNo := Copy(iTreeNode2.Text,v+1,v1-v-1);
+ NewPath := ImagePath+NewCaseNo+'\';
+ OldFileName := ExtractFileName(DisplayISB.FileName);
+ if Copy(NewDocNo,1,5) = 'ZZZZZ' then //自訂文件
+ begin
+ NewFileName := Add_Zoo(FileName2ScanPage(OldFileName),3)+'_'+NewDocNo+'0000000'+ExtractFileExt(OldFileName);
+ NewFormCode := NewDocNo+'0000000';
+ {ReNameFile(DisplayISB.FileName,NewPath+NewFileName);
+ ReNameContext(DisplayPath,OldFileName,NewFileName);
+ MyTreeNode2ReFresh(NowCaseno);
+ TreeView1Click(nil);}
+ end;
+ //NewFileName := Add_Zoo(GetCasePage(ImagePath,NewCaseno)+1,3)+FileName2NoQuene_Filename(OldFileName);
+ end
+ Else if TTreeView(Sender).GetNodeAt(X,Y).Level =3 then
+ begin
+ OldFileName := ExtractFileName(DisplayISB.FileName);
+ iTreeNode1 := TTreeView(Sender).GetNodeAt(X,Y).Parent.Parent;
+ iTreeNode2 := TTreeView(Sender).GetNodeAt(X,Y).Parent;
+ iTreeNode3 := TTreeView(Sender).GetNodeAt(X,Y);
+ v := Pos('-',iTreenode1.Text);
+ v1 := Length(iTreenode1.Text);
+ NewCaseNo := Copy(iTreeNode1.Text,1,v-1);
+ v := Pos('{',iTreeNode2.Text);
+ v1 := Pos('}',iTreeNode2.Text);
+ NewDocDir := Copy(iTreeNode2.Text,v+1,v1-v-1);
+
+ v := Pos('{',iTreeNode3.Text);
+ v1 := Pos('}',iTreeNode3.Text);
+ NewFormName := Copy(iTreeNode3.Text,1,v-1);
+ NewFormCode := Copy(iTreeNode3.Text,v+1,v1-v-1);
+ IF v = 0 Then
+ begin
+ NewFormCode := '';
+ v := Posend('-',iTreeNode3.Text);
+ NewFormName := Copy(iTreeNode3.Text,1,v1-1);
+ end;
+ NewPath := ImagePath+NewCaseNo+'\'+NewDocDir+'\';
+ if NewPath = DisplayPath Then //同案件
+ begin
+ if NewFormCode <> '' then
+ //NewFileName := Copy(OldFileName,1,3)+'_'+NewFormCode+ExtractFileExt(OldFileName)
+ NewFileName := Add_Zoo(GetDocDir_Page(NewCaseNo,NewDocDir),3)+'_'+NewFormCode+ExtractFileExt(OldFileName)
+ Else
+ //NewFileName := Copy(OldFileName,1,3)+ExtractFileExt(OldFileName)
+ NewFileName := Add_Zoo(GetDocDir_Page(NewCaseNo,NewDocDir),3)+ExtractFileExt(OldFileName);
+ end
+ else //不同案件
+ begin
+ if NewFormCode <> '' then
+ //NewFileName := Copy(OldFileName,1,3)+'_'+NewFormCode+ExtractFileExt(OldFileName)
+ NewFileName := Add_Zoo(GetDocDir_Page(NewCaseNo,NewDocDir),3)+'_'+NewFormCode+ExtractFileExt(OldFileName)
+ Else
+ //NewFileName := Copy(OldFileName,1,3)+ExtractFileExt(OldFileName)
+ NewFileName := Add_Zoo(GetDocDir_Page(NewCaseNo,NewDocDir),3)+ExtractFileExt(OldFileName);
+ end;
+ end;
+ //Showmessage('a');
+ for I := 0 to NowSelectFileList.Count - 1 do
+ begin
+ OldFileName := NowSelectFileList.Strings[i];
+ if NewFormCode <> '' then
+ //NewFileName := Copy(OldFileName,1,3)+'_'+NewFormCode+ExtractFileExt(OldFileName)
+ NewFileName := Add_Zoo(GetDocDir_Page(NewCaseNo,NewDocDir)+1,3)+'_'+NewFormCode+ExtractFileExt(OldFileName)
+ Else
+ //NewFileName := Copy(OldFileName,1,3)+ExtractFileExt(OldFileName)
+ NewFileName := Add_Zoo(GetDocDir_Page(NewCaseNo,NewDocDir)+1,3)+ExtractFileExt(OldFileName);
+
+ if NewCaseNo = NowCaseNo then //同案件不改順序
+ begin
+ CopyFile(PWideChar(OldFileName),PwideChar(NewPath+NewFileName),False);
+ SetContextList('A',-1,NewCaseNo,NewDocDir,NewFileName);
+ DeleteImageFile(ExtractFilePath(OldFileName),ExtractFileName(OldFileName),NowCaseNo);
+ TreeView1.Selected := MyTreeNode1;
+ //ReNameFile(DisplayPath + OldFileName,NewPath+NewFileName);
+ //ReNameContext(DisplayPath,OldFileName,NewFileName);
+ //MyTreeNode2ReFresh(NowCaseno);
+ //TreeView1Click(nil);
+ end
+ Else
+ begin
+ //Showmessage(DisplayMpsView.FileName+#13+NewPath+NewFileName);
+ ContextList.LoadFromFile(DisplayPath+'Context.dat');
+ if (ContextList.Count = 1) and ((FMode = 'NSCAN') or (FMode = 'ASCAN') or (FMode = 'DSCAN') or (FMode = 'SSCAN') or (FMode = 'MSCAN') or (FMode = 'RI_SCAN') or (FMode = 'ISCAN')) then
+ begin
+ if Messagedlg(Format(_Msg('移動後(%s)案件無影像,將刪除此案件,是否確定移動?'),[NowCaseno]),mtconfirmation,[mbyes,mbcancel],0) = mrCancel then Exit;
+ end;
+ CopyFile(PWideChar(DisplayISB.FileName),PWideChar(NewPath+NewFileName),False);
+ ContextList.LoadFromFile(NewPath+'Context.dat');
+ ContextList.Add(NewFileName);
+ ContextList.SaveToFile(NewPath+'Context.dat');
+ //Showmessage('1');
+ iTreeNode2.Text := Format(_Msg('%s-%d頁'),[NewCaseNo,GetCasePage(ImagePath,NewCaseNo)]);
+ //Showmessage('2');
+ //DrawDocItem(iTreeNode1,FORM_INF_List,NewCaseNo);
+ //DrawDocItem1(MytreeNode1,Doc_Inf_List,NewCaseno); 20140820改
+ DrawDocItem2(MytreeNode1,NewCaseno);
+ //Showmessage('3');
+ ClearErrini(NewCaseNo,iTreeNode1);
+ ContextList.LoadFromFile(DisplayPath+'Context.dat');
+ if (ContextList.Count = 1) and ((FMode = 'NSCAN') or (FMode = 'ASCAN') or (FMode = 'DSCAN') or (FMode = 'SSCAN') or (FMode = 'MSCAN') or (FMode = 'RI_SCAN') or (FMode = 'ISCAN')) then
+ begin
+ _DelTree(DisplayPath);
+ SetCaseList('D',MyTreeNode1.IndexOf(MyTreeNode2),'');
+ LoadImgFile;
+ end
+ Else
+ begin
+ ContextList.Delete(ContextList.IndexOf(ExtractFileName(DisplayISB.FileName)));
+ ContextList.SaveToFile(DisplayPath+'Context.dat');
+ DeleteFile(DisplayISB.FileName);
+ ReSortFileName(DisplayPath);
+ ClearErrini(NowCaseNo,MyTreeNode1);
+ MyTreeNode2ReFresh(NowCaseno);
+ //MyTreeNode3ReFresh(NowCaseno);
+ ContextList.LoadFromFile(DisplayPath+'Context.dat');
+ NowCount := MyTreeNode1.Count;
+ if PreCount = NowCount then
+ begin
+ TreeView1.Selected := MyTreeNode1.Item[PreIndex];
+ TreeView1Click(nil);
+ end
+ Else
+ begin
+ TreeView1.Selected := MyTreeNode1;
+ TreeView1Click(nil);
+ end;
+ end;
+ end;
+ end;
+ for I := 0 to NowSelectFileList.Count - 1 do
+ begin
+ OldFileName := NowSelectFileList.Strings[i];
+ ReSortFileName(ExtractFilePath(OldFileName));
+ end;
+ DrawDocItem2(MytreeNode1,NowCaseno);
+ ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
+ if GoAtt then
+ begin
+ GotoAttach(AttLv);
+ end;
+ //TreeView1Click(nil);
+
+end;
+
+
+{ ==============================================================================
+ 方法名稱:TreeView1DragOver
+ 引用相依:
+ 方法描述:判斷樹狀結構拖放操作的有效性。程序會檢核來源影像的表單代碼與目標節點
+ 的屬性,限制只能將影像拖入特定的表單層級(Level 3),且排除已存在的相同
+ 表單、附件目錄或未註冊的文件類型。
+============================================================================== }
+procedure TCB_IMGPSScanX.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
+ State: TDragState; var Accept: Boolean);
+var
+ NewNode : TTreeNode;
+ ImgFormCode : String;
+ ImgDocNo : String;
+ So : Boolean;
+begin
+ ImgFormCode := FileName2FormCode(ExtractFileName(DisplayISB.FileName));
+ ImgDocNo := Path2DocDir(ExtractFilePath(DisplayISB.FileName),NowCaseno);
+ //ImgDocNo := FileName2NowDcoNo(ExtractFileName(DisplayISB.FileName),ContextList,Context_DocnoList);
+ NewNode := TTreeView(Sender).GetNodeAt(X,Y);
+ //Label3.Caption := format('%d/%s/%s',[NewNode.Level,ImgDocNo,Node2DocNo(NewNode)]);
+ So := False;
+ if TObject(Source) is TImageScrollBox then
+ So := True;
+ Accept := True;
+ if not So
+ or(NewNode=nil)
+ or((NewNode.Level<>3))
+ or((NewNode.Level =3) and (((ImgFormCode=Node3FormID(NewNode)) and (ImgDocNo = Node3DocNo(NewNode))) or (Node3DocNo(NewNode)='')))
+ or(Pos(_Msg('Attach'),Newnode.Text)>0)
+ Then
+ Accept := False;
+
+ {if not So
+ or(NewNode=nil)
+ or((NewNode.Level <>2) and (NewNode.Level<>3))
+ or((NewNode.Level =2) and ((ImgDocNo = Node2DocNo(NewNode))or(Node2DocNo(NewNode)='')or (copy(Node2DocNo(NewNode),1,5)<>'ZZZZZ')))
+ or((NewNode.Level =3) and ((ImgFormCode=Node3FormID(NewNode)) or (ImgDocNo = Node3DocNo(NewNode)) or (Node3DocNo(NewNode)='')))
+ or(Pos(_Msg('未註冊文件'),Newnode.Text)>0)
+ Then
+ Accept := False;}
+end;
+
+
+{ ==============================================================================
+ 方法名稱:TreeView1KeyUp
+ 引用相依:
+ 方法描述:處理樹狀結構的按鍵放開事件。若有選取子節點,則觸發 TreeView1Click 重新
+ 載入影像顯示,否則清空視窗。
+============================================================================== }
+procedure TCB_IMGPSScanX.TreeView1KeyUp(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+begin
+ IF TreeView1.Selected.Parent <> nil Then
+ begin
+ TreeView1Click(nil);
+ end
+ else
+ begin
+ ClearView(1);
+ end;
+
+end;
+
+
+{ ==============================================================================
+ 方法名稱:TreeView1MouseDown
+ 引用相依:
+ 方法描述:處理樹狀結構滑鼠按下事件。若是右鍵按下,則自動選取該位置的節點以便後續
+ 彈出對應的開單選單。
+============================================================================== }
+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;
+
+
+{ ==============================================================================
+ 方法名稱:TreeView1MouseEnter
+ 引用相依:
+ 方法描述:當滑鼠進入樹狀結構區域時,自動將焦點(Focus)設定至 TreeView1。
+============================================================================== }
+procedure TCB_IMGPSScanX.TreeView1MouseEnter(Sender: TObject);
+begin
+TreeView1.SetFocus;
+end;
+
+
+{ ==============================================================================
+ 方法名稱:TreeView1MouseMove
+ 引用相依:
+ 方法描述:處理樹狀結構滑鼠移動事件,目前實作已註解相關代碼。
+============================================================================== }
+procedure TCB_IMGPSScanX.TreeView1MouseMove(Sender: TObject; Shift: TShiftState;
+ X, Y: Integer);
+begin
+ //TreeView1.SetFocus;
+ {UnRegisterHotKey(Handle, HotKeyId1);
+ UnRegisterHotKey(Handle, HotKeyId2); }
+end;
+
+
+{ ==============================================================================
+ 方法名稱:TreeView1MouseUp
+ 引用相依:
+ 方法描述:處理樹狀結構滑鼠放開事件。若為右鍵點擊且有選取節點,則觸發 TreeView1Cl
+ ick 並彈出與節點層級對應的右鍵選單。
+============================================================================== }
+procedure TCB_IMGPSScanX.TreeView1MouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+begin
+ IF Button = TMouseButton(MbRight) Then
+ begin
+ If TreeView1.GetNodeAt(X,Y) = nil then Exit;
+ if MDown then
+ begin
+ TreeView1Click(self);
+ TreeView1.PopupMenu.Popup(Mouse.CursorPos.X ,Mouse.CursorPos.Y);
+ end;
+ Application.ProcessMessages; //需加這行,不然有些全域變數會沒變到
+ MDown:= False;
+ end;
+end;
+
+
--
Gitblit v1.8.0