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

📄 main.pas

📁 vpn网上邻居搜索器 工作组 未打开的工作组 正在搜索的工作组 已打开的工作组 无法打开的工作组 主机 未打开的主机 正在搜索的主机 打开的主机(无须登录) 打开的主机(以gues
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    end;
    ClientPageCtrl.ActivePageIndex :=tabsheetx.TabIndex;
    //RightPageCtrl.ActivePageIndex:=1;
    DirSearcher:=TSearchDirThread.create(true);
    DirSearcher.mydir := DirName;
    //DirSearcher.mygroup := groupname;
    DirSearcher.myList := TemListView;
    //DirSearcher.Rlist := ShareListView;
    CurListView:=TemListView;

    newListItem:=ShareListview.Items.Insert(0);
    newListItem.Caption := extractfilename(DirSearcher.mydir);
    new(ListItemPtr);
    ListItemPtr.index := TabSheetX.TabIndex;
    ListItemPtr.count := -1;  //old history
    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);


    AddCap(GroupName,DirName);

    DirSearcher.RListItem := NewListItem;
    DirSearcher.ClickType := InListView;
    DirSearcher.FreeOnTerminate := true;
    DirSearcher.Resume;
  end
  //****************************
  else
  begin
    Exe:=TExecuteThread.Create(true);
    Exe.exeFile := DirName+'\'+filename;
    Exe.exeDir := DirName;
    Exe.FreeOnTerminate := true;
    Exe.Resume;
    //ExecuteFile(dir+'\'+filename,'',dir,SW_SHOW);
  end;

end;

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

  AppDir:=ExtractFilePath(ParamStr(0));
  OS:=GetOSVersion;
  //if os=oswinxp then showmessage('ok,xp');
  FileList := TStringList.Create;

  TrayIcon := TTrayIcon.Create(Self, Application, TrayPopup, Handle, false);

  //InfoPanel.BevelOuter := bvNone;
  ClientPanel.BevelOuter := bvNone;
  LeftPanel.BevelOuter:=bvNone;
  //RightPanel.BevelOuter:=bvNone;
  BottomPanel.BevelOuter:=bvNone;

  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.MyLanTree := SearchTree;
  GetDomainThread.Resume;

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

  OpenIni;
  OpenFavorite;
  OpenHistory;

  BrowseListView.OnDblClick := MyListViewClick;

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

  with ClientPageCtrl do
  begin
    // remove PageControl border
    FOriginalPageControlWndProc1 := WindowProc;
    WindowProc := PageControlWndProc1;
    Realign;
    ActivePageIndex := 0;
  end;

  {with RightPageCtrl do
  begin
    // remove PageControl border
    FOriginalPageControlWndProc2 := WindowProc;
    WindowProc := PageControlWndProc2;
    Realign;
    ActivePageIndex := 0;
  end;}

  with LeftPageCtrl do
  begin
    // remove PageControl border
    FOriginalPageControlWndProc3 := WindowProc;
    WindowProc := PageControlWndProc3;
    Realign;
    ActivePageIndex := 0;
  end;

  with BottomPageCtrl do
  begin
    // remove PageControl border
    FOriginalPageControlWndProc4 := WindowProc;
    WindowProc := PageControlWndProc4;
    Realign;
    ActivePageIndex := 0;
  end;

  with SearchPageCtrl do
  begin
    // remove PageControl border
    FOriginalPageControlWndProc5 := WindowProc;
    WindowProc := PageControlWndProc5;
    Realign;
    ActivePageIndex := 0;
  end;

  CopyFileList := TStringList.Create;

end;

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

  SaveIni;
  SaveFavorite;
  SaveHistory;

  StrListAll.Free;
  StrListSearch.Free;
  StrListMp3.Free;
  StrListMovie.Free;
  FileList.Free;

  DisposeLanTree(SearchTree);
  DisposeLanTree(FavoTree);
  DisposeLanTree(FindTree);
  DisposeLanTree(HistoryTree);
  DisposeListView;
  DisposeTabData;
  DisposeRightList(ShareListView);
  
end;

procedure TMainForm.DisposeRightList(LV: TListView);
var
  i: integer;
begin

  for i := 0 to LV.Items.Count-1 do
  begin
    if LV.Items[i].Data <> nil then
    begin
      try
        Dispose(PListItem(LV.Items[i].Data));
        LV.Items[i].Data := nil;
      except {do nothing} end;
    end;
  end;
  
end;

procedure TMainForm.DisposeTabData;
var
  i: integer;
begin
  for i := 0 to ClientPageCtrl.PageCount - 1 do
  begin
     if ClientPageCtrl.Pages[i].Tag<>0 then
     begin
       try
         dispose(pTabData(ClientPageCtrl.Pages[i].Tag));
         ClientPageCtrl.Pages[i].Tag := 0;
       except {do nothing} end;
     end;
  end;
end;

procedure DisposeListViewData(LV: TListView);
var
  i: integer;
begin

  for i := 0 to LV.Items.Count - 1 do
  begin
    if LV.Items[i].Data <> nil then
    begin
      try
        Dispose(PFileItem(LV.Items[i].Data));
        LV.Items[i].Data := nil;
      except {do nothing} end;
    end;
  end;    

end;

procedure TMainForm.DisposeListView;
var
  i: integer;
begin
  DisposeListViewData(BrowseListView);
  for i := 1 to ClientPageCtrl.PageCount - 1 do
  begin
    DisposeListViewData(ClientPageCtrl.Pages[i].Components[0] as TListView);
  end;
end;

procedure DisposeTreeNodeData(Node: TTreeNode);
var
  i: integer;
begin
  try
    if {pMyTreeItem}(Node.data) <> nil then
    begin
      try
        dispose(pMyTreeItem(Node.Data));
        Node.Data := nil;
      except {do nothing} end;
    end;

    if Node.HasChildren then
    begin
      for i := 0 to Node.Count - 1 do
      begin
        try
          DisposeTreeNodeData(Node.Item[i]);
        except {do nothing} end;
      end;
    end;
  except on EInvalidPointer do {ShowMessage(Node.Text)};
  end; //end of try
end;

procedure TMainForm.DisposeLanTree(DTree:TTreeView);
var
  i: integer;
begin
  if (DTree.Items.Count <> 0)and(DTree.Items[0].Count <> 0) then
  for i := 0 to DTree.Items[0].Count - 1 do DisposeTreeNodeData(DTree.Items[0].Item[i]);
end;

procedure TMainForm.LanTreeClick(LanTree:TTreeView);
var
  GroupSearcher : TSearchGroupThread;
  HostSearcher  : TSearchHostThread;
  DirSearcher   : TSearchDirThread;
  Exe           : TExecuteThread;
  TemListView   : TListView;
  ListItem      : TListItem;
  TemDirName    : string;
  ListItemPtr   : PListItem;
  TabDataPtr    : pTabData;
begin

  if (LanTree.Selected = nil)or(LanTree.Selected = LanTree.Items[0]) then exit;
  //OldFileCount:=AllListBox.Items.Count;

  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.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;
    //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);
    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;
  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;

⌨️ 快捷键说明

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