📄 uopenfrm.pas
字号:
unit uOpenfrm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
ExtCtrls, ComCtrls, TB2ToolWindow, TB2Dock, TB2Toolbar, TBX, TB2ExtItems,
TBXExtItems, TB2Item, SpTBXItem, TBXDkPanels, StdCtrls, ActnList, Dialogs,
ImgList, uIHintInf, uDllfrmList;
type
TfrmOpenDlg = class(TForm)
Panel3: TPanel;
Panel4: TPanel;
TBXDock1: TTBXDock;
TBXToolbar1: TTBXToolbar;
lvNodes: TListView;
TBToolWindow1: TTBXToolWindow;
TBXToolbar2: TTBXToolbar;
SpTBXLabelItem1: TSpTBXLabelItem;
edFileName: TTBXEditItem;
cbReadOnly: TTBXCheckBox;
btnOK: TTBXButton;
btnCancel: TTBXButton;
ActionList1: TActionList;
Action1: TAction;
ImageList1: TImageList;
SpTBXItem1: TSpTBXItem;
Action2: TAction;
TBXToolWindow1: TTBXToolWindow;
SpTBXItem2: TSpTBXItem;
SpTBXSubmenuItem1: TSpTBXSubmenuItem;
SpTBXSeparatorItem1: TSpTBXSeparatorItem;
SpTBXSubmenuItem2: TSpTBXSubmenuItem;
SpTBXItem3: TSpTBXItem;
SpTBXItem4: TSpTBXItem;
SpTBXItem5: TSpTBXItem;
SpTBXItem6: TSpTBXItem;
SpTBXItem7: TSpTBXItem;
SpTBXItem8: TSpTBXItem;
Panel1: TPanel;
TBXToolWindow2: TTBXToolWindow;
TBXToolbar3: TTBXToolbar;
lbPath: TSpTBXLabelItem;
TBXToolWindow3: TTBXToolWindow;
SpTBXSeparatorItem2: TSpTBXSeparatorItem;
lbDir: TSpTBXLabelItem;
TBXDock2: TTBXDock;
dpFolder: TTBXDockablePanel;
SpTBXItem9: TSpTBXItem;
tvNodes: TTreeView;
TBXToolWindow4: TTBXToolWindow;
SpTBXSeparatorItem3: TSpTBXSeparatorItem;
procedure tvNodesChange(Sender: TObject; Node: TTreeNode);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btnOKClick(Sender: TObject);
procedure lvNodesChange(Sender: TObject; Item: TListItem;
Change: TItemChange);
procedure btnCancelClick(Sender: TObject);
procedure SpTBXItem1Click(Sender: TObject);
procedure SpTBXItem8Click(Sender: TObject);
procedure SpTBXSubmenuItem2Click(Sender: TObject);
procedure SpTBXItem3Click(Sender: TObject);
procedure SpTBXItem4Click(Sender: TObject);
procedure SpTBXItem2Click(Sender: TObject);
procedure SpTBXSubmenuItem1Popup(Sender: TTBCustomItem;
FromLink: Boolean);
procedure lvNodesResize(Sender: TObject);
procedure SpTBXItem9Click(Sender: TObject);
procedure lvNodesEdited(Sender: TObject; Item: TListItem;
var S: String);
procedure Action1Execute(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure tvNodesCompare(Sender: TObject; Node1, Node2: TTreeNode;
Data: Integer; var Compare: Integer);
procedure lvNodesCompare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
procedure lvNodesColumnClick(Sender: TObject; Column: TListColumn);
private
FID: integer;
FParentID: integer;
FPro:integer;
FFileName:string;
SelectItem:pointer;
UpNode:TTreeNode;
FOpenReadOnly: Boolean;
FOpenModel: Boolean;
IsAscending:Boolean;
{ Private declarations }
procedure ExpendNode(ANode:TTreeNode);
procedure AddNodes(ID:integer;Parent:TTreeNode;OnlyInListView:Boolean);
procedure DoAfterAdd(ANode:TTreeNode;IsFile:byte;OnlyInListView:Boolean);
procedure SetOpenReadOnly(const Value: Boolean);
procedure SetOpenModel(const Value: Boolean);
public
{ Public declarations }
procedure Init;
procedure Open;
property ID:integer read FID;
property ParentID:integer read FParentID;
property Pro:integer read FPro;
property FileName:string read FFileName;
property OpenReadOnly:Boolean read FOpenReadOnly write SetOpenReadOnly;
property OpenModel:Boolean read FOpenModel write SetOpenModel;
end;
implementation
uses uSECData, uMain;
type
TFolderNode=record
ID:integer;
UpID:integer;
Text:string;
Locked:byte;
IsFile:byte;
Pro:integer;
Expended:Boolean;
CreateData:TDatetime;
end;
PFolderNode=^TFolderNode;
{$R *.dfm}
{ TfrmOpenDlg }
procedure TfrmOpenDlg.AddNodes(ID: integer;Parent:TTreeNode;OnlyInListView:Boolean);
var
FolderNode:PFolderNode;
Node:TTreeNode;
Item:TListItem;
begin
SecData.qryTmp.Close;
SecData.qryTmp.SQL.Clear;
SecData.qryTmp.SQL.Text:='select ID,UpID,Locked,IsFile,Pro,Text,CreateDate from Folders'+#13+
' where UpID=:ID';
SecData.qryTmp.Params[0].AsInteger:=ID;
SecData.qryTmp.Open;
tvNodes.OnChange:=nil;
lvNodes.OnChange:=nil;
try
while not SecData.qryTmp.Eof do
begin
New(FolderNode);
FolderNode^.ID:=SecData.qryTmp.FieldbyName('ID').AsInteger;
FolderNode^.UpID:=SecData.qryTmp.FieldbyName('UPID').AsInteger;
FolderNode^.Text:=SecData.qryTmp.FieldbyName('Text').AsString;
FolderNode^.Locked:=SecData.qryTmp.FieldbyName('Locked').AsInteger;
FolderNode^.IsFile:=SecData.qryTmp.FieldbyName('IsFile').AsInteger;
FolderNode^.Pro:=SecData.qryTmp.FieldbyName('Pro').AsInteger;
FolderNode^.Expended:=false;
FolderNode^.CreateData:=SecData.qryTmp.FieldByName('CreateDate').AsDateTime;
if FolderNode^.IsFile=0 then
begin
if not OnlyInListView then
if (Parent=nil) or (not PFolderNode(Parent.Data)^.Expended) then
begin
Node:=tvNodes.Items.AddChild(Parent,SecData.qryTmp.FieldbyName('Text').AsString);
with Node do
begin
StateIndex:=FolderNode^.ID;
ImageIndex:=FolderNode^.Locked;
SelectedIndex:=FolderNode^.Locked;
Data:=FolderNode;
end;
end;
end;
Item:=lvNodes.Items.Add;
Item.Caption:=FolderNode^.Text;
Item.SubItems.Add(DateTimeToStr(FolderNode^.CreateData));
Item.ImageIndex:=FolderNode^.Locked+2*FolderNode^.IsFile;
Item.Data:=FolderNode;
SecData.qryTmp.Next;
end;
finally
tvNodes.OnChange:=tvNodesChange;
lvNodes.OnChange:=lvNodesChange;
end;
end;
procedure TfrmOpenDlg.ExpendNode(ANode: TTreeNode);
var
s:string;
begin
FID:=-1;
SelectItem:=nil;
FParentID:=-1;
FPro:=-1;
lvNodes.Clear;
if ANode<>nil then
begin
s:=ANode.Text;
if PFolderNode(ANode.Data)^.Locked=0 then
begin
UpNode:=ANode.Parent;
AddNodes(ANode.StateIndex,ANode,false);
PFolderNode(ANode.Data)^.Expended:=true;
lbDir.Caption:='当前文件夹:'+ANode.Text;
end;
end
else
begin
UpNode:=nil;
AddNodes(-1,nil,true);
end;
tvNodes.OnChange:=nil;
lvNodes.OnChange:=nil;
try
lvNodes.AlphaSort;
tvNodes.AlphaSort(true);
if ANode<>nil then
begin
if tvNodes.CanFocus then
tvNodes.SetFocus;
end
else
begin
if lvNodes.CanFocus then
lvNodes.SetFocus;
end;
tvNodes.Selected:=ANode;
finally
tvNodes.OnChange:=tvNodesChange;
lvNodes.OnChange:=lvNodesChange;
end;
end;
procedure TfrmOpenDlg.Init;
begin
FID:=-1;
FParentID:=-1;
FPro:=-1;
AddNodes(-1,nil,false);
SpTBXItem8Click(SpTBXItem8);
tvNodes.AlphaSort(true);
lvNodes.AlphaSort;
end;
procedure TfrmOpenDlg.tvNodesChange(Sender: TObject; Node: TTreeNode);
begin
ExpendNode(Node);
end;
procedure TfrmOpenDlg.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=cafree;
end;
procedure TfrmOpenDlg.btnOKClick(Sender: TObject);
begin
btnOK.SetFocus;
Open;
end;
procedure TfrmOpenDlg.lvNodesChange(Sender: TObject; Item: TListItem;
Change: TItemChange);
var
FNode:TTreeNode;
begin
if lvNodes.Selected<>nil then
begin
edFileName.Text:=lvNodes.Selected.Caption;
FNode:=mainfrm.OprList.FindNode(FID);
if FNode<>nil then
begin
mainfrm.OprList.FolderProperty.Node:=FNode;
lbPath.Caption:='路径:'+mainfrm.OprList.FolderProperty.Path;
end;
end;
end;
procedure TfrmOpenDlg.btnCancelClick(Sender: TObject);
begin
ModalResult:=mrCancel;
end;
procedure TfrmOpenDlg.SpTBXItem1Click(Sender: TObject);
begin
if UpNode<>nil then
begin
if tvNodes.CanFocus then
tvNodes.SetFocus;
tvNodes.OnChange:=nil;
tvNodes.Selected:=UpNode;
tvNodes.OnChange:=tvNodesChange;
end
else
begin
if lvNodes.CanFocus then
lvNodes.SetFocus;
tvNodes.Selected:=UpNode;
end;
ExpendNode(UpNode);
end;
procedure TfrmOpenDlg.SpTBXItem8Click(Sender: TObject);
begin
case TSpTBXItem(sender).Tag of
1:lvNodes.ViewStyle:=vsIcon;
2:lvNodes.ViewStyle:=vsSmallIcon;
3:lvNodes.ViewStyle:=vsList;
4:lvNodes.ViewStyle:=vsReport;
end;
TSpTBXItem(sender).Checked:=true;
end;
procedure TfrmOpenDlg.SpTBXSubmenuItem2Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to SpTBXSubmenuItem2.Count-1 do
if SpTBXSubmenuItem2.Items[i].Checked then
begin
if i<SpTBXSubmenuItem2.Count-1 then
SpTBXItem8Click(SpTBXSubmenuItem2.Items[i+1])
else
SpTBXItem8Click(SpTBXSubmenuItem2.Items[0]);
break;
end;
end;
procedure TfrmOpenDlg.SpTBXItem3Click(Sender: TObject);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -