⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fquickftp.pas

📁 Delphi编写的一个支持语法高亮显示和很多语言的文本编辑器
💻 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 + -