{ ============================================================================== 方法名稱: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;