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

📄 umain.pas

📁 一个基于不需引擎的文件管理系统,使用了许多界面比较好的控件
💻 PAS
📖 第 1 页 / 共 4 页
字号:
    CreateFolderTree(Node);
end;

procedure Tmainfrm.FolderTreeEdited(Sender: TObject; Node: TTreeNode;
  var S: String);
begin
  ReNameNode(Node,s)
end;

procedure Tmainfrm.SpTBXItem48Click(Sender: TObject);
begin
  OprList.FolderProperty.Node:=FolderTree.Selected;
  if not OprList.FolderProperty.IsLocked then
  begin
    FolderTree.Selected.EditText;
  end
  else
    MessageBox(mainfrm.Handle,pchar('有文件已加密,你不能更改文件名。请先解密!'), '提示', MB_ICONASTERISK or MB_OK);
end;

procedure Tmainfrm.FolderTreeMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  FNode:TTreeNode;
  FPoint:TPoint;
begin
  FNode:=FolderTree.GetNodeAt(X,Y);
  if Button=mbRight then
  begin
    if FNode<>nil then
    begin
      FolderTree.Selected:=FNode;
      OprList.FolderProperty.Node:=FNode;
    end;
    FPoint.X:=X;
    FPoint.Y:=Y;
    FPoint:=FolderTree.ClientToScreen(FPoint);
    RefreshNEWMenu;
    TBXPopupMenu2.Popup(FPoint.X,FPoint.Y);
  end;
end;

procedure Tmainfrm.RefreshNEWMenu;
begin
  if FolderTree.Selected<>nil then
  begin
    OprList.FolderProperty.Node:=FolderTree.Selected;
    NEW1.Enabled:=OprList.FolderProperty.IsFile=0;
    NEW2.Enabled:=OprList.FolderProperty.IsFile=0;
    New4.Enabled:=FolderTree.Selected.Parent<>nil; 
  end
  else
  begin
    New1.Enabled:=false;
    NEW2.Enabled:=false;
    New4.Enabled:=false;
  end;
end;

procedure Tmainfrm.RefreshTree;
begin
  FolderTree.Items.Clear;
  SECData.qryTree.Open;
  if SECData.qryTree.RecordCount <>0 then
    CreateFolderTree(nil);
  SECData.qryTree.Close;
  FolderTree.AlphaSort(true);  
end;

procedure Tmainfrm.SpTBXItem50Click(Sender: TObject);
begin
  RefreshTree;
end;

procedure Tmainfrm.imDelNodeClick(Sender: TObject);
var
  index,parentindex:integer;
  msgText:string;
  ACaption:string;
begin
  msgText:='确实要把文件“'+FolderTree.Selected.Text+'”删除吗?';
  oprList.FolderProperty.Node:=FolderTree.Selected;
  if oprList.FolderProperty.IsFile=0 then
    msgText:='确实要把文件夹“'+FolderTree.Selected.Text+'”以及所有内容删除吗?';

  if MessageBox(0, pchar(msgText), '提示', MB_ICONASTERISK or MB_OKCANCEL) = IDOK then
  begin
    index:=FolderTree.Selected.StateIndex;
    ACaption:=FolderTree.Selected.Text;
    if FolderTree.Selected.Parent<>nil then
      parentindex:=FolderTree.Selected.Parent.StateIndex
    else
      parentindex:=-1;

    OprList.FolderProperty.DelFolder(FolderTree.Selected);
    mainfrm.RefreshItemInDllfrm(integer(fmFolder),Pchar(ACaption),true,index,parentindex);
  end
  else
  begin
    if FolderTree.CanFocus then
      FolderTree.SetFocus;
    exit;
  end;
end;

procedure Tmainfrm.NEW2Click(Sender: TObject);
var
  FNode:TTreeNode;
begin
  FNode:=AddNode(1,true);
  if FNode=nil then
    exit;
  if FNode.Parent<>nil then
    RefreshItemInDllfrm(integer(fmFolder),'',false,FNode.StateIndex,FNode.Parent.StateIndex)
  //else
    //RefreshItemInDllfrm(integer(fmFolder),'',false,FNode.StateIndex,-1);
end;

procedure Tmainfrm.NEW1Click(Sender: TObject);
var
  FNode:TTreeNode;
begin
  FNode:=AddNode(0,true);
  if FNode=nil then
    exit;
  if FNode.Parent<>nil then
    RefreshItemInDllfrm(integer(fmFolder),'',false,FNode.StateIndex,FNode.Parent.StateIndex)
  //else
    //RefreshItemInDllfrm(integer(fmFolder),'',false,FNode.StateIndex,-1);
end;

function Tmainfrm.AddNode(IsFile: byte;IsChild:Boolean):TTreeNode;
var
  ID,UPID:integer;
  FNode:TTreeNode;
  FolderName:string;
  Level:integer;
begin
  FNode:=FolderTree.Selected;
  result:=FNode;
  ID:=OprList.GetMaxID('Folders');
  UPID:=-1;
  Level:=0;
  if (FNode<>nil) and (not IsChild) then
  begin
    if FNode.Parent<>nil then
    begin
      UPID:=FNode.Parent.StateIndex;
      Level:=FNode.Level;
    end;
  end
  else if (FNode<>nil) and (IsChild) then
  begin
    UPID:=FNode.StateIndex;
    Level:=FNode.Level+1;
  end
  else if (FNode=nil) and (IsChild) then
    exit;
  if not Ischild then
  begin
    if FNode=nil then
      FolderName:=OprList.FolderProperty.SetFolderName(nil,IsFile)
    else
      FolderName:=OprList.FolderProperty.SetFolderName(FNode.Parent,IsFile)
  end
  else
    FolderName:=OprList.FolderProperty.SetFolderName(FNode,IsFile);
  SECData.InsTree.ParamByName('ID').AsInteger :=ID;
  SECData.InsTree.ParamByName('UPID').AsInteger :=UPID;
  SECData.InsTree.ParamByName('Text').AsString :=FolderName;
  SECData.InsTree.ParamByName('CreateDate').AsDateTime :=Now;
  SECData.InsTree.ParamByName('Pro').AsInteger:=Level;
  SECData.InsTree.ParamByName('IsFile').AsInteger:=IsFile;
  SECData.InsTree.ExecSQL;
  if (FNode<>nil) and (IsChild) then
  begin
    FNode:=FolderTree.Items.AddChild(FNode,FolderName);
    FNode.StateIndex:=ID;
    FNode.ImageIndex:=2*IsFile;
    FNode.SelectedIndex:=2*IsFile;
    FolderTree.Selected:=FNode;
    FNode.EditText;
  end
  else if not IsChild then
  begin
    FNode:=FolderTree.Items.Add(FNode,FolderName);
    FNode.StateIndex:=ID;
    FNode.ImageIndex:=2*IsFile;
    FNode.SelectedIndex:=2*IsFile;
    FolderTree.Selected:=FNode;
    FNode.EditText;
  end;
  result:=FNode;
end;

function Tmainfrm.DeleteNodeSQL:String;
var
  i:integer;
  s,s1:string;
begin
  s1:='select ID from folders where ID=:ID or UPID=:ID';
  s:='select ID from folders where ID=:ID or UPID=:ID';

  for i:=0 to 0 do
    s:=s1+' or UPID in ('+s+')';

  for i:=1 to 9 do
  begin
    s[1]:='D';s[2]:='e';s[3]:='l';s[4]:='e';s[5]:='t';s[6]:='e';
    s[7]:=' ';s[8]:=' ';s[9]:=' ';
  end;
  Result:=s+#13+'Order by ID DESC';
end;

function Tmainfrm.CheckName(Level: integer;AName:string): Boolean;
var
  i,NodeCount:integer;
  FNode:TTreeNode;
begin
  result:=false;
  FNode:=OprList.FolderProperty.Node.Parent;   //FolderTree.Selected.Parent;
  if FNode<>nil then
    NodeCount:=FNode.Count-1
  else
    NodeCount:=FolderTree.Items.Count-1;

  for i:=0 to NodeCount do
    if FNode<>nil then
    begin
      if FNode.Item[i].Level=Level then
        if AName=FNode.Item[i].Text then
        begin
          result:=true;
          break;
        end;
    end
    else
    begin
      if FolderTree.Items.Item[i].Level=Level then
        if AName=FolderTree.Items[i].Text then
        begin
          result:=true;
          break;
        end;
    end;
end;

procedure Tmainfrm.FolderTreeKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key=VK_Delete) and (not folderTree.IsEditing) then
    imDelNodeClick(nil);
end;

procedure Tmainfrm.SpTBXItem51Click(Sender: TObject);
begin
  TheOprList.Createfrm(nil,cdEdit,fmFolder);
  OprList.FolderProperty.Node:=folderTree.Selected;
  folderTree.Refresh;
  //if FolderTree.Selected.Parent<>nil then
    //RefreshItemInDllfrm(integer(fmFolder),'',false,-1,FolderTree.Selected.Parent.StateIndex);
end;

procedure Tmainfrm.myException(Sender: TObject; E: Exception);
var
  i:byte;
begin
  randomize;
  i:=random(4);
  CreateMsg('有老鼠,被抓住啦!',e.Message,i);
end;

procedure Tmainfrm.CreateMsg(Title,Msg: string;Idx:integer);
var
  ShowException:TShowException;
  DllHandle:THandle;
begin
  DllHandle:=LoadLibrary('Secfrm.dll');
  try
    if DllHandle<>0 then
    begin
      @ShowException:=GetProcAddress(DllHandle,'ShowException');
      if @ShowException<>nil then
        ShowException(Application,Screen,Pchar(Msg),Pchar(Title),Idx,CurrentTheme);
    end;
  finally
    FreeLibrary(DllHandle);
  end;
end;

procedure Tmainfrm.TBXPopupMenu2Popup(Sender: TObject);
var
  i,j:integer;
  PlugName:widestring;
  ItemHeight,ItemWidth:integer;
begin
  Screen.Cursor:=crHourGlass;
  try
    imDelNode.Enabled:=FolderTree.Selected<>nil;
    SpTBXItem54.Enabled:=FolderTree.Selected<>nil;
    SpTBXItem52.Enabled:=FolderTree.Selected<>nil;
    SpTBXItem53.Enabled:=FolderTree.Selected<>nil;
    SpTBXItem48.Enabled:=FolderTree.Selected<>nil;
    SpTBXItem51.Enabled:=FolderTree.Selected<>nil;

    if FolderTree.Selected<>nil then
    begin
      OprList.FolderProperty.Node:=FolderTree.Selected;
      SpTBXItem52.Enabled :=not OprList.FolderProperty.IsLocked;
      SpTBXItem53.Enabled :=OprList.FolderProperty.IsLocked;
      SpTBXSubmenuItem5.Enabled :=(not OprList.FolderProperty.IsLocked) or (OprList.FolderProperty.IsFile=1);
      imDelNode.Enabled :=not OprList.FolderProperty.IsLocked;
    end;

    if FolderTree.Selected=nil then
    begin
      if OprList.PlugInManager.FPlugs<>nil then
      begin
        for i:=0 to OprList.PlugInManager.FPlugs.Count-1 do
        begin
          if ISecPlug(OprList.PlugInManager.FPlugs[i]).DrawMenu then
            for j:=0 to TBXPopupMenu2.Items.Count-1 do
            begin
              if TBXPopupMenu2.Items[j].Name=ISecPlug(OprList.PlugInManager.FPlugs[i]).Name+'_D' then
                TSpTBXItem(TBXPopupMenu2.Items[j]).Visible:=false;
            end;
        end;
      end;
    end
    else
    begin
      if OprList.PlugInManager.FPlugs<>nil then
      begin
        for i:=0 to OprList.PlugInManager.FPlugs.Count-1 do
        begin
          if not ISecPlug(OprList.PlugInManager.FPlugs[i]).DisplayInMenu then
            continue;
          if ISecPlug(OprList.PlugInManager.FPlugs[i]).PlugType=ptMain then
          begin
            ISecPlug(OprList.PlugInManager.FPlugs[i]).MenuPopup(VarArrayOf([' ']),PlugName,ItemHeight,ItemWidth);
            if ISecPlug(OprList.PlugInManager.FPlugs[i]).DrawMenu then
              for j:=0 to TBXPopupMenu2.Items.Count-1 do
              begin
                if TBXPopupMenu2.Items[j].Name=PlugName+'_D' then
                begin
                  TSpTBXItem(TBXPopupMenu2.Items[j]).Visible:=true;
                  TSpTBXItem(TBXPopupMenu2.Items[j]).MinHeight:=ItemHeight;
                  TSpTBXItem(TBXPopupMenu2.Items[j]).MinWidth:=ItemWidth;
                end;
              end;
          end;
        end;
      end;
    end;
  finally
    Screen.Cursor:=crDefault;
  end;
end;

procedure Tmainfrm.FolderTreeExpanding(Sender: TObject; Node: TTreeNode;
  var AllowExpansion: Boolean);
var
  i:integer;
begin
  OprList.FolderProperty.Node:=Node;
  for i:=0 to MDIChildCount-1 do
  begin
    if Node.StateIndex=TDllfrm(MDIChildren[i]).ID then
      exit;
  end;
  if OprList.FolderProperty.IsLocked then
  begin
    AllowExpansion:=OprList.FolderProperty.EnterFolder;
  end;
end;

procedure Tmainfrm.SpTBXItem52Click(Sender: TObject);
begin
  OprList.FolderProperty.Node:=FolderTree.Selected;
  OprList.FolderProperty.LockedFolder;
  folderTree.Refresh;
  if FolderTree.Selected.Parent<>nil then
    RefreshItemInDllfrm(integer(fmFolder),'',false,-1,FolderTree.Selected.Parent.StateIndex);
end;

procedure Tmainfrm.SpTBXItem53Click(Sender: TObject);
begin
  OprList.FolderProperty.Node:=FolderTree.Selected;
  OprList.FolderProperty.UnLockedFolder;
  folderTree.Refresh;
  if FolderTree.Selected.Parent<>nil then
    RefreshItemInDllfrm(integer(fmFolder),'',false,-1,FolderTree.Selected.Parent.StateIndex);
end;

procedure Tmainfrm.ibAddTaskClick(Sender: TObject);
begin
  TheOprList.Createfrm(nil,cdAdd,fmTask);
  RefreshItemInDllfrm(integer(fmTask),'',false,-2,-1);
end;

procedure Tmainfrm.itFileOpenClick(Sender: TObject);
var
  frm:TfrmOpenDlg;
  FID:integer;
  OpenReadOnly:Boolean;
begin
  FID:=-1;
  OpenReadOnly:=false;
  frm:=TfrmOpenDlg.Create(self);
  try
    frm.Init;
    frm.OpenModel:=true;
    if frm.ShowModal=mrok then
    begin
      FID:=frm.ID;
      OpenReadOnly:=frm.OpenReadOnly;
    end;
  finally
    frm.Free;
    if FID<>-1 then
    begin
      OprList.ViewNode(FID);
      if OpenReadOnly then
        mainfrm.OprList.OperFrm('SetReadOnly',Application.MainForm.ActiveMDIChild);
    end;
  end;
end;

procedure Tmainfrm.FreeListDLL(var msg: TMessage);
begin
  if DllfrmList.DllList.Count=0 then
  begin
    FreeLibrary(GetModuleHandle('List.dll'));
  end;
  OprList.DeletewMenu(msg.WParam);
end;

procedure Tmainfrm.Timer1Timer(Sender: TObject);
var
  i:integer;
  CanRun:Boolean;
  function IsEqualNow(TheTime:TDatetime;step:integer=0):Boolean;
  var
    oldTime,newTime:TTimeStamp;
    Y,M,D:Word;
    Y1,M1,D1:Word;
  begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -