在好例子网,分享、交流、成长!
您当前所在位置:首页Pascal 开发实例Delphi网络编程 → Pascal 局域网共享资源 源码

Pascal 局域网共享资源 源码

Delphi网络编程

下载此实例
  • 开发语言:Pascal
  • 实例大小:0.39M
  • 下载次数:20
  • 浏览次数:235
  • 发布时间:2015-02-12
  • 实例类别:Delphi网络编程
  • 发 布 人:keexoo
  • 文件格式:.rar
  • 所需积分:1
 相关标签: 局域网 浏览器

实例介绍

【实例简介】带源代码的局域网共享资源浏览器
【实例截图】 暂无

【核心代码】

unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ToolWin, ComCtrls, ExtCtrls, Menus, StdCtrls, Tabs, ImgList,Inifiles,
  Buttons,ShlObj,MultiSearchThreadUnit,ShellApi;

type
  TMainForm = class(TForm)
    ToolPanel: TPanel;
    CoolBar1: TCoolBar;
    BottomPanel: TPanel;
    Splitter1: TSplitter;
    MainMenu: TMainMenu;
    MenuMain: TMenuItem;
    MenuAbout: TMenuItem;
    StatusBar: TStatusBar;
    Splitter2: TSplitter;
    BottomDockPanel: TPanel;
    Splitter3: TSplitter;
    ImageList1: TImageList;
    LeftPanel: TPanel;
    LeftDockPanel: TPanel;
    LeftPageCtrl: TPageControl;
    SearchTabSheet: TTabSheet;
    SearchTree: TTreeView;
    FavoTabSheet: TTabSheet;
    FavoTree: TTreeView;
    RightPanel: TPanel;
    RightDockPanel: TPanel;
    RightPageCtrl: TPageControl;
    QucikViewTab: TTabSheet;
    BtnNewDock: TSpeedButton;
    FolderTabSheet: TTabSheet;
    ShareListView: TListView;
    FolderListView: TListView;
    ListViewPopupMenu: TPopupMenu;
    N_Open: TMenuItem;
    N_Copy: TMenuItem;
    N_Size: TMenuItem;
    N_OpenWithNotpad: TMenuItem;
    N1: TMenuItem;
    N_Refresh: TMenuItem;
    N_Favorite: TMenuItem;
    N_NewWin: TMenuItem;
    BtnFindComputer: TSpeedButton;
    ClientPanel: TPanel;
    ClientPageCtrl: TPageControl;
    ShareTabSheet: TTabSheet;
    BrowseListView: TListView;
    InfoPanel: TPanel;
    BottomPageCtrl: TPageControl;
    AllFileTabSheet: TTabSheet;
    AllListBox: TListBox;
    FindTabSheet: TTabSheet;
    FindListView: TListView;
    Mp3TabSheet: TTabSheet;
    Mp3ListView: TListView;
    MovieTabSheet: TTabSheet;
    MovieListView: TListView;
    BtnDOS: TSpeedButton;
    BtnConfigor: TSpeedButton;
    N_CopyTo: TMenuItem;
    BtnRefreshTree: TSpeedButton;
    BottomPopupMenu: TPopupMenu;
    N_SaveAll: TMenuItem;
    SaveDlg: TSaveDialog;
    MenuView: TMenuItem;
    Menu_Tree: TMenuItem;
    Menu_Folder: TMenuItem;
    Menu_Result: TMenuItem;
    BtnAutoSearch: TSpeedButton;
    LanExplorer1: TMenuItem;
    BtnPause: TSpeedButton;
    BtnStop: TSpeedButton;
    FavoTreePopupMenu: TPopupMenu;
    N_DeleteFavo: TMenuItem;
    IconCheckBox: TCheckBox;
    N_BottomOpen: TMenuItem;
    N_BottomCopy: TMenuItem;
    N_BottomCopyTo: TMenuItem;
    N_BottomFileSize: TMenuItem;
    N_Property: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure LeftDockPanelStartDock(Sender: TObject;
      var DragObject: TDragDockObject);
    procedure LeftDockPanelEndDock(Sender, Target: TObject; X, Y: Integer);
    procedure RightDockPanelStartDock(Sender: TObject;
      var DragObject: TDragDockObject);
    procedure RightDockPanelEndDock(Sender, Target: TObject; X,
      Y: Integer);
    procedure BottomDockPanelStartDock(Sender: TObject;
      var DragObject: TDragDockObject);
    procedure BottomDockPanelEndDock(Sender, Target: TObject; X, Y: Integer);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BtnNewDockClick(Sender: TObject);
    procedure ShareListViewClick(Sender: TObject);
    procedure ShareListViewSelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    procedure FolderListViewClick(Sender: TObject);
    procedure RightPageCtrlChange(Sender: TObject);
    procedure ClientPageCtrlChange(Sender: TObject);
    procedure N_OpenClick(Sender: TObject);
    procedure N_CopyClick(Sender: TObject);
    procedure ListViewPopupMenuPopup(Sender: TObject);
    procedure N_SizeClick(Sender: TObject);
    procedure N_OpenWithNotpadClick(Sender: TObject);
    procedure N_NewWinClick(Sender: TObject);
    procedure N_FavoriteClick(Sender: TObject);
    procedure SearchTreeClick(Sender: TObject);
    procedure FavoTreeClick(Sender: TObject);
    procedure BtnFindComputerClick(Sender: TObject);
    procedure BtnDOSClick(Sender: TObject);
    procedure BtnConfigorClick(Sender: TObject);
    procedure N_RefreshClick(Sender: TObject);
    procedure N_CopyToClick(Sender: TObject);
    procedure BtnRefreshTreeClick(Sender: TObject);
    procedure N_SaveAllClick(Sender: TObject);
    procedure Menu_TreeClick(Sender: TObject);
    procedure Menu_FolderClick(Sender: TObject);
    procedure Menu_ResultClick(Sender: TObject);
    procedure BtnAutoSearchClick(Sender: TObject);
    procedure LanExplorer1Click(Sender: TObject);
    procedure BtnPauseClick(Sender: TObject);
    procedure BtnStopClick(Sender: TObject);
    procedure N_DeleteFavoClick(Sender: TObject);
    procedure FavoTreePopupMenuPopup(Sender: TObject);
    procedure IconCheckBoxClick(Sender: TObject);
    procedure AllListBoxDblClick(Sender: TObject);
    procedure FindListViewDblClick(Sender: TObject);
    procedure Mp3ListViewDblClick(Sender: TObject);
    procedure MovieListViewDblClick(Sender: TObject);
    procedure N_BottomOpenClick(Sender: TObject);
    procedure N_BottomCopyClick(Sender: TObject);
    procedure BottomPopupMenuPopup(Sender: TObject);
    procedure N_BottomFileSizeClick(Sender: TObject);
    procedure N_BottomCopyToClick(Sender: TObject);
    procedure StatusBarMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormResize(Sender: TObject);
    procedure N_PropertyClick(Sender: TObject);
  private
    { Private declarations }
    ini:    Tinifile;
    f: textfile;
    TabSheetX: TTabSheet;
    CurListView: TListView;
    CurDirName,CurGroupName:string;
    CurRlistItem:TListItem;
    TemTreeNode:TTreeNode;
    CurBottomListView:TListView;
    FOldProc1,FOldProc2,FOldProc3 : TWndMethod;

    procedure OpenIni;
    procedure SaveIni;
    procedure OpenFavorite;
    procedure SaveFavorite;
    procedure MyListViewClick(Sender: TObject);
    procedure LanTreeClick(LanTree:TTreeView);
    procedure MyBottomListViewClick(ListView:TListView);
    procedure DockHostClick(Sender: TObject);
    Procedure MyEndDock;
    procedure MyDockCloseProc1(var message : TMessage);
    procedure MyDockCloseProc2(var message : TMessage);
    procedure MyDockCloseProc3(var message : TMessage);
  public
    { Public declarations }
    OldFileCount:integer;
    StrListAll,StrListSearch,StrListMp3,StrListMovie:TStringList;
    procedure BringFront;
    procedure CheckFile(FileName,MyDir,MyGroup:string;ImageIndex:integer);
  end;

