⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uopenfrm.pas

📁 一个基于不需引擎的文件管理系统,使用了许多界面比较好的控件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -