end;
procedure TMyFtp.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if FTP.Busy then
FTP.Cancel;
FTP.Quit;
while FTP.Busy do
Application.ProcessMessages;
function TMyFtp.CreateItem(const FileName, Attributes, Size, Date: Variant): TListItem;
var
Ext: String;
ShFileInfo: TSHFILEINFO;
Result := FileList.Items.Add;
with Result do
Caption := FixCase(Trim(FileName));
if Size > 0 then
if Size div 1024 <> 0 then
SubItems.Add(IntToStr(Size div 1024));
SubItems[0] := SubItems[0] + 'KB';
end
else
SubItems.Add(Size);
SubItems.Add('');
if Attributes = '1' then
SubItems.Add('File Folder');
ImageIndex := 3;
Ext := ExtractFileExt(FileName);
ShGetFileInfo(PChar('c:\*' + Ext), 0, SHFileInfo, SizeOf(SHFileInfo),
SHGFI_SMALLICON or SHGFI_SYSICONINDEX or SHGFI_TYPENAME);
if Length(SHFileInfo.szTypeName) = 0 then
if Length(Ext) > 0 then
System.Delete(Ext, 1, 1);
SubItems.Add(Ext + ' File');
SubItems.Add('File');
SubItems.Add(SHFileInfo.szTypeName);
ImageIndex := SHFileInfo.iIcon;
SubItems.Add(Date);
procedure TMyFtp.Disconnect;
procedure TMyFtp.FormCreate(Sender: TObject);
SHFileInfo: TSHFileInfo;
with DirTree do
DirTree.Images := SmallImages;
SmallImages.ResourceLoad(rtBitmap, 'IMAGES', clOlive);
with FileList do
SmallImages := TImageList.CreateSize(16,16);
SmallImages.ShareImages := True;
SmallImages.Handle := ShGetFileInfo('*.*', 0, SHFileInfo,
SizeOf(SHFileInfo), SHGFI_SMALLICON or SHGFI_ICON or SHGFI_SYSICONINDEX);
LargeImages := TImageList.Create(nil);
LargeImages.ShareImages := True;
LargeImages.Handle := ShGetFileInfo('*.*', 0, SHFileInfo,
SizeOf(SHFileInfo), SHGFI_LARGEICON or SHGFI_ICON or SHGFI_SYSICONINDEX);
procedure TMyFtp.FTPBusy(Sender: TObject; isBusy: Wordbool);
if isBusy then
Screen.Cursor := crHourGlass;
FileList.Items.BeginUpdate;
FileList.Items.Clear;
Screen.Cursor := crDefault;
FileList.Items.EndUpdate;
function TMyFtp.NodePath(Node: TTreeNode): String;
if Node = Root then
Result := '.'
Result := NodePath(Node.Parent) + '/' + Node.Text;
procedure TMyFtp.DirTreeChange(Sender: TObject; Node: TTreeNode);
NP: String;
if (FTP.State <> prcConnected) or FTP.Busy then exit;
if Node <> nil then
NP := NodePath(DirTree.Selected);
FTP.List(NP);
Label2.Caption := Format('Contents of: ''%s/''',[NP]);
procedure TMyFtp.RefreshBtnClick(Sender: TObject);
FTP.List(NodePath(DirTree.Selected));
procedure TMyFtp.DirTreeChanging(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
AllowChange := not FTP.Busy;
procedure TMyFtp.FTPStateChanged(Sender: TObject; State: Smallint);
with FTP, Statusbar.Panels[0] do
case State of
prcConnecting : Text := 'Connecting';
prcResolvingHost: Text := 'Connecting';
prcHostResolved : Text := 'Host resolved';
prcConnected :
Text := 'Connected to: ' + RemoteHost;
ConnectBtn.Hint := 'Disconnect';
FileNewItem.Enabled := True;
ViewLargeItem.Enabled := True;
ViewSmallItem.Enabled := True;
ViewListItem.Enabled := True;
ViewDetailsItem.Enabled := True;
ViewRefreshItem.Enabled := True;
ToolsDisconnectItem.Enabled := True;
LargeBtn.Enabled := True;
SmallBtn.Enabled := True;
ListBtn.Enabled := True;
DetailsBtn.Enabled := True;
RefreshBtn.Enabled := True;
prcDisconnecting: Text := 'Disconnecting';
prcDisconnected :
Text := 'Disconnected';
ConnectBtn.Hint := 'Connect';
DirTree.Items.Clear;
FileNewItem.Enabled := False;
ViewLargeItem.Enabled := False;
ViewSmallItem.Enabled := False;
ViewListItem.Enabled := False;
ViewDetailsItem.Enabled := False;
ViewRefreshItem.Enabled := False;
ToolsDisconnectItem.Enabled := False;
LargeBtn.Enabled := False;
SmallBtn.Enabled := False;
ListBtn.Enabled := False;
DetailsBtn.Enabled := False;
RefreshBtn.Enabled := False;
procedure TMyFtp.Open1Click(Sender: TObject);
DirTree.Items.BeginUpdate;
try
finally
DirTree.Items.EndUpdate;
procedure TMyFtp.FileExitItemClick(Sender: TObject);
Close;
procedure TMyFtp.FormResize(Sender: TObject);
Statusbar.Panels[0].Width := Width - 150;
procedure TMyFtp.ViewLargeItemClick(Sender: TObject);
FileList.ViewStyle := vsIcon;
procedure TMyFtp.ViewSmallItemClick(Sender: TObject);
FileList.ViewStyle := vsSmallIcon;
procedure TMyFtp.ViewListItemClick(Sender: TObject);
FileList.ViewStyle := vsList;
procedure TMyFtp.ViewDetailsItemClick(Sender: TObject);
FileList.ViewStyle := vsReport;
procedure TMyFtp.ViewRefreshItemClick(Sender: TObject);
DirTreeChange(nil, DirTree.Selected);
procedure TMyFtp.CopyItemClick(Sender: TObject);
SaveDialog1.FileName := FileList.Selected.Caption;
if SaveDialog1.Execute then
FTP.GetFile(NodePath(DirTree.Selected) + '/' + FileList.Selected.Caption,
SaveDialog1.FileName);
procedure TMyFtp.ToolsDisconnectItemClick(Sender: TObject);
DisConnect;
procedure TMyFtp.FileNewItemClick(Sender: TObject);
DirName: String;
if InputQuery('Input Box', 'Prompt', DirName) then
FTP.CreateDir(NodePath(DirTree.Selected) + '/' + DirName);
procedure TMyFtp.DeleteItemClick(Sender: TObject);
if ActiveControl = DirTree then
FTP.DeleteDir(NodePath(DirTree.Selected));
if ActiveControl = FileList then
FTP.DeleteFile(NodePath(DirTree.Selected) + '/' + FileList.Selected.Caption);
procedure TMyFtp.PasteFromItemClick(Sender: TObject);
if OpenDialog1.Execute then
FTP.PutFile(OpenDialog1.FileName, NodePath(DirTree.Selected));
procedure TMyFtp.FilePopupPopup(Sender: TObject);
CopyItem.Enabled := (ActiveControl = FileList) and (FileList.Selected <> nil);
PasteFromItem.Enabled := (ActiveControl = DirTree) and (DirTree.Selected <> nil);
DeleteItem.Enabled := (ActiveControl = FileList) and (FileList.Selected <> nil);
RenameItem.Enabled := (ActiveControl = FileList) and (FileList.Selected <> nil);
procedure TMyFtp.FileMenuClick(Sender: TObject);
FileCopyItem.Enabled := (ActiveControl = FileList) and (FileList.Selected <> nil);
FileDeleteItem.Enabled := (ActiveControl = FileList) and (FileList.Selected <> nil);
FileRenameItem.Enabled := (ActiveControl = FileList) and (FileList.Selected <> nil);
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17