type FileType = (IsFile, IsDir);
type OwnerType = (InTreeView,InListView);

type
  PMyTreeItem = ^TMyTreeItem;
  TMyTreeItem = record
    DirName,Group: string;
    TabIndex: integer;
    MyClientListView:TListView;
    MyRightListItem:TListItem;
  end;

type
  PListItem = ^TMyListItem;
  TMyListItem = record
   //dirName,group: string;
   index,count: integer;
  end;

type
  pTabData = ^TMyTabData;
  TMyTabData=record
    MyGroup,MyDir:string;
    MyRListItem:TListItem;
  end;

TExecuteThread=class(TThread)
 private
 exeFile,exeDir:string;
 protected
 procedure Execute; override;
  //Procedure Adddir;
 end;

var
  MainForm: TMainForm;

  AppDir:       String;
  GroupList:    array[0..500]of string;
  GroupNum,ver,SearchBeginNum,FinishNum,ThreadNum:integer;
  CanOpen:      Boolean;
  MyItemPtr:    PMyTreeItem;
  ListItemPtr:  PListItem;
  TabDataPtr:      pTabData;
  recursive,stop,bAutoSearch,bSysIcon:    boolean;
  MainSearch:TMainThread;

implementation
uses GetDomainThreadUnit,SearchGroupThreadUnit,SearchHostThreadUnit,
     SearchDirThreadunit,ConFigor,FmxUtils,CopyTo,About;
{$R *.DFM}

procedure TExecuteThread.Execute;
begin
 ExecuteFile(exefile,'',exedir,SW_SHOW);
end;

procedure TMainForm.MyDockCloseProc1(var message: TMessage);
begin
  if (message.Msg = WM_SYSCOMMAND) and (message.WParam = SC_CLOSE) then
    Menu_Tree.Checked := false;
  FOldProc1(message);
end;

procedure TMainForm.MyDockCloseProc2(var message: TMessage);
begin
  if (message.Msg = WM_SYSCOMMAND) and (message.WParam = SC_CLOSE) then
    Menu_Folder.Checked := false;
  FOldProc2(message);
end;

procedure TMainForm.MyDockCloseProc3(var message: TMessage);
begin
  if (message.Msg = WM_SYSCOMMAND) and (message.WParam = SC_CLOSE) then
    Menu_Result.Checked := false;
  FOldProc3(message);
end;

procedure TMainForm.DockHostClick(Sender: TObject);
begin
  //LeftPanel.visible:=LeftDockPanel.Visible;
  if LeftPanel.VisibleDockClientCount=0 then LeftPanel.Hide else LeftPanel.Show;
  if RightPanel.VisibleDockClientCount=0 then RightPanel.Hide else RightPanel.Show;
  if BottomPanel.VisibleDockClientCount=0 then BottomPanel.Hide else BottomPanel.Show;
  {if LeftDockPanel.HostDockSite.DockClientCount=1
  then LeftDockPanel.HostDockSite.Visible:= LeftDockPanel.Visible;}
  Menu_Tree.Checked := LeftDockPanel.Visible;
  Menu_Folder.Checked := RightDockPanel.Visible;
  Menu_Result.Checked := BottomDockPanel.Visible;
end;

Procedure TMainForm.MyEndDock;
begin

  if (LeftPanel.VisibleDockClientCount=0) then
  begin
    LeftPanel.Visible := false;
    Splitter2.Visible := false;
  end
  else
  begin
    LeftPanel.Visible := true;
    Splitter2.Visible := true;
    Splitter2.Align := alRight;
    Splitter2.Align := alLeft;
  end;

  if (BottomPanel.VisibleDockClientCount=0) then
  begin
    BottomPanel.Visible := false;
    Splitter1.Visible := false;
  end
  else
  begin
    BottomPanel.Visible := true;
    Splitter1.Visible := true;
    Splitter1.Align := alTop;
    Splitter1.Align := alBottom;
  end;

  if (RightPanel.VisibleDockClientCount=0) then
  begin
    RightPanel.Visible := false;
    Splitter3.Visible := false;
  end
  else
  begin
    RightPanel.Visible := true;
    Splitter3.Visible := true;
    Splitter3.Align := alRight;
  end;
  
end;

procedure TMainForm.CheckFile(FileName,MyDir,MyGroup:string;ImageIndex:integer);
var listitem:TListitem;
begin
  with ConfigorForm do
    begin

     if CheckDest(FileName) then
     begin
       listitem:=FindListview.Items.Add;
       listitem.ImageIndex := ImageIndex;
       listitem.Caption := extractfilename(FileName);
       listitem.SubItems.add(MyDir);
       listitem.SubItems.add(MyGroup);
       StrListSearch.Add(' 工作组:' MyGroup ' 地址:' MyDir '\' FileName);
     end;

     if CheckMP3(FileName) then
     begin
       listitem:=MP3Listview.Items.Add;
       listitem.ImageIndex := ImageIndex;
       listitem.Caption := extractfilename(FileName);
       listitem.SubItems.add(MyDir);
       listitem.SubItems.add(MyGroup);
       StrListMp3.Add(' 工作组:' MyGroup ' 地址:' MyDir '\' FileName);
     end;

     if CheckMovie(FileName) then
     begin
       listitem:=MovieListview.Items.Add;
       listitem.ImageIndex := ImageIndex;
       listitem.Caption := extractfilename(FileName);
       listitem.SubItems.add(MyDir);
       listitem.SubItems.add(MyGroup);
       StrListMovie.Add(' 工作组:' MyGroup ' 地址:' MyDir '\' FileName);
     end;

  end;
end;

procedure TMainForm.OpenIni;
begin

  ini:=Tinifile.create(AppDir 'LanExplorer.ini');
  if not fileexists('LanExplorer.ini')
  then
  begin
    ini.writeInteger('window position','top',top);
    ini.writeInteger('window position','left',left);
    ini.writeInteger('window position','width',width);
    ini.writeInteger('window position','height',height);

    ini.writeString('Dock','RightDockPanel','alRight');
    //ini.writeString('IP','IP2',Edit2.Text);
  end
  else
  begin
    top:=ini.ReadInteger('window position','top',50);
    left:=ini.ReadInteger('window position','left',50);
    width:=ini.ReadInteger('window position','width',500);
    height:=ini.ReadInteger('window position','height',50);

    if (width=screen.Width)and(height=screen.Height)then WindowState:=wsMaximized; 

    if ini.ReadString('Dock','RightDockPanel','alRight')='alLeft'
    then BtnNewDockClick(Self);
    //Edit2.Text:=ini.ReadString('IP','IP2',Edit2.Text);
  end;
  ini.Free;
  
  
end;

procedure TMainForm.SaveIni;
begin

  if AppDir[1]='\' then exit; //open on the LAN
  //showmessage(mydir);
  ini:=Tinifile.create(AppDir 'LanExplorer.ini');

  ini.writeInteger('window position','top',top);
  ini.writeInteger('window position','left',left);
  ini.writeInteger('window position','width',width);
  ini.writeInteger('window position','height',height);

  if RightDockPanel.HostDockSite = LeftPanel then
  ini.writeString('Dock','RightDockPanel','alLeft')
  else ini.writeString('Dock','RightDockPanel','alRight');
  
  //ini.writeString('IP','IP2',Edit2.Text);

  ini.Free;
  
end;

procedure TMainForm.OpenFavorite;
var RootNode,TemNode:TTreeNode;
    fg,fs:string;
begin

   RootNode:=FavoTree.Items[0];
   if fileexists('Favorite.txt') then
   begin
     assignfile(f,'Favorite.txt');
     reset(f);
     while not eof(f) do
     begin
          readln(f,fg);
          New(MyItemPtr);
          MyItemPtr^.group := fg;

          readln(f,fs);
          MyItemPtr^.dirName := fs;

          {ListItem:=ListView7.Items.Insert(0);
          listitem.Caption := fs;
          listitem.SubItems.Text := fg;}

          TemNode:=FavoTree.Items.AddChild(RootNode,fs);
          TemNode.Data := MyItemPtr;
     end;
     closefile(f);
     //FavTree.LoadfromFile('Favorite.txt');
     try
     FavoTree.Items[0].Expand(false);
     except on ETreeViewError do
       begin
         FavoTree.Items.AddChildFirst(nil,'收藏');
       end;
     end; //end of try
   end;

end;

procedure TMainForm.SaveFavorite;
var i:integer;
    TempNode:TTreeNode;
begin
  if AppDir[1]<>'\' then     //open on the LAN
  if FavoTree.Items[0].HasChildren  then
  begin
    tempNode:=nil; // just remove warning;
    assignfile(f,AppDir '\Favorite.txt');
    rewrite(f);
    for i:=1 to FavoTree.Items[0].count do
    begin
    tempNode:= FavoTree.Items[0].Item[i-1];
    writeln(f,trimright(pMyTreeItem(tempNode.data)^.group));
    writeln(f,tempNode.text);
    end;
    closefile(f);
    caption:=tempNode.text; // just remove warning;
  end;
end;

procedure TMainForm.BringFront;
begin
  Application.BringToFront;
end;

procedure TMainForm.MyListViewClick(Sender: TObject);
var DirName,extn,FileName,GroupName:string;
    DirSearcher:TSearchDirThread;
    Exe: TExecuteThread;
    newListItem,RunItem:Tlistitem;
    TemListView:TListView;
begin

  RunItem:= (Sender as TListView).Selected;
  if (RunItem=nil) then exit;
  
  FileName:= RunItem.Caption;
 
  DirName:=pTabData(ClientPageCtrl.ActivePage.Tag).MyDir;

  GroupName:=pTabData(ClientPageCtrl.ActivePage.Tag).MyGroup;
  if GroupName[length(GroupName)]=#0
  then delete(GroupName,length(GroupName),1);

  //caption:= dirname '\' filename;
  if (Sender as TListView).Selected.ImageIndex=0 then //folder
  begin
    tabsheetx:=ttabsheet.Create(Self);
    tabsheetx.PageControl := ClientPageCtrl;
    DirName:=DirName '\' FileName;
    tabsheetx.Caption := DirName;
    tabsheetx.Repaint;
    
    TemListView:=TListView.Create(tabsheetx);
    with TemListView do
    begin
      Parent := tabsheetx;
      Align := alclient;
      Visible := true;
      OnDblClick := MyListviewClick;
      PopupMenu := ListViewPopupMenu;
      //OnMOuseDown := RMouseDownHandler;
      ViewStyle := vssmallicon;
      SmallImages := imagelist1;
      MultiSelect := true;
    end;
  ClientPageCtrl.ActivePageIndex :=tabsheetx.TabIndex;
  RightPageCtrl.ActivePageIndex:=1;
  DirSearcher:=TSearchDirThread.create(true);
  DirSearcher.mydir := DirName;
  //DirSearcher.mygroup := groupname;
  DirSearcher.myList := TemListView;
  DirSearcher.Rlist :=FolderListView;
  //DirSearcher.myTree := Treeview1;
  //DirSearcher.ButtonListbox := Listbox9;
  newListItem:=FolderListview.Items.Insert(0);
  newListItem.Caption := extractfilename(DirSearcher.mydir);
  new(ListItemPtr);
  ListItemPtr.index := TabSheetX.TabIndex;
  NewListItem.data:= ListItemPtr;
  NewListItem.SubItems.Add(DirName);
  NewListItem.SubItems.Add(GroupName);
  NewListItem.ImageIndex := 6;

  new(TabDataPtr);
  TabDataPtr.MyGroup := GroupName;
  TabDataPtr.MyDir := DirName;
  TabDataPtr.MyRListItem :=NewListItem;
  TabSheetX.Tag := integer(TabDataPtr);

  DirSearcher.RListItem := NewListItem;
  DirSearcher.ClickType := InListView;
  DirSearcher.FreeOnTerminate := true;
  DirSearcher.Resume;
 end
 //****************************
 else
 begin
  extn:=lowercase(ExtractFileExt(filename));

  if not bSysIcon then
    //if extn<>'.exe' then runItem.ImageIndex := 17 else runItem.ImageIndex:=18;
    if extn<>'.exe' then
    begin
      if runItem.ImageIndex=1 then runItem.ImageIndex := 17
      else runItem.ImageIndex:=1;
    end
    else
    begin
      if runItem.ImageIndex=2 then runItem.ImageIndex:=18
      else  runItem.ImageIndex:=2;
    end;

  Exe:=TExecuteThread.Create(true);
  Exe.exeFile := DirName '\' filename;
  Exe.exeDir := DirName;
  Exe.FreeOnTerminate := true;
  Exe.Resume;
  //ExecuteFile(dir '\' filename,'',dir,SW_SHOW);
 end;
 //end;
end;

procedure TMainForm.FormCreate(Sender: TObject);
var GetDomainThread:TGetDomainThread;
begin

  AppDir:=ExtractFilePath(ParamStr(0));

  //ButtomRightPanel.BevelOuter:=bvNone;
  //DockPanel.BevelOuter:=bvNone;
  LeftPanel.BevelOuter:=bvNone;
  RightPanel.BevelOuter:=bvNone;
  BottomPanel.BevelOuter:=bvNone;
  LeftPanel.OnClick := DockHostClick;
  RightPanel.OnClick := DockHostClick;
  BottomPanel.OnClick := DockHostClick;

  {LeftPanel.AutoSize := true;
  RightPanel.AutoSize := true;
  BottomPanel.AutoSize := true;}

  BottomDockPanel.manualdock(nil);
  BottomDockPanel.manualdock(BottomPanel);
  //ButtomRightPanel.manualdock(BottomPanel);
  //ClientPageCtrl.ManualDock(Self);

  LeftDockPanel.manualdock(nil);
  LeftDockPanel.manualdock(LeftPanel);

  RightDockPanel.manualdock(nil);
  RightDockPanel.manualdock(RightPanel);

  StrListAll:=TStringList.Create;
  StrListSearch:=TStringList.Create;
  StrListMp3:=TStringList.Create;
  StrListMovie:=TStringList.Create;

  GroupNum:=0;
  FinishNum:=0;
  ThreadNum:=3;
  CanOpen:=false;
  OldFileCount:=0;
  GetDomainThread:=TGetDomainThread.Create(true);
  GetDomainThread.LanTree := SearchTree;
  GetDomainThread.Resume;

  recursive:=false;
  stop:=false;
  bAutoSearch:=true;

  OpenIni;
  OpenFavorite;

  BrowseListView.OnDblClick := MyListViewClick;

  new(TabDataPtr);
  TabDataPtr.MyGroup := '';
  TabDataPtr.MyDir := '';
  TabDataPtr.MyRListItem := nil;
  ShareTabSheet.Tag := integer(TabDataPtr);

end;

procedure TMainForm.LeftDockPanelStartDock(Sender: TObject;
  var DragObject: TDragDockObject);
begin
  LeftPanel.Visible := true;
  {LeftPanel.AutoSize := false;
  LeftPanel.Width := 200;}
end;

procedure TMainForm.LeftDockPanelEndDock(Sender, Target: TObject; X,
  Y: Integer);
begin

  if Target is TCustomDockForm then
  begin
    FOldProc1 := (Target as TCustomDockForm).WindowProc;
    (Target as TCustomDockForm).WindowProc := MyDockCloseProc1;
  end;

  MyEndDock;
  

end;

procedure TMainForm.RightDockPanelStartDock(Sender: TObject;
  var DragObject: TDragDockObject);
begin
  {RightPanel.AutoSize := false;
  RightPanel.Width:=160; }
  RightPanel.Visible := true;
end;

procedure TMainForm.RightDockPanelEndDock(Sender, Target: TObject; X,
  Y: Integer);
begin

  if Target is TCustomDockForm then
  begin
    FOldProc2 := (Target as TCustomDockForm).WindowProc;
    (Target as TCustomDockForm).WindowProc := MyDockCloseProc2;
  end;
  MyEndDock;


end;

procedure TMainForm.BottomDockPanelStartDock(Sender: TObject;
  var DragObject: TDragDockObject);
begin
  {BottomPanel.AutoSize := false;
  BottomPanel.Height:=102;}
  BottomPanel.Visible := true;
  {BottomPanel.Align := altop;
  BottomPanel.Align := alBottom;}
  
end;

procedure TMainForm.BottomDockPanelEndDock(Sender, Target: TObject; X,
  Y: Integer);
begin

  if Target is TCustomDockForm then
  begin
    FOldProc3 := (Target as TCustomDockForm).WindowProc;
    (Target as TCustomDockForm).WindowProc := MyDockCloseProc3;
  end;
  MyEndDock;


end;

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  SaveIni;
  SaveFavorite;
  
end;

procedure TMainForm.BtnNewDockClick(Sender: TObject);
begin

    RightDockPanel.manualdock(LeftPanel,nil,alBottom);
    RightPanel.Visible := false;
    Splitter3.Visible := false;
    {RightDockPanel.Height := (LeftPanel.Height div 3);
    RightDockPanel.Align := alBottom;
    LeftDockPanel.Height:=LeftPanel.Height-RightDockPanel.Height;
    RightDockPanel.Color := clred;}
    BtnNewDock.Down := true;
  
end;

procedure TMainForm.LanTreeClick(LanTree:TTreeView);
var GroupSearcher: TSearchGroupThread;
    HostSearcher:TSearchHostThread;
    DirSearcher:TSearchDirThread;
    Exe: TExecuteThread;
    TemListView:TListView;
    ListItem:TListItem;
    TemDirName:string;
    //i:integer;
begin

  if (LanTree.Selected = nil)or(LanTree.Selected = LanTree.Items[0]) then exit;

  case LanTree.Selected.ImageIndex of
  5,14:    //workgroup
  begin
    LanTree.Selected.ImageIndex := 16;
    LanTree.Selected.SelectedIndex := 16;
    GroupSearcher:=TSearchGroupThread.create(true);
    GroupSearcher.MyTree := LanTree;
    GroupSearcher.MyGroup := LanTree.Selected.Text;
    GroupSearcher.MyNode := LanTree.Selected;
    GroupSearcher.FreeOnTerminate := true;
    GroupSearcher.Resume;
  end;
  7,15,27:    //host
  begin
    LanTree.Selected.ImageIndex := 12;
    LanTree.Selected.SelectedIndex := 12;
    LanTree.selected.StateIndex := -1;
    LanTree.SetFocus;
    HostSearcher:=TSearchHostThread.create(true);
    HostSearcher.MyHost := LanTree.Selected.Text;
    HostSearcher.MyGroup := LanTree.Selected.Parent.Text;
    HostSearcher.MyTree:=LanTree;
    HostSearcher.MyNode:=LanTree.selected;
    HostSearcher.FreeOnTerminate := true;
    HostSearcher.Resume;
    //explordir.WaitFor;
  end;
  0,19,30: //closed folder
  begin
    LanTree.Selected.ImageIndex := 6;
    LanTree.Selected.SelectedIndex :=6;
    LanTree.selected.StateIndex := -1;
    CoolBar1.SetFocus;
    TabSheetX:=TTabSheet.Create(self);
    TabSheetX.PageControl := ClientPageCtrl;
    TemDirName:=pMyTreeItem(LanTree.Selected.data)^.dirname;
    if TemDirName[length(TemDirName)]='\'
    then delete(TemDirName,length(TemDirName),1);
    TabSheetX.Caption :=TemDirName;
    TabSheetX.Repaint;
    TemListView:=TListView.Create(tabsheetx);
    TemListView.Parent := tabsheetx;
    TemListView.Align := alclient;
    TemListView.Visible := true;
    pMyTreeItem(LanTree.Selected.data)^.MyClientListView := TemListView;
    TemListView.OnDblClick := MyListViewClick;
    //TemListView.OnMOuseDown := RMouseDownHandler;
    TemListView.PopupMenu := ListViewPopupMenu;
    TemListView.ViewStyle := vssmallicon;
    TemListView.SmallImages := imagelist1;
    TemListView.MultiSelect := true;
    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 := FolderListview;
    DirSearcher.myTree := LanTree;
    DirSearcher.mynode := LanTree.Selected;
    ListItem:=FolderListview.Items.Insert(0);
    DirSearcher.RListItem := ListItem;
    ListItem.Caption := extractfilename(DirSearcher.mydir);
    ListItem.SubItems.Add(TemDirName);
    ListItem.SubItems.Add(DirSearcher.mygroup);
    //ListItem.SubItems[0] := TemDirName;
    //ListItem.SubItems[1] := DirSearcher.mygroup;

    new(TabDataPtr);
    TabDataPtr.MyGroup := DirSearcher.mygroup;
    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);

    ListItem.ImageIndex := 6;
    new(ListItemPtr);
    ListItemPtr.index := TabSheetX.TabIndex;
    ListItem.data:= ListItemPtr;
    RightPageCtrl.ActivePageIndex:=1;
    pMyTreeItem(LanTree.Selected.data)^.MyRightListItem := ListItem;
    pMyTreeItem(LanTree.Selected.data)^.tabindex:=TabSheetX.TabIndex;
    DirSearcher.FreeOnTerminate := true;
    DirSearcher.Resume;
    //DirSearcher.WaitFor;
  end;
  10,6: // openfolder;
  begin
    ClientPageCtrl.ActivePageIndex := pMyTreeItem(LanTree.Selected.data)^.tabindex;
    //caption:= inttostr(pMyTreeItem(tree2.Selected.data)^.tabindex);
    RightPageCtrl.ActivePageIndex:=1;
  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;
    //checkbox2.SetFocus;
    ClientPageCtrl.ActivePageIndex := pMyTreeItem(LanTree.Selected.data)^.tabindex;
    DirSearcher:=TSearchDirThread.create(true);
    DirSearcher.mydir := pMyTreeItem(LanTree.Selected.data)^.dirname;
    //i:=pMyTreeItem(LanTree.Selected.data)^.tabindex;
    DirSearcher.myList := pMyTreeItem(LanTree.Selected.data)^.MyClientListView;
    DirSearcher.Rlist := FolderListview;
    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;
    //listbox7.Items[listbox7.Items.count-i]:=('重新搜索:' DirSearcher.mydir);
    DirSearcher.mynode := LanTree.Selected;
    DirSearcher.ClickType:= InTreeView;
    DirSearcher.FreeOnTerminate := true;
    DirSearcher.Resume;
    RightPageCtrl.ActivePageIndex:=1;
  end;
  20,21:  // locked folder
  begin
    LanTree.Selected.ImageIndex := 21;
    LanTree.Selected.SelectedIndex := 21;
    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;
    //showmessage(exe.exefile);
    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;
begin

  if ShareListView.Selected=nil then exit;
  ClientPageCtrl.ActivePageIndex :=0;
  ListIndex:=PListitem(ShareListView.Selected.Data)^.index;
  ListCount:=PListitem(ShareListView.Selected.Data)^.Count;
  AllListBox.TopIndex := AllListBox.Items.Count-ListIndex;

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

  InfoPanel.Caption := '主机和文件夹:' ShareListView.Selected.SubItems[0] 
                       '  工作组:'  ShareListView.Selected.SubItems[1];
  BrowseListView.Items.Clear;
  //RightPageCtrl.ActivePage := BrowseTabsheet;
  for i:= 1 to ListCount do
  begin
    //ResultListBox.Items.Add(AllListBox.Items[i]);
    ListItem:=BrowseListView.Items.Add;
    str:= AllListBox.Items[AllListBox.Items.Count-ListIndex i-1];
    if str[length(str)]='\' then
    begin
      ListItem.ImageIndex :=0;
      delete(str,length(str),1);
    end
    else ListItem.ImageIndex :=1;
    listitem.Caption := extractfilename(str);
  end;
  
end;

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

procedure TMainForm.FolderListViewClick(Sender: TObject);
begin

  if FolderListView.Selected=nil then exit;
  ClientPageCtrl.ActivePageIndex :=PListitem(FolderListView.Selected.Data)^.index;

end;

procedure TMainForm.RightPageCtrlChange(Sender: TObject);
begin

  Case RightPageCtrl.ActivePageIndex of
  0: ClientPageCtrl.ActivePageIndex :=0;
  end;// end of case
  
end;

procedure TMainForm.ClientPageCtrlChange(Sender: TObject);
begin
  //(TabSheetX.Components[0] as TListView).color:= clred;
  if ClientPageCtrl.ActivePageIndex <>0 then
  StatusBar.Panels[2].Text:='工作组:' pTabData(ClientPageCtrl.ActivePage.Tag).MyGroup 
           ' 主机和文件夹:' pTabData(ClientPageCtrl.ActivePage.Tag).MyDir;
end;

procedure TMainForm.N_OpenClick(Sender: TObject);
begin

  MyListViewClick(CurListView);
  
end;

procedure CopyToClipBoard(FileName:string);
var   DataHandle: THandle;
      DataPointer: PDROPFILES;
begin
  DataHandle := GlobalAlloc(GMEM_DDESHARE or GMEM_MOVEABLE,SizeOf(DROPFILES) 2 Length(FileName));
  DataPointer := PDROPFILES(GlobalLock(DataHandle));
  FillChar(DataPointer^,SizeOf(DROPFILES) 2 Length(FileName),0);

  DataPointer.pFiles:=SizeOf(DROPFILES);
  DataPointer.pt:=Point(0,0);
  DataPointer.fNC:=False;
  DataPointer.fWide:=False;
  Move(FileName[1],Pointer(Integer(DataPointer) SizeOf(DROPFILES))^,Length(FileName));
  GlobalUnlock(DataHandle);
  OpenClipboard(MainForm.Handle);
  EmptyClipboard;
  SetClipboardData(CF_HDROP, DataHandle);
  CloseClipboard;
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);

end;

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;

  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=1)then N_OpenWithNotpad.Enabled := true;
    end;
  end;
  if CurRListItem<>nil then
  begin
    N_NewWin.Enabled := true;
    N_Refresh.Enabled := true;
    N_Favorite.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;

  
