📄 ftptst1.pas
字号:
Display(StrPas(Data.szDescription));
Display(StrPas(Data.szSystemStatus));
end;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.FormClose(Sender: TObject;
var Action: TCloseAction);
var
IniFile : TIniFile;
begin
IniFile := TIniFile.Create(FIniFileName);
IniFile.WriteString(SectionData, KeyHostName, HostNameEdit.Text);
IniFile.WriteString(SectionData, KeyPort, PortEdit.Text);
IniFile.WriteString(SectionData, KeyUserName, UserNameEdit.Text);
IniFile.WriteString(SectionData, KeyPassWord, PassWordEdit.Text);
IniFile.WriteString(SectionData, KeyHostDir, HostDirEdit.Text);
IniFile.WriteString(SectionData, KeyHostFile, HostFileEdit.Text);
IniFile.WriteString(SectionData, KeyLocalFile, LocalFileEdit.Text);
IniFile.WriteString(SectionData, KeyResumeAt, ResumeAtEdit.Text);
IniFile.WriteString(SectionData, KeyPortStart, DataPortRangeStartEdit.Text);
IniFile.WriteString(SectionData, KeyPortEnd, DataPortRangeEndEdit.Text);
IniFile.WriteInteger(SectionWindow, KeyTop, Top);
IniFile.WriteInteger(SectionWindow, KeyLeft, Left);
IniFile.WriteInteger(SectionWindow, KeyWidth, Width);
IniFile.WriteInteger(SectionWindow, KeyHeight, Height);
IniFile.Free;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{$IFDEF VER80}
function DeleteFile(const FileName: string): Boolean;
var
F : File of char;
begin
Result := TRUE;
try
AssignFile(F, FileName);
Erase(F);
except
Result := FALSE;
end;
end;
{$ENDIF}
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.Display(const Msg : String);
var
I : Integer;
begin
DisplayMemo.Lines.BeginUpdate;
try
if DisplayMemo.Lines.Count > 200 then begin
for I := 1 to 50 do
DisplayMemo.Lines.Delete(0);
end;
DisplayMemo.Lines.Add(Msg);
finally
DisplayMemo.Lines.EndUpdate;
{$IFNDEF VER80}
SendMessage(DisplayMemo.Handle, EM_SCROLLCARET, 0, 0);
{$ENDIF}
end;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.DisplayHandler(Sender : TObject; var Msg : String);
begin
Display(Msg);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.ExitButtonClick(Sender: TObject);
begin
Close;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.FtpClient1Progress(Sender: TObject;
Count: Longint; var Abort: Boolean);
begin
FProgressCount := Count;
{ Be sure to update screen only once every second }
if FLastProgress < GetTickCount then begin
FLastProgress := GetTickCount + 1000;
InfoLabel.Caption := IntToStr(FProgressCount);
InfoLabel.Repaint;
end;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.DisplayFile(FileName : String);
begin
try
DirectoryForm.DirListBox.Items.LoadFromFile(FileName);
except
DirectoryForm.DirListBox.Clear;
end;
DirectoryForm.ShowModal;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.FtpClient1RequestDone(Sender: TObject;
RqType: TFtpRequest; Error: Word);
begin
Display('Request ' + IntToStr(Ord(RqType)) + ' Done.');
Display('StatusCode = ' + IntToStr(FtpClient1.StatusCode));
Display('LastResponse was : ''' + FtpClient1.LastResponse + '''');
if Error = 0 then
Display('No error')
else
Display('Error = ' + IntToStr(Error) +
' (' + FtpClient1.ErrorMessage + ')');
{ Display last progress value }
InfoLabel.Caption := IntToStr(FProgressCount);
if Error = 0 then begin
case RqType of
ftpDirAsync, ftpDirectoryAsync,
ftpLsAsync, ftpListAsync : DisplayFile(TEMP_FILE_NAME);
ftpSizeAsync : Display(
'File size is ' +
IntToStr(FtpClient1.SizeResult) +
' bytes' );
ftpPwdAsync, ftpMkdAsync,
ftpCDupAsync, ftpCwdAsync : Display(
'Directory is "' +
FtpClient1.DirResult + '"');
end;
end;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.FtpClient1SessionConnected(Sender: TObject;
Error: Word);
begin
Display('Session Connected, error = ' + IntToStr(Error));
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.FtpClient1SessionClosed(Sender: TObject;
Error: Word);
begin
Display('Session Closed, error = ' + IntToStr(Error));
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.FtpClient1StateChange(Sender: TObject);
begin
StateLabel.Caption := IntToStr(Ord(FtpClient1.State));
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ This procedure execute either the synchronous command or the asynchronous }
{ command depending on the SyncCheckBox state. }
{ All date from UI is copied to FTP component properties. }
procedure TFtpReceiveForm.ExecuteCmd(SyncCmd : TSyncCmd; ASyncCmd : TAsyncCmd);
begin
Display('Executing Requested Command');
{ Initialize progress stuff }
FLastProgress := 0;
FProgressCount := 0;
FtpClient1.HostName := HostNameEdit.Text;
FtpClient1.Port := PortEdit.Text;
FtpClient1.DataPortRangeStart := StrToInt(Trim(DataPortRangeStartEdit.Text));
FtpClient1.DataPortRangeEnd := StrToInt(Trim(DataPortRangeEndEdit.Text));
FtpClient1.UserName := UserNameEdit.Text;
FtpClient1.Password := PasswordEdit.Text;
FtpClient1.HostDirName := HostDirEdit.Text;
FtpClient1.HostFileName := HostFileEdit.Text;
FtpClient1.LocalFileName := LocalFileEdit.Text;
FtpClient1.Passive := PassiveCheckBox.Checked;
FtpClient1.Binary := cbBinary.Checked;
FtpClient1.ResumeAt := StrToInt(ResumeAtEdit.Text);
FtpClient1.DisplayFileFlag := cbDisplay.Checked;
FtpClient1.OnDisplay := DisplayHandler;
{ For directory functions, we use a temporary file }
if (@SyncCmd = @TFtpClient.Dir) or (@SyncCmd = @TFtpClient.Directory) or
(@SyncCmd = @TFtpClient.Ls) or (@SyncCmd = @TFtpClient.List) then begin
DeleteFile(TEMP_FILE_NAME);
FtpClient1.LocalFileName := TEMP_FILE_NAME;
end;
if NoAutoResumeAtCheckBox.Checked then
FtpClient1.Options := FtpClient1.Options + [ftpNoAutoResumeAt]
else
FtpClient1.Options := FtpClient1.Options - [ftpNoAutoResumeAt];
if AuthSslCheckBox.Checked then
FtpClient1.Options := FtpClient1.Options + [ftpAuthSsl]
else
FtpClient1.Options := FtpClient1.Options - [ftpAuthSsl];
if SyncCheckBox.Checked then begin
if SyncCmd then
Display('Command Success')
else
Display('Command Failure');
end
else
ASyncCmd;
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.OpenAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.Open, FtpClient1.OpenAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.QuitAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.Quit, FtpClient1.QuitAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.CwdAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.Cwd, FtpClient1.CwdAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.UserAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.User, FtpClient1.UserAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.PassAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.Pass, FtpClient1.PassAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.ConnectAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.Connect, FtpClient1.ConnectAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.GetAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.Get, FtpClient1.GetAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.ReceiveAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.Receive, FtpClient1.ReceiveAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.AbortAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.Abort, FtpClient1.AbortAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.DirAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.Dir, FtpClient1.DirAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.DirectoryAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.Directory, FtpClient1.DirectoryAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.LsAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.Ls, FtpClient1.LsAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.ListAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.List, FtpClient1.ListAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.SystAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.Syst, FtpClient1.SystAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.SystemAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.System, FtpClient1.SystemAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.FileSizeAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.FileSize, FtpClient1.FileSizeAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.SizeAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.Size, FtpClient1.SizeAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.MkdAsyncButtonClick(Sender: TObject);
begin
ExecuteCmd(FtpClient1.Mkd, FtpClient1.MkdAsync);
end;
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TFtpReceiveForm.MkdirAsyncButtonClick(Sender: TObject);
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -