📄 fquickftp.pas
字号:
unit fQuickFTP;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DockPanel, ComCtrls, StdCtrls, FTPSock, Ftp, FTPListView, inifiles,
FtpMsg, FtpTreeView, ftpCache, ImgList, Menus, fRemote;
type
TfrmQuickFTP = class(TDockableForm)
cmbFTP: TComboBox;
ftpMessage: TMFtpMessenger;
ftp: TMFTP;
lstFTP: TMFtpListView;
ftpTree: TMFtpTreeView;
pbProgress: TProgressBar;
popFTP: TPopupMenu;
Accounts1: TMenuItem;
MakeDirectory1: TMenuItem;
Rename1: TMenuItem;
Delete1: TMenuItem;
CHMOD1: TMenuItem;
SendCommand1: TMenuItem;
Refresh1: TMenuItem;
imgFTP: TImageList;
procedure FormResize(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure cmbFTPChange(Sender: TObject);
procedure ftpDirectoryChanged(Sender: TObject);
procedure ftpLoggedIn(Sender: TObject);
procedure lstFTPDblClick(Sender: TObject);
procedure ftpFtpInfo(Sender: TObject; info: FtpInfo; addinfo: String);
procedure ftpFtpBusy(Sender: TObject);
procedure ftpFileReceived(Sender: TObject);
procedure ftpFtpReady(Sender: TObject);
procedure LoadItems;
procedure Accounts1Click(Sender: TObject);
procedure Refresh1Click(Sender: TObject);
procedure MakeDirectory1Click(Sender: TObject);
procedure Rename1Click(Sender: TObject);
procedure Delete1Click(Sender: TObject);
procedure CHMOD1Click(Sender: TObject);
procedure SendCommand1Click(Sender: TObject);
private
{ Private declarations }
public
strTemp1, strTemp2: String;
bDownloaded: Boolean;
{ Public declarations }
end;
var
frmQuickFTP: TfrmQuickFTP;
implementation
uses fMain, fAccount;
{$R *.dfm}
procedure TfrmQuickFTP.FormResize(Sender: TObject);
begin
with cmbFTP do begin
Left := 0;
Top := 0;
Width := self.ClientWidth;
end;
with ftptree do begin
Left := 0;
Top := cmbFTP.Height + 2;
Width := Self.ClientWidth;
end;
With lstFTP Do begin
Left := 0;
Top := ftpTree.Height + ftpTree.Top + 2;
Width := Self.ClientWidth;
Height := Self.ClientHeight - cmbftp.Height - 4 - ftpMessage.Height-6 - ftpTree.Height - pbProgress.Height;
end;
with ftpMessage do begin
Left := 0;
Top := lstFTP.Top + lstFTP.Height + 2;
Width := Self.ClientWidth;
end;
with pbProgress do begin
Left := 0;
Top := ftpMessage.Top + ftpMessage.Height + 2;
Width := Self.ClientWidth;
end;
end;
procedure TfrmQuickFTP.FormCreate(Sender: TObject);
begin
LoadItems;
CLeanCache(true,true,7);
end;
procedure TfrmQuickFTP.LoadItems;
var
SRec : TSearchRec;
b: Boolean;
begin
cmbFTP.Clear;
b:=(FindFirst(ExtractFilePath(Application.ExeName) + 'accounts\*.ftp',faAnyFile, SRec)=0);
while b do begin
cmbFTP.Items.Add(SRec.Name);
b:=(FindNext(sRec)=0);
end;
end;
procedure TfrmQuickFTP.cmbFTPChange(Sender: TObject);
var
ini: TIniFile;
begin
ftp.Disconnect;
lstFTp.Clear;
ftpTree.Items.Clear;
ftp.CleanupInstance;
ini := TInifile.Create(ExtractFilePath(Application.ExeName) + 'accounts\' + cmbFTP.Text);
ftp.Server := ini.Readstring('FTP', 'URL', '');
ftp.username := ini.Readstring('FTP', 'Username', '');
ftp.Password := ini.Readstring('FTP', 'Password', '');
ftp.Port := ini.ReadInteger('FTP', 'Port', 0);
ftp.ServerType := TMFTPServerType(ini.ReadInteger('FTP', 'ServerType', 0));
ftp.TransferMode := TMFTPTransferType(ini.ReadInteger('FTP', 'TransferType', 0));
ftp.InitialDirectory := Ini.ReadString('FTP', 'CurDir', '');
if (ini.ReadBool('FTP', 'UseProxy', false)) then
ftp.ProxyServer := ini.ReadString('FTP', 'ProxyServer', '');
ftp.Login;
ini.Destroy;
end;
procedure TfrmQuickFTP.ftpDirectoryChanged(Sender: TObject);
begin
if not FTP.Connected then Exit;
with FTP do
begin
Cache := False;
Refresh;
Cache := True;
end;
end;
procedure TfrmQuickFTP.ftpLoggedIn(Sender: TObject);
begin
if not FTP.Connected then Exit;
with FTP do
begin
Cache := False;
Refresh;
Cache := True;
end;
end;
procedure TfrmQuickFTP.lstFTPDblClick(Sender: TObject);
begin
if lstFTP.Accept = false then exit;
if lstFTP.IsDirectory(lstftp.Selected) = false then begin
strTemp1 := lstFTP.Selected.Caption;
strTemp2 := ExtractFilePath(Application.ExeName) + 'temp\' + strTemp1;
FTP.GetFile(strTemp1, strTemp2);
bDownloaded := True;
end
else begin
if lstFTP.SelectedDirectories.Count > 0 then
if (lstFTP.Items[0].Caption = 'Parent Directory') and
(lstFTP.SelectedDirectories[0] = 'Parent Directory') then
FTP.ChangeToParentDirectory
else
FTP.ChangeDirectory(lstFTP.SelectedDirectories[0])
end;
end;
procedure TfrmQuickFTP.ftpFtpInfo(Sender: TObject; info: FtpInfo;
addinfo: String);
begin
case info of
ftpDataTrace:
if pbProgress.Visible then
pbProgress.Position := FTP.BytesTransferred;
ftpFileSize:
pbProgress.Max := StrToInt(addinfo);
end;
end;
procedure TfrmQuickFTP.ftpFtpBusy(Sender: TObject);
begin
Cursor := crDefault;
lstFTP.Accept := False;
end;
procedure TfrmQuickFTP.ftpFileReceived(Sender: TObject);
begin
frmMain.NewFTP(strTemp2, cmbFTP.Text, ftp.CurrentDirectory);
lstFTP.Accept := True;
end;
procedure TfrmQuickFTP.ftpFtpReady(Sender: TObject);
begin
lstFTP.Accept := true;
end;
procedure TfrmQuickFTP.Accounts1Click(Sender: TObject);
var
i: Integer;
begin
frmAccount := TfrmAccount.Create(nil);
frmAccount.ShowModal;
if frmQuickFTP <> nil then frmQuickFTP.LoadItems;
end;
procedure TfrmQuickFTP.Refresh1Click(Sender: TObject);
begin
ftp.Cache := false;
ftp.Refresh;
ftp.Cache := True;
end;
procedure TfrmQuickFTP.MakeDirectory1Click(Sender: TObject);
var S: String;
begin
if InputQuery('New Directory', 'What name is the new directory?', S) then
Ftp.CreateDirectory(S);
end;
procedure TfrmQuickFTP.Rename1Click(Sender: TObject);
var S: String;
begin
if InputQuery('Rename File', 'What do you want to rename it to?', S) then
if lstFTP.Selected = nil then
Ftp.RenameFile(ftpTree.Selected.Text, s)
else
ftp.RenameFile(lstFTP.Selected.Caption,s);
end;
procedure TfrmQuickFTP.Delete1Click(Sender: TObject);
begin
if lstFTP.Selected = nil then exit;
ftp.DeleteFile(lstFTP.SelectedFiles);
ftp.DeleteDirectory(lstFTP.SelectedDirectories);
end;
procedure TfrmQuickFTP.CHMOD1Click(Sender: TObject);
var
frmRemote: TfrmRemotePermissions;
begin
if lstFTP.Selected = nil then exit;
frmRemote := TfrmRemotePermissions.Create(self);
frmRemote.ShowModal;
if frmRemote.Execute = True then begin
ftp.FileSetAttr(lstFTP.Selected.Caption, frmRemote.chkORead.Checked, frmRemote.chkOWrite.Checked,frmRemote.chkOExecute.Checked, frmRemote.chkGRead.Checked, frmRemote.chkGWrite.Checked, frmRemote.chkGExecute.checked, frmRemote.chkTread.Checked, frmRemote.chkTWrite.checked, frmRemote.chkTExecute.Checked);
ftp.Cache := false;
ftp.Refresh;
ftp.Cache := True;
end;
end;
procedure TfrmQuickFTP.SendCommand1Click(Sender: TObject);
var
s: String;
begin
if InputQuery('Execute Command', 'Enter the command you would like to execute.', S) then begin
ftp.IssueCommand(s);
ftp.Cache := false;
ftp.Refresh;
ftp.Cache := True;
end;
refresh1click(nil);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -