FilesDlg.pas
上传用户:llfxmlw
上传日期:2009-09-14
资源大小:335k
文件大小:6k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit FilesDlg;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5.   ComCtrls, ExtCtrls, Buttons, StdCtrls, ImgList, Menus;
  6. type
  7.   TFilesForm = class(TForm)
  8.     Panel1: TPanel;
  9.     FileList: TListView;
  10.     DriveCombo: TComboBox;
  11.     GetDirBut: TSpeedButton;
  12.     BackBut: TSpeedButton;
  13.     DirLabel: TLabel;
  14.     SaveDialog1: TSaveDialog;
  15.     ImageList1: TImageList;
  16.     FilePopup: TPopupMenu;
  17.     GetFile1: TMenuItem;
  18.     N1: TMenuItem;
  19.     LaunchFile1: TMenuItem;
  20.     procedure GetDirButClick(Sender: TObject);
  21.     procedure FileListDblClick(Sender: TObject);
  22.     procedure BackButClick(Sender: TObject);
  23.     procedure FormCreate(Sender: TObject);
  24.     procedure FormDestroy(Sender: TObject);
  25.     procedure DriveComboChange(Sender: TObject);
  26.     procedure FileListCompare(Sender: TObject; Item1, Item2: TListItem;
  27.       Data: Integer; var Compare: Integer);
  28.     procedure LaunchFile1Click(Sender: TObject);
  29.   private
  30.     { Private declarations }
  31.   public
  32.     CurDir    : string;
  33.     DirStack  : TStringList;
  34.     CurFile   : string;
  35.     procedure SetDriveList(const DriveList: string);
  36.     procedure SetDirData(const DirData: string);
  37.     procedure SetFileData(const FileData: string);
  38.   end;
  39. var
  40.   FilesForm: TFilesForm;
  41. implementation
  42. uses ClientFrm, RemConMessages;
  43. {$R *.DFM}
  44. function IsDir(const FileName: string): boolean;
  45. begin
  46.    Result := Copy(FileName, Length(FileName), 1) = '';
  47. end;
  48. procedure TFilesForm.SetDriveList(const DriveList: string);
  49. var
  50.    i       : integer;
  51.    OrigIdx : integer;
  52.    s       : string;
  53. begin
  54.    OrigIdx := DriveCombo.ItemIndex;
  55.    DriveCombo.Items.Text := DriveList;
  56.    if OrigIdx = -1 then begin
  57.       for i := 0 to DriveCombo.Items.Count-1 do begin
  58.          s := DriveCombo.Items[i];
  59.          if UpperCase(Copy(s, 1, 1)) = 'C' then
  60.             DriveCombo.ItemIndex := i;
  61.       end;
  62.    end else begin
  63.       DriveCombo.ItemIndex := OrigIdx;
  64.    end;
  65. end;
  66. procedure TFilesForm.GetDirButClick(Sender: TObject);
  67. begin
  68.    with (Owner as TClientForm) do begin
  69.       CurDir := DriveCombo.Items[DriveCombo.ItemIndex];
  70.       DirStack.Clear;
  71.       SendMsg(MSG_DIRECTORY, CurDir + '*.*', ClientSocket1.Socket);
  72.       GetDirBut.Enabled := False;
  73.    end;
  74. end;
  75. procedure TFilesForm.BackButClick(Sender: TObject);
  76. begin
  77.    with (Owner as TClientForm) do begin
  78.       if DirStack.Count > 0 then begin
  79.          CurDir := DirStack[DirStack.Count-1];
  80.          DirStack.Delete(DirStack.Count-1);
  81.          SendMsg(MSG_DIRECTORY, CurDir + '*.*', ClientSocket1.Socket);
  82.          if DirStack.Count = 0 then BackBut.Enabled := False;
  83.       end else begin
  84.          Beep;
  85.       end;
  86.    end;
  87. end;
  88. procedure TFilesForm.SetDirData(const DirData: string);
  89. var
  90.    DirList   : TStringList;
  91.    CommaList : TStringList;
  92.    i         : integer;
  93.    li        : TListItem;
  94. begin
  95.    DirLabel.Caption := 'Contents of ''' + Copy(CurDir, 1, Length(CurDir)-1) + '''';
  96.    Screen.Cursor := crHourGlass;
  97.    DirList := TStringList.Create;
  98.    CommaList := TStringList.Create;
  99.    DirList.Text := DirData;
  100.    FileList.Items.BeginUpdate;
  101.    FileList.Items.Clear;
  102.    for i := 0 to DirList.Count-1 do begin
  103.       CommaList.CommaText := DirList[i];
  104.       li := FileList.Items.Add;
  105.       li.Caption := CommaList[0];
  106.       if not IsDir(CommaList[0]) then li.SubItems.Add(CommaList[1])
  107.          else li.SubItems.Add('');
  108.       li.SubItems.Add(CommaList[2]);
  109.       if IsDir(CommaList[0]) then begin
  110.          li.ImageIndex := 0;
  111.       end else begin
  112.          li.ImageIndex := 1;
  113.       end;
  114.    end;
  115.    FileList.SortType := stData;
  116.    FileList.Items.EndUpdate;
  117.    Screen.Cursor := crDefault;
  118.    CommaList.Free;
  119.    DirList.Free;
  120. end;
  121. procedure TFilesForm.FileListDblClick(Sender: TObject);
  122. var
  123.    li      : TListItem;
  124. begin
  125.    li := FileList.Selected;
  126.    if li=nil then exit;
  127.    with (Owner as TClientForm) do begin
  128.       if IsDir(li.Caption) then begin
  129.          DirStack.Add(CurDir);
  130.          CurDir := CurDir + li.Caption;
  131.          SendMsg(MSG_DIRECTORY, CurDir + '*.*', ClientSocket1.Socket);
  132.          BackBut.Enabled := True;
  133.       end else begin
  134.          CurFile := CurDir + li.Caption;
  135.          SendMsg(MSG_FILE, CurFile, ClientSocket1.Socket);
  136.       end;
  137.    end;
  138. end;
  139. procedure TFilesForm.FormCreate(Sender: TObject);
  140. begin
  141.    DirStack := TStringList.Create;
  142. end;
  143. procedure TFilesForm.FormDestroy(Sender: TObject);
  144. begin
  145.    DirStack.Free;
  146. end;
  147. procedure TFilesForm.DriveComboChange(Sender: TObject);
  148. begin
  149.    GetDirBut.Enabled := True;
  150. end;
  151. procedure TFilesForm.SetFileData(const FileData: string);
  152. var
  153.    fs : TFileStream;
  154. begin
  155.    SaveDialog1.FileName := CurFile;
  156.    if SaveDialog1.Execute then begin
  157.       fs := TFileStream.Create(SaveDialog1.FileName, fmCreate);
  158.       fs.Write(FileData[1], Length(FileData));
  159.       fs.Free;
  160.    end;
  161. end;
  162. procedure TFilesForm.FileListCompare(Sender: TObject; Item1,
  163.   Item2: TListItem; Data: Integer; var Compare: Integer);
  164. var
  165.    d1, d2 : integer;
  166. begin
  167.    if IsDir(Item1.Caption) then d1 := 0 else d1 := 1;
  168.    if IsDir(Item2.Caption) then d2 := 0 else d2 := 1;
  169.    if d1 = d2 then
  170.       Compare := AnsiCompareText(Item1.Caption, Item2.Caption)
  171.    else
  172.       Compare := d1 - d2;
  173. end;
  174. procedure TFilesForm.LaunchFile1Click(Sender: TObject);
  175. var
  176.    li : TListItem;
  177. begin
  178.    li := FileList.Selected;
  179.    if li=nil then exit;
  180.    with (Owner as TClientForm) do begin
  181.       CurFile := CurDir + li.Caption;
  182.       SendMsg(MSG_REMOTE_LAUNCH, CurFile, ClientSocket1.Socket);
  183.    end;
  184. end;
  185. end.