📄 main.pas
字号:
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 + -