{ ==============================================================================
|
方法名稱:DrawDocItem2
|
引用相依:FileExists, LoadFromFile, DirectoryExists
|
方法描述:在樹狀結構中繪製指定案件的文件與表單節點。讀取 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
|
引用相依:RenameFile, CopyFile, DeleteImageFile, LoadFromFile, SaveToFile, _De
|
lTree, ReSortFileName
|
方法描述:處理樹狀結構的拖放操作,實現影像的快速歸類或跨案件移動。當使用者將影像
|
縮圖拖至樹狀節點時,程序會判斷目標層級,執行實際的檔案搬移(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;
|