📄 uopenfrm.pas
字号:
var
FNode:TTreeNode;
begin
if tvNodes.Selected<>nil then
begin
FNode:=mainfrm.OprList.AddNode(tvNodes.Selected.StateIndex ,0);
DoAfterAdd(FNode,0,false);
tvNodes.Selected.Expand(false);
mainfrm.RefreshItemInDllfrm(integer(fmFolder),'',false,tvNodes.Selected.StateIndex,-1);
end
else
begin
FNode:=mainfrm.OprList.AddNode(-1,0);
DoAfterAdd(FNode,0,false);
end;
end;
procedure TfrmOpenDlg.SpTBXItem4Click(Sender: TObject);
var
FNode:TTreeNode;
begin
if tvNodes.Selected<>nil then
begin
FNode:=mainfrm.OprList.AddNode(tvNodes.Selected.StateIndex,1);
DoAfterAdd(FNode,1,true);
mainfrm.RefreshItemInDllfrm(integer(fmFolder),'',false,tvNodes.Selected.StateIndex,-1);
end
else
begin
MessageBox(Handle, '请选择要创建的目录。', '提示', MB_ICONINFORMATION);
end;
end;
procedure TfrmOpenDlg.SpTBXItem2Click(Sender: TObject);
var
msgText:string;
begin
if (lvNodes.Selected<>nil) then
begin
msgText:='确实要把这“'+lvNodes.Selected.Caption+'”项删除吗?';
if MessageBox(0, pchar(msgText), '提示', MB_ICONASTERISK or MB_OKCANCEL) <> IDOK then
exit;
if mainfrm.OprList.DelNode(PFolderNode(lvNodes.Selected.Data)^.ID,fmFolder) then
begin
tvNodes.Selected.DeleteChildren;
PFolderNode(tvNodes.Selected.Data)^.Expended:=false;
ExpendNode(tvNodes.Selected);
if tvNodes.Selected<>nil then
mainfrm.RefreshItemInDllfrm(integer(fmFolder),'',false,tvNodes.Selected.StateIndex,-1);
end;
end;
end;
procedure TfrmOpenDlg.DoAfterAdd(ANode: TTreeNode;IsFile:byte;OnlyInListView:Boolean);
var
FolderNode:PFolderNode;
Item:TListItem;
begin
if ANode=nil then
exit;
tvNodes.OnChange:=nil;
lvNodes.OnChange:=nil;
New(FolderNode);
FolderNode^.ID:=ANode.StateIndex;
if tvNodes.Selected<>nil then
FolderNode^.UpID:=tvNodes.Selected.StateIndex
else
FolderNode^.UpID:=-1;
FolderNode^.Text:=ANode.Text;
FolderNode^.Locked:=0;
FolderNode^.Pro:=0;
FolderNode^.Expended:=false;
FolderNode^.CreateData:=Now;
FolderNode^.IsFile:=IsFile;
if not OnlyInListView then
begin
with tvNodes.Items.AddChild(tvNodes.Selected,ANode.Text) do
begin
ImageIndex:=ANode.ImageIndex;
SelectedIndex:=ANode.SelectedIndex;
StateIndex:=ANode.StateIndex;
Data:=FolderNode;
end;
end;
Item:=lvNodes.Items.Add;
Item.Caption:=FolderNode^.Text;
Item.SubItems.Add(DateTimeToStr(FolderNode^.CreateData));
Item.ImageIndex:=2*FolderNode^.IsFile;
Item.Data:=FolderNode;
Item.EditCaption;
tvNodes.OnChange:=tvNodesChange;
lvNodes.OnChange:=lvNodesChange;
end;
procedure TfrmOpenDlg.SpTBXSubmenuItem1Popup(Sender: TTBCustomItem;
FromLink: Boolean);
begin
SpTBXItem4.Enabled:=tvNodes.Selected<>nil;
end;
procedure TfrmOpenDlg.lvNodesResize(Sender: TObject);
begin
lvNodes.Invalidate;
end;
procedure TfrmOpenDlg.SpTBXItem9Click(Sender: TObject);
begin
dpFolder.Visible:=not dpFolder.Visible;
SpTBXItem9.Checked:=not SpTBXItem9.Checked;
end;
procedure TfrmOpenDlg.SetOpenReadOnly(const Value: Boolean);
begin
FOpenReadOnly := Value;
end;
procedure TfrmOpenDlg.lvNodesEdited(Sender: TObject; Item: TListItem;
var S: String);
var
i:integer;
begin
mainfrm.OprList.FolderProperty.FindNodeByID(PFolderNode(Item.Data)^.ID);
if mainfrm.ReNameNode(mainfrm.OprList.FolderProperty.Node,s) then
begin
mainfrm.OprList.FolderProperty.Node.Text:=s;
for i:=0 to tvNodes.Items.Count-1 do
begin
if tvNodes.Items[i].StateIndex=PFolderNode(Item.Data)^.ID then
begin
tvNodes.Items[i].Text:=s;
break;
end;
end;
end;
end;
procedure TfrmOpenDlg.Action1Execute(Sender: TObject);
begin
if not lvNodes.IsEditing then
begin
Open;
end
else
lvNodes.ItemFocused.CancelEdit;
end;
procedure TfrmOpenDlg.Open;
var
i:integer;
IsUse:Boolean;
begin
if tvNodes.Selected<>nil then
begin
FParentID:=tvNodes.Selected.StateIndex;
FPro:=PFolderNode(tvNodes.Selected.Data)^.Pro+1;
end
else
begin
FParentID:=-1;
FPro:=-1;
end;
for i:=0 to lvNodes.Items.Count-1 do
begin
if edFileName.Text=lvNodes.Items[i].Caption then
begin
FID:=PFolderNode(lvNodes.Items[i].data)^.ID;
SelectItem:=lvNodes.Items[i].data;
FFileName:=PFolderNode(SelectItem)^.Text;
break;
end
else
begin
FID:=-1;
SelectItem:=nil;
end;
end;
IsUse:=not FOpenModel;
if FID<>-1 then
begin
if PFolderNode(SelectItem)^.IsFile=1 then
begin
if not FOpenModel then
begin
if MessageBox(0, pchar('确实要覆盖文件“'+FFileName+'”?'), '提示', MB_ICONASTERISK or MB_OKCANCEL) <> IDOK then
exit;
if PFolderNode(SelectItem)^.Locked=1 then
begin
MessageBox(0, pchar('“'+FFileName+'”文件已加密,不能覆盖。'), '提示', MB_ICONINFORMATION or MB_OK);
exit;
end;
for i:=0 to Application.MainForm.MDIChildCount-1 do
begin
if (TDllfrm(Application.MainForm.MDIChildren[i]).ID=FID) then
begin
IsUse:=true;
MessageBox(0, pchar('“'+FFileName+'”文件正在使用,不能覆盖。'), '提示', MB_ICONINFORMATION or MB_OK);
break;
end
else
IsUse:=false;
end;
end;
if (not IsUse) and (edFileName.Text<>'') then
begin
FOpenReadOnly:=cbReadOnly.Checked;
ModalResult:=mrok;
end;
end
else
begin
for i:=0 to tvNodes.Items.Count-1 do
if FID=tvNodes.Items[i].StateIndex then
begin
edFileName.Clear;
ExpendNode(tvNodes.Items[i]);
break;
end;
end;
end
else
begin
if (not FOpenModel) and (FParentID<>-1) then
begin
FFileName:=edFileName.Text;
if FFileName<>'' then
ModalResult:=mrok;
end;
end;
end;
procedure TfrmOpenDlg.SetOpenModel(const Value: Boolean);
begin
if value then
begin
Caption:='打开';
BtnOk.Caption:='打开';
end
else
begin
Caption:='另存为';
BtnOk.Caption:='保存';
end;
FOpenModel := Value;
end;
procedure TfrmOpenDlg.FormShow(Sender: TObject);
begin
IsAscending:=true;
cbReadOnly.Visible:=FOpenModel;
end;
procedure TfrmOpenDlg.tvNodesCompare(Sender: TObject; Node1,
Node2: TTreeNode; Data: Integer; var Compare: Integer);
begin
if Node1.ImageIndex=Node2.ImageIndex then
Compare:=CompareStr(Node1.Text,Node2.Text)
else if Node1.ImageIndex>Node2.ImageIndex then
Compare:=1
else if Node1.ImageIndex<Node2.ImageIndex then
Compare:=-1
end;
procedure TfrmOpenDlg.lvNodesCompare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer);
var
s1,s2:string;
begin
if Data=0 then
begin
s1:=Item1.Caption;
s2:=Item2.Caption;
end
else
begin
s1:=Item1.SubItems.Strings[Data-1];
s2:=Item2.SubItems.Strings[Data-1];
end;
if IsAscending then
begin
if (Data=0) then
begin
if Item1.ImageIndex>Item2.ImageIndex then
Compare:=1
else if Item1.ImageIndex<Item2.ImageIndex then
Compare:=-1
else
Compare:=CompareText(s1,s2);
end
else
Compare:=CompareText(s1,s2);
end
else
begin
if (Data=0) then
begin
if Item1.ImageIndex>Item2.ImageIndex then
Compare:=-1
else if Item1.ImageIndex<Item2.ImageIndex then
Compare:=1
else
Compare:=CompareText(s2,s1);
end
else
Compare:=CompareText(s2,s1);
end;
end;
procedure TfrmOpenDlg.lvNodesColumnClick(Sender: TObject;
Column: TListColumn);
begin
IsAscending:=not IsAscending;
lvNodes.CustomSort(nil,Column.Index);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -