📄 fftp.pas
字号:
unit fFTP;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, FtpCache, Menus, FTPSock, Ftp, StdCtrls, ComCtrls, FtpMsg, FtpListView,
ExtCtrls, FtpTreeView, Clipbrd, Buttons, iniFiles, fDoc, fMain, corelbutton, uHighlighterProcs, uDialogSettings;
type
TfrmFTP = class(TForm)
ftp: TMFtp;
PopupMenu1: TPopupMenu;
LargeIcons1: TMenuItem;
SmallIcons1: TMenuItem;
List1: TMenuItem;
Details1: TMenuItem;
N1: TMenuItem;
CopyLocation1: TMenuItem;
pnlBottom: TPanel;
lblFileName: TLabel;
lblProgress: TLabel;
edtFile: TEdit;
pbProgress: TProgressBar;
btnOK: TCorelButton;
btnCancel: TCorelButton;
pnlTop: TPanel;
btnConnect: TCorelButton;
stbMain: TStatusBar;
lblAccount: TLabel;
pnlCommands: TPanel;
btnRefresh: TSpeedButton;
btnCommand: TSpeedButton;
btnChmod: TSpeedButton;
btnDelete: TSpeedButton;
btnRename: TSpeedButton;
btnMakeDir: TSpeedButton;
btnAccounts: TSpeedButton;
cmbAccounts: TComboBox;
edtFilter: TEdit;
lblFilter: TLabel;
chkClose: TCheckBox;
pnlStore: TPanel;
ftpTree: TMFtpTreeView;
Notebook1: TNotebook;
Splitter2: TSplitter;
ftpList: TMFtpListView;
ftpMessage: TMFtpMessenger;
Splitter1: TSplitter;
procedure FTPFtpBusy(Sender: TObject);
procedure FTPFtpReady(Sender: TObject);
procedure FTPLoggedIn(Sender: TObject);
procedure FTPDirectoryChanged(Sender: TObject);
procedure FTPContentChanged(Sender: TObject);
procedure ftpListDblClick(Sender: TObject);
procedure ftpListEdited(Sender: TObject; Item: TListItem;
var S: String);
procedure FTPFtpInfo(Sender: TObject; info: FtpInfo;
addinfo: String);
procedure FTPFtpQuit(Sender: TObject);
procedure ViewmenuClick(Sender: TObject);
procedure ftpListInfoTip(Sender: TObject; Item: TListItem;
var InfoTip: String);
procedure FormCreate(Sender: TObject);
procedure CopyLocation1Click(Sender: TObject);
procedure PopupMenu1Popup(Sender: TObject);
procedure btnAccountsClick(Sender: TObject);
procedure btnConnectClick(Sender: TObject);
procedure ftpListClick(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure btnMakeDirClick(Sender: TObject);
procedure btnRenameClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
procedure btnChmodClick(Sender: TObject);
procedure btnRefreshClick(Sender: TObject);
procedure btnCommandClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ftpFtpError(Sender: TObject; error: FtpError;
addinfo: String);
procedure btnCancelClick(Sender: TObject);
procedure ftpFileReceived(Sender: TObject);
procedure ftpFileStored(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
curPos: Integer;
{ Private declarations }
public
State: Integer;
IsFTP: Boolean;
{ Public declarations }
procedure LoadItems;
end;
var
frmFTP: TfrmFTP;
implementation
{$R *.dfm}
uses fAccount, fRemote, dMain, fQuickFTP;
procedure TfrmFTP.FTPFtpBusy(Sender: TObject);
begin
Cursor := crDefault;
ftpList.Accept := False;
end;
procedure TfrmFTP.FTPFtpReady(Sender: TObject);
var
strTemp, strTemp2: TStringList;
ini: TIniFile;
i: Integer;
idx: INteger;
begin
if (curPos = 1) and (ftp.CurrentDirectory = ftp.InitialDirectory) then begin
curPos := 0;
ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\accounts\' + cmbAccounts.Text);
ini.WriteString('FTP', 'CurDir', ftp.CurrentDirectory);
// Were in the save state.
// Were not in the save state.
strTemp2 := TStringList.Create;
strTemp := TStringList.Create;
strTemp2.CommaText := edtFile.Text;
if isFTP then begin
ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'accounts\' + cmbAccounts.Text);
ini.WriteString('FTP', 'CurDir', ftp.CurrentDirectory);
// Were in the save state.
ftp.PutFile(ExtractFilePath(Application.ExeName) + 'temp\fileTemp.tmp', edtFile.Text);
dmMain.SelDoc.isFTP := true;
dmMain.SelDoc.FTPName := cmbAccounts.Text;
dmMain.SelDoc.FTPDir := ftp.CurrentDirectory;
dmMain.SelDoc.Caption := cmbAccounts.Text + '\' + ExtractFilename(ExtractFilePath(Application.ExeName) + 'temp\' + edtFile.Text);
dmMain.SelDoc.FileName := ExtractFilePath(Application.ExeName) + 'temp\' + edtFile.Text;
dmMain.SelDoc.sciMain.Lines.SaveToFile(dmMain.SelDoc.Filename);
dmMain.SelDoc.sciMain.Lines.LoadFromFile(dmMain.SelDoc.Filename);
dmMain.SelDoc.DoUpdateCaption;
dmMain.SelDoc.sciMain.Modified := false;
dmMain.SelDoc.sciMain.Highlighter := dmMain.GetHighlighterForFile(dmMain.SelDoc.Filename);
dmMain.SetSelLang(GetLangName(dmMain.SelDoc.sciMain.Highlighter));
idx := frmMain.tcFiles.Tabs.IndexOfObject(dmMain.SelDoc);
frmMain.tcFiles.Tabs[idx] := ExtractFileName(dmMain.SelDoc.Filename);
State := 0;
exit;
end;
if isftp = false then begin
for i:=0 to strTemp2.Count - 1 do
strTemp.Add(ExtractFilePath(Application.ExeName) + 'temp\' + strTemp2[i]);
ftp.GetFile(strTemp2, strTemp);
for i:=0 to strTemp.Count-1 do begin
if FileExists(strTemp[i]) = True then begin
frmMain.NewFTP(strTemp[i], cmbAccounts.Text, ftp.CurrentDirectory);
end;
end;
strTemp.Destroy;
strTemp2.Destroy;
ini.Free;
end;
end;
Cursor := crDefault;
ftpList.Accept := True;
end;
procedure TfrmFTP.FTPLoggedIn(Sender: TObject);
begin
FTP.Refresh;
end;
procedure TfrmFTP.FTPDirectoryChanged(Sender: TObject);
begin
FTP.Refresh;
end;
procedure TfrmFTP.FTPContentChanged(Sender: TObject);
begin
{we want to refresh cache}
if not FTP.Connected then Exit;
with FTP do
begin
Cache := False;
Refresh;
Cache := True;
end;
end;
procedure TfrmFTP.ftpListDblClick(Sender: TObject);
begin
if ftpList.SelectedDirectories.Count > 0 then
if (ftpList.Items[0].Caption = 'Parent Directory') and
(ftpList.SelectedDirectories[0] = 'Parent Directory') then
FTP.ChangeToParentDirectory
else
FTP.ChangeDirectory(ftpList.SelectedDirectories[0])
else if ftpList.SelectedFiles.Count > 0 then
btnOKClick(nil);
end;
procedure TfrmFTP.ftpListEdited(Sender: TObject; Item: TListItem;
var S: String);
begin
FTP.RenameFile(Item.Caption, S);
end;
procedure TfrmFTP.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 TfrmFTP.FTPFtpQuit(Sender: TObject);
begin
ftpTree.Sites.Clear;
ftpList.Items.Clear;
end;
procedure TfrmFTP.ViewmenuClick(Sender: TObject);
begin
ftpList.ViewStyle := TViewStyle(TMenuItem(Sender).Tag);
TMenuItem(Sender).Checked := True;
end;
procedure TfrmFTP.ftpListInfoTip(Sender: TObject; Item: TListItem;
var InfoTip: String);
begin
InfoTip := Item.Caption;
end;
procedure TfrmFTP.FormCreate(Sender: TObject);
var
ini: TiniFile;
begin
// clear outdated cache
ini:= TIniFile.Create(ExtractFilePath(Application.ExeName) + 'ini\FTP.ini');
LoadItems;
cmbAccounts.ItemIndex := ini.ReadInteger('FTP', 'Account', -1);
CleanCache(True, True, 7);
end;
procedure TfrmFTP.CopyLocation1Click(Sender: TObject);
begin
with TClipBoard.Create do
try
if ftpList.SelectedDirectories.Count = 1 then
SetTextBuf(PChar(FTP.URL + ftpList.SelectedDirectories[0] + '/'))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -