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

📄 main.pas

📁 该程序用D5编译
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    TemListView:=TListView.Create(tabsheetx);
    TemListView.Parent := tabsheetx;
    TemListView.Align := alclient;
    //TemListView.FlatScrollBars := true; //##
    //TemListView.BorderStyle := bsNone; //##
    TemListView.DragMode := dmAutomatic;
    TemListView.Visible := true;
    pMyTreeItem(LanTree.Selected.data)^.MyClientListView := TemListView;
    TemListView.OnDblClick := MyListViewClick;
    TemListView.OnMouseDown := BrowseListViewMouseDown;  //##$$##
    TemListView.PopupMenu := ListViewPopupMenu;
    TemListView.ViewStyle := vssmallicon;
    TemListView.SmallImages := imagelist1;
    TemListView.MultiSelect := true;
    CurListView:=TemListView;
    ClientPageCtrl.ActivePage :=TabSheetX;
    DirSearcher:=TSearchDirThread.create(true);
    DirSearcher.ClickType:=InTreeView;
    DirSearcher.mydir := TemDirName;
    DirSearcher.mygroup:= pMyTreeItem(LanTree.Selected.data)^.group;
    DirSearcher.myList := TemListView;
    //DirSearcher.Rlist := ShareListview;
    DirSearcher.myTree := LanTree;
    DirSearcher.mynode := LanTree.Selected;
    
    //ListItem:=FolderListview.Items.Insert(0);
    ListItem:=ShareListview.Items.Insert(0);  //$$$
    DirSearcher.RListItem := ListItem;
    ListItem.Caption := extractfilename(DirSearcher.mydir);
    ListItem.SubItems.Add(TemDirName);
    ListItem.SubItems.Add(DirSearcher.mygroup);

    new(TabDataPtr);
    TabDataPtr.MyGroup := DirSearcher.mygroup;
    trim(TabDataPtr.MyGroup);  //delete last # if exists
    {if TabDataPtr.MyGroup[length(TabDataPtr.MyGroup)]=#0
    then delete(TabDataPtr.MyGroup,length(TabDataPtr.MyGroup),1);}
    TabDataPtr.MyDir := DirSearcher.MyDir;
    TabDataPtr.MyRListItem := DirSearcher.RListItem;
    TabSheetX.Tag := integer(TabDataPtr);

    AddCap(DirSearcher.mygroup,DirSearcher.MyDir);

    ListItem.ImageIndex := 6;
    new(ListItemPtr);
    ListItemPtr.index := TabSheetX.TabIndex;
    ListItemPtr.count := -1;
    ListItem.data:= ListItemPtr;

    //==================================================
    //if ShareListview.Items[CurDirIndex].Data = nil then ShowMessage('error...'+inttostr(CurDirIndex));
    if CurDirItem <> nil
      then PListItem(CurDirItem.Data)^.NextDirItem := ListItem;
    ListItemPtr^.PrevDirItem := CurDirItem;
    CurDirItem := ListItem;
    PListItem(CurDirItem.Data)^.NextDirItem := nil;

    ToolBtnBack.Enabled := true;

    // uplink
    if LanTree.Selected.Parent.ImageIndex = 10 then
    begin
      PListItem(CurDirItem.Data)^.UpDirItem :=
        pMyTreeItem(LanTree.Selected.Parent.Data)^.MyRightListItem;
    end;

    ChangeBtnStatus;
    //==================================================
    
    //RightPageCtrl.ActivePageIndex:=1;
    pMyTreeItem(LanTree.Selected.Data)^.MyRightListItem := ListItem;
    pMyTreeItem(LanTree.Selected.Data)^.tabindex:=TabSheetX.TabIndex;
    DirSearcher.FreeOnTerminate := true;
    DirSearcher.Resume;
    
  end;
  10,6: // openfolder;
  begin

    if pMyTreeItem(LanTree.Selected.Data)^.TabIndex <> 0 then
    begin
      ClientPageCtrl.ActivePageIndex := pMyTreeItem(LanTree.Selected.Data)^.tabindex;
      //caption := inttostr(ClientPageCtrl.ActivePageIndex);
      //RightPageCtrl.ActivePageIndex:=1;
      CurListView:=pMyTreeItem(LanTree.Selected.data)^.MyClientListView;
      AddCap(pMyTreeItem(LanTree.Selected.Data)^.Group,pMyTreeItem(LanTree.Selected.Data)^.DirName);

      //==================================================
      ListItem := pMyTreeItem(LanTree.Selected.Data)^.MyRightListItem;

      if CurDirItem <> nil
        then PListItem(CurDirItem.Data)^.NextDirItem := ListItem;
      ListItemPtr := PListItem(ListItem.Data);
      ListItemPtr^.PrevDirItem := CurDirItem;
      CurDirItem := ListItem;
      //ShowMessage('sss');

      ToolBtnBack.Enabled := true;

      ChangeBtnStatus;
      //==================================================

    end
    else
    begin
      //#################$$$$$$$$$$$$$$$###############
      pMyTreeItem(LanTree.Selected.data)^.MyRightListItem.Selected := true;
      ShareListViewClick(Self);
    end;

  end;
  11,31:
  begin  //try to open a folder that can't open before or originally empty
  
    LanTree.Selected.ImageIndex := 6;
    LanTree.Selected.SelectedIndex := 6;
    LanTree.selected.StateIndex := -1;
    
    ClientPageCtrl.ActivePageIndex := pMyTreeItem(LanTree.Selected.data)^.tabindex;
    CurListView:=pMyTreeItem(LanTree.Selected.data)^.MyClientListView;
    
    AddCap(pMyTreeItem(LanTree.Selected.data)^.Group,pMyTreeItem(LanTree.Selected.data)^.DirName);
    DirSearcher:=TSearchDirThread.create(true);
    TemDirName := pMyTreeItem(LanTree.Selected.data)^.dirname;
    if TemDirName[length(TemDirName)]='\'
      then delete(TemDirName,length(TemDirName),1);
    DirSearcher.mydir := TemDirName;
    DirSearcher.myList := pMyTreeItem(LanTree.Selected.data)^.MyClientListView;
    //DirSearcher.Rlist := ShareListview;
    DirSearcher.myTree := LanTree;
    ListItem:=pMyTreeItem(LanTree.Selected.data)^.MyRightListItem;
    ListItem.Caption := extractfilename(DirSearcher.mydir);
    ListItem.ImageIndex := 6;
    DirSearcher.RListItem := ListItem;
    DirSearcher.mygroup := ListItem.SubItems.Text;
    DirSearcher.mynode := LanTree.Selected;
    DirSearcher.ClickType:= InTreeView;
    DirSearcher.FreeOnTerminate := true;
    DirSearcher.Resume;
    //RightPageCtrl.ActivePageIndex:=1;

    //==================================================
    if CurDirItem <> nil
      then PListItem(CurDirItem.Data)^.NextDirItem := ListItem;
    ListItemPtr := PListItem(ListItem.Data);
    ListItemPtr^.PrevDirItem := CurDirItem;
    CurDirItem := ListItem;
    //==================================================

  end;
  20,21,77:  // locked folder ,printer
  begin
    if LanTree.Selected.ImageIndex<>77 then
    begin
      LanTree.Selected.ImageIndex := 21;
      LanTree.Selected.SelectedIndex := 21;
    end
    else
    begin
      LanTree.Selected.ImageIndex := 77;
      LanTree.Selected.SelectedIndex := 77;
    end;
    Exe:=TExecuteThread.Create(true);
    Exe.exeFile := pMyTreeItem(LanTree.Selected.data)^.dirname;
    Exe.exeDir := extractfilepath(Exe.exeFile);
    //caption:=exe.exeFile;
    Exe.FreeOnTerminate := true;
    Exe.Resume;
  end;
  26,28: // win2000 or nt ,guest forbided ,need login
  begin
    if LanTree.Selected.ImageIndex = 26
    then
    begin
      LanTree.Selected.ImageIndex := 28;
      LanTree.Selected.SelectedIndex := 28;
    end
    else
    begin
      LanTree.Selected.ImageIndex := 26;
      LanTree.Selected.SelectedIndex := 26;
    end;
    
    Exe:=TExecuteThread.Create(true);
    Exe.exeFile := LanTree.Selected.Text;
    Exe.exeDir := extractfilepath(Exe.exeFile);
    //caption:=exe.exeFile;
    Exe.FreeOnTerminate := true;
    Exe.Resume;
  end;
 end; //end of case

end;

procedure TMainForm.ShareListViewClick(Sender: TObject);
var
  ListIndex, ListCount, i       : integer;
  ListItem                      : TListItem;
  str                           : string;
  FileInfo                      : TSHFileInfo;
  fPtr                          : pFileItem;
begin

  if ShareListView.Selected = nil then exit;
  ListIndex:=PListitem(ShareListView.Selected.Data)^.index;
  ListCount:=PListitem(ShareListView.Selected.Data)^.Count;
  if ListCount <> -1 then
  begin

    ClientPageCtrl.ActivePageIndex :=0;

    pTabData(ShareTabSheet.Tag).MyDir:= ShareListView.Selected.SubItems[0];
    pTabData(ShareTabSheet.Tag).MyGroup:= ShareListView.Selected.SubItems[1];
    pTabData(ShareTabSheet.Tag).MyRListItem:= ShareListView.Selected;

    CurDirName:= ShareListView.Selected.SubItems[0]+'\';
    CurGroupName:=ShareListView.Selected.SubItems[1];
    AddCap(CurGroupName, CurDirName);

    for i:=1 to BrowseListView.Items.Count do Dispose(pFileItem(BrowseListView.Items[i-1].Data));
    BrowseListView.Items.Clear;

    //FindIcon-----------------------------------------------------------------
    if bSysIcon then
     with BrowseListView do
     begin
        SmallImages:=TImageList.CreateSize(16,16);
        SmallImages.Handle:=ShGetFileInfo('',0,FileInfo, SizeOf(FileInfo),
                            SHGFI_SMALLICON or SHGFI_ICON or SHGFI_SYSICONINDEX );
     end
    else BrowseListView.SmallImages := ImageList1;
    //-------------------------------------------------------------------------

    for i:= 1 to ListCount do
    begin
      ListItem:=BrowseListView.Items.Add;
      str := StrListAll.Strings[ListIndex+i-1];

      new(fPtr);
      if str[length(str)]='\' then
      begin
        if not bSysIcon then ListItem.ImageIndex := 0
          else ListItem.ImageIndex := GetFileIconIndex(str);
        delete(str,length(str),1);
        fPtr.ftype := IsDir;
      end
      else
      begin
        if not bSysIcon then ListItem.ImageIndex := GetImgIndex(str)
          else ListItem.ImageIndex := GetFileIconIndex(str);
        fPtr.ftype :=IsFile;
      end;
      ListItem.Data := fPtr;
      listitem.Caption := ExtractFileName(str);
    end;

  end
  else  //ListCount <> -1 ,old history
  begin
    ClientPageCtrl.ActivePageIndex :=PListitem(ShareListView.Selected.Data)^.index;
    AddCap(pTabData(ClientPageCtrl.ActivePage.tag)^.MyGroup,
      pTabData(ClientPageCtrl.ActivePage.tag)^.MyDir);
  end;

  //============================================================
  if(not IsDoPrevNext) then
  begin
    if CurDirItem <> nil
    then PListItem(CurDirItem.Data)^.NextDirItem := ShareListView.Selected;
    PListItem(ShareListView.Selected.Data)^.PrevDirItem := CurDirItem;
    //caption := caption + '$';
    
    ToolBtnBack.Enabled := true;
  end;
  
  CurDirItem := ShareListView.Selected;
  ChangeBtnStatus;
  //============================================================

end;

procedure TMainForm.ShareListViewSelectItem(Sender: TObject;
  Item: TListItem; Selected: Boolean);
begin
  //ShareListViewClick(Self);
end;

procedure TMainForm.ClientPageCtrlChange(Sender: TObject);
begin

  {if ClientPageCtrl.ActivePageIndex =0
  then RightPageCtrl.ActivePageIndex :=0
  else RightPageCtrl.ActivePageIndex :=1;}
  AddCap(pTabData(ClientPageCtrl.ActivePage.Tag)^.MyGroup,
    pTabData(ClientPageCtrl.ActivePage.Tag)^.MyDir);

  if ClientPageCtrl.ActivePageIndex =0 then CurListView := BrowseListView
  else CurListView := ClientPageCtrl.ActivePage.Components[0] as TListView;

  CurDirItem := pTabData(ClientPageCtrl.ActivePage.Tag)^.MyRListItem;
  ChangeBtnStatus;
  
end;

procedure TMainForm.N_OpenClick(Sender: TObject);
begin

  MyListViewClick(CurListView);
  
end;

procedure TMainForm.N_CopyClick(Sender: TObject);
var
  FileName      : string;
  i             : integer;
begin

  FileName:='';
  for i:=1 to CurListView.Items.Count do
  if CurListView.Items[i-1].Selected
  then FileName:=FileName+CurDirName+CurListView.Items[i-1].Caption+#0;
  CopyToClipBoard(FileName, Handle);

end;

//Get File paths form clip board
function GetCopyFileList: boolean; forward;

procedure TMainForm.ListViewPopupMenuPopup(Sender: TObject);
var
  i: integer;
begin

  N_Open.Enabled := false;
  N_Copy.Enabled := false;
  N_Size.Enabled := false;
  N_OpenWithNotpad.Enabled :=false;
  N_Property.Enabled := false;
  N_NewWin.Enabled := false;
  N_Refresh.Enabled := false;
  N_Favorite.Enabled := false;
  N_CopyTo.Enabled := false;
  N_SelectAll.Enabled := false;
  N_Paste.Enabled := false;
  N_Delete.Enabled := false;

  CurDirName:= pTabData(ClientPageCtrl.ActivePage.Tag).MyDir+'\';
  CurGroupName :=pTabData(ClientPageCtrl.ActivePage.Tag).MyGroup;
  CurRlistItem :=pTabData(ClientPageCtrl.ActivePage.Tag).MyRListItem;

  if ClientPageCtrl.ActivePageIndex=0 then CurListView:=BrowseListView
  else CurListView:=(ClientPageCtrl.ActivePage.Components[0] as TListView);

  if CurListView.SelCount >0 then
  begin
    N_Open.Enabled := true;
    N_Copy.Enabled := true;
    N_Size.Enabled := true;
    N_CopyTo.Enabled := true;
    if (CurListView.SelCount=1)then
    begin
      N_Property.Enabled := true;
      if(CurListView.Selected.ImageIndex<>0)then N_OpenWithNotpad.Enabled := true;
    end;

    // for system popup menu use.
    FileList.Clear;
    for i:=1 to CurListView.Items.Count do
      if (CurListView.Items[i-1].Selected) then FileList.Add(CurListView.Items[i-1].Caption);

  end;
  if CurRListItem<>nil then
  begin
    N_NewWin.Enabled := true;
    N_Refresh.Enabled := true;
    N_Favorite.Enabled := true;
    N_SelectAll.Enabled := true;
  end;
  
  for i:=1 to CurListView.Items.Count do
  if (CurListView.Items[i-1].Selected)and(CurListView.Items[i-1].ImageIndex=0)
  then  N_CopyTo.Enabled := false;

  if (CurDirName <> '\')and(GetCopyFileList) then N_Paste.Enabled := true;
  N_Delete.Enabled := N_Copy.Enabled;
  N_Sys.Enabled := N_Copy.Enabled;

end;

procedure TMainForm.N_SizeClick(Sender: TObject);
var
  fulls,msg             : string;
  i,size,nFile,nFolder  : integer;
begin

  size:=0;
  nFile:=0;
  nFolder:=0;
  //DirName:=pTabData(ClientPageCtrl.ActivePage.Tag).MyDir+'\';
  for i:=1 to CurListView.Items.Count do
  begin
    if CurListView.Items[i-1].Selected
    then
    begin
      fulls:=CurDirName+CurListView.Items[i-1].Caption;
      if CurListView.Items[i-1].ImageIndex<>0 then
      begin
        size:=size+ GetFileSize(fulls);
        inc(nFile);
      end
      else
      begin
        size:=size+GetDirectorySize(fulls);
        inc(nFolder);
      end;
      //caption:=fulls;
    end;
  end;

  if nFolder=0 then msg := inttostr(nFile)+' 个文件'
  else if nFile=0 then msg:= inttostr(nFolder)+' 个文件夹'
  else  msg:= inttostr(nFile)+' 个文件,'+inttostr(nFolder)+' 个文件夹';

  //ShowMessage(msg+' 共'+FormatFloat('#,###" KB"',  size/ 1024)+'('+inttostr(size)+'字节)');
  Application.MessageBox(
        pchar(msg+' 共'+FormatFloat('#,###" KB"',  size/ 1024)+'('+inttostr(size)+'字节)'),
        '文件大小',
        MB_OK);

end;

procedure TMainForm.N_OpenWithNotpadClick(Sender: TObject);
var
  command       : string;

⌨️ 快捷键说明

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