end;

//-------------------------------------------------------------------------
function GetDirectorySize(Path: String): Integer; //eg. Path = 'c:\temp\'
var
  SR: TSearchRec;
begin
  Result := 0;
  if path[length(path)]<>'\' then path:=path '\';
  if FindFirst(Path   '*.*', faAnyFile, SR) = 0 then
  begin
    if (sr.Name <> '.') and (sr.Name <> '..') and (sr.Attr = faDirectory) then
      Result := Result   GetDirectorySize(Path Sr.Name '\')
    else
      Result := Result   Sr.Size;
    while FindNext(sr) = 0 do
      if (sr.Name <> '.') and (sr.Name <> '..') and (sr.Attr = faDirectory) then
        Result := Result   GetdirectorySize(Path Sr.Name '\')
      else
        Result := Result   Sr.Size;
    FindClose(sr);
  end;
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) '字节)'),
        'File Size',
        MB_OK);

end;

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

  //DirName:=pTabData(ClientPageCtrl.ActivePage.Tag).MyDir '\';
  FileName:=CurListView.Selected.Caption;
  command:= 'NotePad.exe ' CurDirName FileName;
  winexec(pchar(command),sw_normal);
  
end;

procedure TMainForm.N_NewWinClick(Sender: TObject);
var  Exe: TExecuteThread;
begin

 Exe:=TExecuteThread.Create(true);
 Exe.exeFile := CurDirName '\';
 Exe.exeDir := extractfilepath(Exe.exeFile);
 //caption:=exe.exeFile;
 Exe.FreeOnTerminate := true;
 Exe.Resume;
 
end;

procedure TMainForm.N_FavoriteClick(Sender: TObject);
var TemNode:TTreeNode;
    //ListItem:TListItem;
begin

  //caption:=dirname;
  New(MyItemPtr);
  MyItemPtr^.group := CurGroupName;
  MyItemPtr^.dirName := CurDirName;

  {ListItem:=ListView7.Items.Insert(0);
  listitem.Caption := CurDirName;
  listitem.SubItems.Text := CurGroupName;}

  temNode:=FavoTree.items.AddChild(FavoTree.Items[0],CurDirName);
  temNode.Data := MyItemPtr;
  FavoTree.Items[0].Expand(false);

  //assignfile(f,'Favorite.txt');
  assignfile(f,AppDir '\Favorite.txt');
  if not fileexists(AppDir '\Favorite.txt')then rewrite(f)
  else Append(f);
  writeln(f,trimright(CurGroupName));
  Writeln(f,CurDirName);
  //Flush(f);
  CloseFile(f);

end;

procedure TMainForm.SearchTreeClick(Sender: TObject);
begin
  LanTreeClick(SearchTree);
end;

procedure TMainForm.FavoTreeClick(Sender: TObject);
begin
  LanTreeClick(FavoTree);
end;

//------------------------------------------
function SHFindComputer(pidlRoot: PItemIDList; pidlSavedSearch: PItemIDList): Boolean;
 stdcall; external 'Shell32.dll' index 91;
 //----------------------------------------------
procedure TMainForm.BtnFindComputerClick(Sender: TObject);
var pidlRoot: PItemIDList;
    pidlSavedSearch: PItemIDList;
begin
  pidlRoot:=nil;  //just remove warning;
  pidlSavedSearch:=nil; //just remove warning;
  if not SHFindComputer(pidlRoot,pidlSavedSearch) then showmessage('error occured!');
end;

procedure TMainForm.BtnDOSClick(Sender: TObject);
begin

  if GetVersion<=4 then WinExec('Command.com',SW_SHOW)
  else WinExec('Cmd.exe',SW_SHOW)
  
end;

procedure TMainForm.BtnConfigorClick(Sender: TObject);
begin
  ConfigorForm.Show;
end;

procedure TMainForm.N_RefreshClick(Sender: TObject);
var DirSearcher:TSearchDirThread;
begin

  CurListView.Items.Clear;
  DirSearcher:=TSearchDirThread.create(true);
  DirSearcher.mydir := CurDirName;
  DirSearcher.mygroup := CurGroupName;
  DirSearcher.myList := CurListView;
  DirSearcher.Rlist :=FolderListView;
  DirSearcher.RListItem := pTabData(ClientPageCtrl.ActivePage.Tag).MyRListItem;
  //DirSearcher.myTree := Treeview1;
  DirSearcher.RListItem.ImageIndex := 6;
  DirSearcher.ClickType := InListView;
  DirSearcher.FreeOnTerminate := true;
  DirSearcher.Resume;
  
end;

procedure TMainForm.N_CopyToClick(Sender: TObject);
var i,j:integer;
    b:boolean;
    tems:string;
    TemListItem:TListItem;
begin

  with CopyToForm do
  begin
    for j:=1 to CopyListview.Items.Count do
    begin
      if CopyListview.Items[j-1].ImageIndex = 24 then CopyListview.Items[j-1].Delete;
    end;

    Show;
    caption:='拷贝文件';
    Label2.Caption:=CurDirName;
    //listview1.Items.Clear;
    //caption:=inttostr(CurListView.SelCount);
    for i:=1 to CurListView.Items.Count  do
    begin
    
      if CurListView.Items[i-1].Selected
        then
        begin
          tems:= CurDirName CurListView.Items[i-1].Caption;
          b:=false;
          for j:=1 to CopyListview.Items.Count do
          begin
            if tems = CopyListview.Items[j-1].Caption then b:=true;
            //if listview1.Items[j-1].ImageIndex = 24 then listview1.Items[j-1].Delete;
          end;
          if not b then
          begin
             temListItem:=CopyListview.Items.Add;
             temListItem.ImageIndex := 22;
             temListItem.Caption := tems;
          end;

        end;
    end;
    Combobox1.text:=ExtractFilepath(Combobox1.text);
    BtnCancel.Caption := '取消';
    //speedbutton3.Enabled := true;
    ComboBox1.Items.Add(combobox1.text);
    Label4.Caption := '共' inttostr(CopyListView.Items.Count) '个文件';

  end; //end of with

end;

procedure TMainForm.BtnRefreshTreeClick(Sender: TObject);
var GetDomainThread:TGetDomainThread;
begin

  BtnRefreshTree.Enabled:=false;
  GroupNum:=0;
  FinishNum:=0;
  CanOpen:=false;
  OldFileCount:=0;
  GetDomainThread:=TGetDomainThread.Create(true);
  GetDomainThread.LanTree := SearchTree;
  GetDomainThread.Resume;

end;

procedure TMainForm.N_SaveAllClick(Sender: TObject);
begin

  case BottomPageCtrl.ActivePageIndex of
  0: SaveDlg.FileName := 'LAN_log_All(' DateToStr(now) ')';
  1: SaveDlg.FileName := 'LAN_log_Search(' DateToStr(now) ')';
  2: SaveDlg.FileName := 'LAN_log_Mp3(' DateToStr(now) ')';
  3: SaveDlg.FileName := 'LAN_log_Movie(' DateToStr(now) ')';
  end;

  if SaveDlg.execute then if SaveDlg.filename<>'' then
  case BottomPageCtrl.ActivePageIndex of
  0: StrListAll.SaveToFile(SaveDlg.FileName);
  1: StrListSearch.SaveToFile(SaveDlg.FileName);
  2: StrListMp3.SaveToFile(SaveDlg.FileName);
  3: StrListMovie.SaveToFile(SaveDlg.FileName);
  end; //end of case

end;

procedure TMainForm.Menu_TreeClick(Sender: TObject);
begin

  {LeftPanel.AutoSize := false;
  LeftPanel.Width := 200;}
  LeftDockPanel.Show;
  if LeftPanel.VisibleDockClientCount>0 then LeftPanel.Show;
  Menu_Tree.Checked := true;
  MyEndDock;
  {LeftPanel.AutoSize := true;}

end;

procedure TMainForm.Menu_FolderClick(Sender: TObject);
begin
  {RightPanel.AutoSize := false;
  RightPanel.Width := 160;}
  RightDockPanel.Show;
  if RightPanel.VisibleDockClientCount>0 then
  begin
    RightPanel.Show;
    Splitter3.Align := alLeft;
    Splitter3.Align := alRight;
    //MyEndDock;
  end;
  Menu_Folder.Checked := true;
  {RightPanel.AutoSize := true;}
end;

procedure TMainForm.Menu_ResultClick(Sender: TObject);
begin
  {BottomPanel.AutoSize := false;
  BottomPanel.Height := 100;}
  {BottomPanel.Align := altop;
  BottomPanel.Align := alBottom;}
  BottomDockPanel.Show;
  if BottomPanel.VisibleDockClientCount>0 then BottomPanel.Show;
  Menu_Result.Checked := true;
  MyEndDock;
  {BottomPanel.AutoSize := true;}
end;

procedure TMainForm.BtnAutoSearchClick(Sender: TObject);
begin

   MainSearch:=TMainThread.create(true);
   //MainSearch.OnTerminate := OnMainTerminate;
   MainSearch.FreeOnTerminate := true;
   MainSearch.Resume;
   BtnPause.Enabled := true;
   BtnStop.Enabled := true;
   BtnAutoSearch.Enabled := false;

end;

procedure TMainForm.LanExplorer1Click(Sender: TObject);
begin
  AboutForm.Show;
end;

procedure TMainForm.BtnPauseClick(Sender: TObject);
begin
  if not BtnPause.Down then
  begin
    MainSearch.Suspend;
    BtnStop.Enabled := true;
    //BtnPause.Down := true;
  end
  else
  begin
    MainSearch.Resume;
    BtnStop.Enabled := false;
    //BtnPause.Down := false;
  end;
end;

procedure TMainForm.BtnStopClick(Sender: TObject);
begin

   MainSearch.Suspend;
   MainSearch.Terminate;
   //MainSearch.WaitFor;
   MainSearch.free;
   BtnStop.Enabled := false;
   BtnPause.Enabled := false;
   BtnAutoSearch.Enabled := true;

end;

procedure TMainForm.N_DeleteFavoClick(Sender: TObject);
begin
  if FavoTree.Selected <> nil then TemTreeNode.Delete;
end;

procedure TMainForm.FavoTreePopupMenuPopup(Sender: TObject);
begin
  N_DeleteFavo.Enabled := false;
  if FavoTree.Selected <> nil then
  begin
    N_DeleteFavo.Enabled := true;
    N_DeleteFavo.Caption := '删除 '  FavoTree.Selected.Text;
    TemTreeNode:=FavoTree.Selected;
  end;
end;

procedure TMainForm.IconCheckBoxClick(Sender: TObject);
begin
  bSysIcon:=IconCheckBox.Checked;
end;

procedure TMainForm.AllListBoxDblClick(Sender: TObject);
var fn,dn:string; Exe: TExecuteThread;
begin

  //caption:=inttostr(AllListBox.SelCount);
  if AllListBox.SelCount >0 then
  begin
    fn:= AllListBox.Items[AllListbox.ItemIndex];
    dn:=extractfilepath(fn);
    Exe:=TExecuteThread.Create(true);
    Exe.exeFile := fn;
    Exe.exeDir := dn;
    Exe.FreeOnTerminate := true;
    Exe.Resume;
  end;

end;

procedure TMainForm.MyBottomListViewClick(ListView:TListView);
var  Exe: TExecuteThread;
begin

  if ListView.SelCount <>0 then
  begin
   Exe:=TExecuteThread.Create(true);
   Exe.exeFile := trim(ListView.Selected.SubItems[0]) '\' ListView.Selected.Caption;
   Exe.exeDir := extractfilepath(Exe.exeFile);
   //caption:=exe.exeFile;
   with ListView.Selected do
   begin
   if ImageIndex=1 then ImageIndex := 17 else
   if ImageIndex=17 then ImageIndex := 1 else
   if ImageIndex=0 then ImageIndex:=10;
   end;
   Exe.FreeOnTerminate := true;
   Exe.Resume;
  end;

end;

procedure TMainForm.FindListViewDblClick(Sender: TObject);
begin
  MyBottomListViewClick(FindListView);
end;

procedure TMainForm.Mp3ListViewDblClick(Sender: TObject);
begin
  MyBottomListViewClick(Mp3ListView);
end;

procedure TMainForm.MovieListViewDblClick(Sender: TObject);
begin
  MyBottomListViewClick(MovieListView);
