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

📄 fftp.pas

📁 Delphi编写的一个支持语法高亮显示和很多语言的文本编辑器
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -