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

📄 uopenfrm.pas

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