end;

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

  N_BottomCopyTo.Enabled := true;
  N_SaveAll.Enabled := true;
  N_BottomOpen.Enabled := false;
  N_BottomCopy.Enabled := true;
  N_BottomFileSize.Enabled := true;
  case BottomPageCtrl.ActivePageIndex of
  0: begin
       CurBottomListView:=nil;
       if AllListBox.Items.Count=0 then
       begin
         N_SaveAll.Enabled := false;
       end;

       if AllListBox.SelCount <=0 then
       begin
         N_BottomCopyTo.Enabled := false;
         N_BottomCopy.Enabled := false;
         N_BottomFileSize.Enabled := false;
       end
       else
       begin
         if AllListBox.SelCount=1 then N_BottomOpen.Enabled := true;
         
         for i:=1 to AllListBox.Items.Count do
         begin
           if AllListBox.Selected[i-1] then
           if AllListBox.Items[i-1][length(AllListBox.Items[i-1])]='\'
           then N_BottomCopyTo.Enabled := false;
         end;
         
       end;

     end;
  1: CurBottomListView:= FindListView;
  2: CurBottomListView:= Mp3ListView;
  3: CurBottomListView:= MovieListView;
  end; //end of case
  
  if CurBottomListView<>nil then
  begin
    if CurBottomListView.Items.Count=0  then
    begin
      N_SaveAll.Enabled := false;
    end;

    if CurBottomListView.SelCount<=0 then
    begin
      N_BottomCopyTo.Enabled := false;
      N_BottomCopy.Enabled := false;
      N_BottomFileSize.Enabled := false;
    end
    else
    begin
      if CurBottomListView.SelCount=1 then N_BottomOpen.Enabled := true;
      
      for i:=1 to CurBottomListView.Items.Count do
      if (CurBottomListView.Items[i-1].Selected)and(CurBottomListView.Items[i-1].ImageIndex=0)
      then  N_BottomCopyTo.Enabled := false;
    end;
  end;
  
end;


procedure TMainForm.N_BottomOpenClick(Sender: TObject);
begin
  case BottomPageCtrl.ActivePageIndex of
  0: AllListBoxDblClick(Self);
  1: FindListViewDblClick(Self);
  2: Mp3ListViewDblClick(Self);
  3: MovieListViewDblClick(Self);
  end; //end of case
end;

procedure TMainForm.N_BottomCopyClick(Sender: TObject);
var
  FileName:string;
  i:integer;
begin
  
  if CurBottomListView=nil
  then
  begin
    FileName:='';
    for i:=1 to AllListBox.Items.Count do
    if AllListBox.Selected[i-1]
    then FileName:=FileName AllListBox.Items[i-1] #0;
    CopyToClipBoard(FileName);
  end
  else
  begin
    FileName:='';
    for i:=1 to CurBottomListView.Items.Count do
    if CurBottomListView.Items[i-1].Selected
    then FileName:=CurBottomListView.Items[i-1].SubItems[0] '\' CurBottomListView.Items[i-1].Caption;
    CopyToClipBoard(FileName);
  end;
  
end;

procedure TMainForm.N_BottomFileSizeClick(Sender: TObject);
var fulls:string; i,size,SelCount:integer;
begin
  size:=0;

  if CurBottomListView<>nil then
  begin
    SelCount:= CurBottomListView.selcount;
    for i:=1 to  CurBottomListView.Items.Count do
    begin
      if CurBottomListView.Items[i-1].Selected
      then
      begin
        fulls:=CurBottomListView.Items[i-1].SubItems[0] '\' CurBottomListView.Items[i-1].Caption;
        if  CurBottomListView.Items[i-1].ImageIndex=1
        then size:=size  GetFileSize(fulls)
        else size:=size  GetDirectorySize(fulls)
      end;
    end;
  end
  else   // in listbox
  begin
    SelCount:=AllListBox.SelCount;
    for i:=1 to  AllListBox.Items.Count do
    begin
      if AllListBox.Selected[i-1]
      then
      begin
        fulls:=AllListBox.Items[i-1];
        if fulls[length(fulls)]<>'\' then size:=size  GetFileSize(fulls)
        else size:=size  GetDirectorySize(fulls)
      end;
    end;
  end;
  
  ShowMessage(inttostr(SelCount) ' 个文件(夹)' FormatFloat('#,###" KB"',  size/ 1024)
              '(' inttostr(size) '字节)');
end;

procedure TMainForm.N_BottomCopyToClick(Sender: TObject);
var i,j:integer;
    b:boolean;
    tems:string;
    TemListItem:TListItem;
begin

  with CopyToForm do
  begin

    for j:=1 to CopyListview.Items.Count do
    begin
      if CopyListview.Items[j-1].ImageIndex = 24 then CopyListview.Items[j-1].Delete;
    end;

    Show;
    caption:='拷贝文件';
    Label2.Caption:='Any Where';
    //listview1.Items.Clear;
    //caption:=inttostr(CurListView.SelCount);
    if CurBottomListView<>nil then
    for i:=1 to CurBottomListView.Items.Count  do
    begin
      if CurBottomListView.Items[i-1].Selected
        then
        begin
          tems:= CurBottomListView.Items[i-1].SubItems[0] '\' CurBottomListView.Items[i-1].Caption;
          b:=false;
          for j:=1 to CopyListview.Items.Count do
          begin
            if tems = CopyListview.Items[j-1].Caption then b:=true;
            //if listview1.Items[j-1].ImageIndex = 24 then listview1.Items[j-1].Delete;
          end;
          if not b then
          begin
             temListItem:=CopyListview.Items.Add;
             temListItem.ImageIndex := 22;
             temListItem.Caption := tems;
          end;
        end;
    end
    else
    for i:=1 to  AllListBox.Items.Count do
    begin
      if AllListBox.Selected[i-1]
      then
      begin
        tems:=AllListBox.Items[i-1];
        b:=false;
        for j:=1 to CopyListview.Items.Count do
        begin
          if tems=CopyListview.Items[j-1].Caption then b:=true;
        end;
        if not b then
        begin
          temListItem:=CopyListview.Items.Add;
          temListItem.ImageIndex := 22;
          temListItem.Caption := tems;
        end;
      end;
    end;

    Combobox1.text:=ExtractFilepath(Combobox1.text);
    BtnCancel.Caption := '取消';
    //speedbutton3.Enabled := true;
    ComboBox1.Items.Add(combobox1.text);
    Label4.Caption := '共' inttostr(CopyListView.Items.Count) '个文件';

  end; //end of with

end;

procedure TMainForm.StatusBarMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 ReleaseCapture;
 SendMessage(handle,wm_SysCommand,$F012,0);
end;

procedure TMainForm.FormResize(Sender: TObject);
begin

 with Statusbar do
 Panels[2].Width := Width- Panels[0].Width
                         - Panels[1].Width
                         - Panels[3].Width;
                         //- Panels[4].Width;

end;

procedure GetFileProperty(f:string);
var SEI:PSHELLEXECUTEINFOA;
begin
   getmem(sei,sizeof(sei^));
   With SEI^ do
   begin
     cbSize:= sizeof(SEI^);
     fMask:= SEE_MASK_NOCLOSEPROCESS Or SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI;
     wnd:=MainForm.handle;
     lpVerb:= 'properties';
     lpFile:=pchar(f);  //你自己的文件名
     lpParameters:=nil;
     lpDirectory:=nil;
     nShow:=0;
     hInstApp:=hInstance;
     lpIDList:=nil;
   End;
 ShellExecuteEX(SEI);
 freemem(sei);
end;

procedure TMainForm.N_PropertyClick(Sender: TObject);
begin
  GetFileProperty(CurDirName CurListView.Selected.Caption);
end;

end.

标签: 局域网 浏览器

实例下载地址

Pascal 局域网共享资源 源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警