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