MMFFEdit.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:9k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {========================================================================}
  2. {=                (c) 1995-98 SwiftSoft Ronald Dittrich                 =}
  3. {========================================================================}
  4. {=                          All Rights Reserved                         =}
  5. {========================================================================}
  6. {=  D 01099 Dresden             = Tel.: +0351-8012255                   =}
  7. {=  Loewenstr.7a                = info@swiftsoft.de                     =}
  8. {========================================================================}
  9. {=  Actual versions on http://www.swiftsoft.de/mmtools.html             =}
  10. {========================================================================}
  11. {=  This code is for reference purposes only and may not be copied or   =}
  12. {=  distributed in any format electronic or otherwise except one copy   =}
  13. {=  for backup purposes.                                                =}
  14. {=                                                                      =}
  15. {=  No Delphi Component Kit or Component individually or in a collection=}
  16. {=  subclassed or otherwise from the code in this unit, or associated   =}
  17. {=  .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed     =}
  18. {=  without express permission from SwiftSoft.                          =}
  19. {=                                                                      =}
  20. {=  For more licence informations please refer to the associated        =}
  21. {=  HelpFile.                                                           =}
  22. {========================================================================}
  23. {=  $Date: 1/29/98 - 5:41:42 PM $                                      =}
  24. {========================================================================}
  25. unit MMFFEdit;
  26. {$I COMPILER.INC}
  27. interface
  28. uses
  29.   Windows,
  30.   Messages,
  31.   SysUtils,
  32.   Classes,
  33.   Graphics,
  34.   Controls,
  35.   Forms,
  36.   Dialogs,
  37.   StdCtrls,
  38.   ComCtrls,
  39.   MMObj,
  40.   MMUtils,
  41.   MMFFile,
  42.   ExtCtrls
  43.   {$IFDEF DELPHI4}
  44.   ,ImgList
  45.   {$ENDIF}
  46.   ;
  47. type
  48.   {-- TMMFFileDlg ------------------------------------------------}
  49.   TMMFFileDlg = class(TForm)
  50.     FileOpenDialog: TOpenDialog;
  51.     Small: TImageList;
  52.     FileSaveDialog: TSaveDialog;
  53.     ListView: TListView;
  54.     Label1: TLabel;
  55.     lblFile: TLabel;
  56.     Label3: TLabel;
  57.     lblMaxFiles: TLabel;
  58.     Label2: TLabel;
  59.     lblFiles: TLabel;
  60.     AddBtn: TButton;
  61.     DelBtn: TButton;
  62.     ExtractBtn: TButton;
  63.     OKBtn: TButton;
  64.     FastFile: TMMFastFile;
  65.     procedure ListViewEnter(Sender: TObject);
  66.     procedure ListViewExit(Sender: TObject);
  67.     procedure ListViewChange(Sender: TObject; Item: TListItem; Change: TItemChange);
  68.     procedure FastFileChange(Sender: TObject);
  69.     procedure AddBtnClick(Sender: TObject);
  70.     procedure DelBtnClick(Sender: TObject);
  71.     procedure ListViewEdited(Sender: TObject; Item: TListItem; var S: string);
  72.     procedure ExtractBtnClick(Sender: TObject);
  73.     procedure FormShow(Sender: TObject);
  74.     procedure FormCreate(Sender: TObject);
  75.   private
  76.     FTitle : string;
  77.     UpdateView: Boolean;
  78.     procedure UpdateListView;
  79.     procedure SetTitle(aValue: string);
  80.   public
  81.     property Title: string read FTitle write SetTitle;
  82.   end;
  83.   {-- TMMFastFileDialog -------------------------------------------------------}
  84.   TMMFastFileDialog = class(TMMNonVisualComponent)
  85.   private
  86.     FSource   : TMMFastFile;
  87.     FTitle    : string;
  88.     procedure SetSource(aSource: TMMFastFile);
  89.   protected
  90.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  91.   public
  92.     constructor Create(AOwner: TComponent); override;
  93.     function Execute: Boolean;
  94.   published
  95.     property Source: TMMFastFile read FSource write SetSource;
  96.     property Title: string read FTitle write FTitle;
  97.   end;
  98. var
  99.   MMFFileDlg: TMMFFileDlg;
  100. implementation
  101. {$R *.DFM}
  102. {$R MMFFILE.D32}
  103. uses Consts, FileCtrl;
  104. {== TMMFastFileEditDlg ==================================================}
  105. procedure TMMFFileDlg.FormCreate(Sender: TObject);
  106. begin
  107.    FTitle := Caption;
  108.    Small.ResourceLoad(rtBitmap,'BM_FASTFILE',clWhite);
  109. end;
  110. {-- TMMFastFileEditDlg --------------------------------------------------}
  111. procedure TMMFFileDlg.FormShow(Sender: TObject);
  112. begin
  113.    {$IFDEF BUILD_ACTIVEX}
  114.    FastFile.Left := -50;
  115.    {$ENDIF}
  116.    UpdateView := True;
  117.    if FastFile.FileName <> '' then
  118.    begin
  119.       FastFile.Init;
  120.       AddBtn.Enabled := True;
  121.       lblFile.Caption := MinimizeName(FastFile.FileName,
  122.                          lblFile.Canvas, lblFile.Width);
  123.       lblMaxFiles.Caption := IntToStr(FastFile.MaxFiles);
  124.    end;
  125.    FileOpenDialog.Filter := {$IFDEF DELPHI3}SDefaultFilter{$ELSE}LoadStr(SDefaultFilter){$ENDIF};
  126.    FileSaveDialog.Filter := {$IFDEF DELPHI3}SDefaultFilter{$ELSE}LoadStr(SDefaultFilter){$ENDIF};
  127.    UpdateListView;
  128. end;
  129. {-- TMMFastFileEditDlg --------------------------------------------------}
  130. procedure TMMFFileDlg.SetTitle(aValue: string);
  131. begin
  132.    Caption := aValue;
  133. end;
  134. {-- TMMFastFileEditDlg --------------------------------------------------}
  135. procedure TMMFFileDlg.ListViewEnter(Sender: TObject);
  136. begin
  137.    with ListView do
  138.    if (Items.Count > 0) and (Selected = nil) then
  139.    begin
  140.       Selected := Items[0];
  141.       ItemFocused := Selected;
  142.    end;
  143.    OKBtn.Default := False;
  144. end;
  145. {-- TMMFastFileEditDlg --------------------------------------------------}
  146. procedure TMMFFileDlg.ListViewExit(Sender: TObject);
  147. begin
  148.    OKBtn.Default := True;
  149. end;
  150. {-- TMMFastFileEditDlg --------------------------------------------------}
  151. procedure TMMFFileDlg.UpdateListView;
  152. var
  153.    i: Integer;
  154. begin
  155.    if not UpdateView then exit;
  156.    ListView.Items.Clear;
  157.    for i := 0 to FastFile.Count-1 do
  158.    with FastFile, ListView.Items.Add do
  159.    begin
  160.       Caption := FileEntries[i].Name;
  161.       SubItems.Add(Format('%d KB', [Max(FileEntries[i].Size div 1024,1)]));
  162.       SubItems.Add(Format('%.7x', [FileEntries[i].Offset]));
  163.    end;
  164.    lblFiles.Caption := IntToStr(FastFile.Count);
  165. end;
  166. {-- TMMFastFileEditDlg --------------------------------------------------}
  167. procedure TMMFFileDlg.ListViewChange(Sender: TObject; Item: TListItem; Change: TItemChange);
  168. begin
  169.    DelBtn.Enabled := ListView.Selected <> nil;
  170.    ExtractBtn.Enabled := DelBtn.Enabled;
  171. end;
  172. {-- TMMFastFileEditDlg --------------------------------------------------}
  173. procedure TMMFFileDlg.FastFileChange(Sender: TObject);
  174. begin
  175.    UpdateListView;
  176. end;
  177. {-- TMMFastFileEditDlg --------------------------------------------------}
  178. procedure TMMFFileDlg.AddBtnClick(Sender: TObject);
  179. begin
  180.    if FileOpenDialog.Execute then
  181.       FastFile.AddFile(FileOpenDialog.FileName);
  182. end;
  183. {-- TMMFastFileEditDlg --------------------------------------------------}
  184. procedure TMMFFileDlg.DelBtnClick(Sender: TObject);
  185. begin
  186.    if (ListView.Selected <> nil) then
  187.        FastFile.RemoveFile(ListView.Selected.Caption);
  188. end;
  189. {-- TMMFastFileEditDlg --------------------------------------------------}
  190. procedure TMMFFileDlg.ListViewEdited(Sender: TObject; Item: TListItem; var S: string);
  191. begin
  192.    UpdateView := False;
  193.    FastFile.RenameFile(Item.Caption,S);
  194.    UpdateView := True;
  195. end;
  196. {-- TMMFastFileEditDlg --------------------------------------------------}
  197. procedure TMMFFileDlg.ExtractBtnClick(Sender: TObject);
  198. begin
  199.    if (ListView.Selected <> nil) then
  200.    begin
  201.       FileSaveDialog.FileName := ListView.Selected.Caption;
  202.       if FileSaveDialog.Execute then
  203.          FastFile.ExtractFile(ListView.Selected.Caption, FileSaveDialog.FileName);
  204.    end;
  205. end;
  206. {== TMMFastFileDialog ===================================================}
  207. constructor TMMFastFileDialog.Create(AOwner: TComponent);
  208. begin
  209.    inherited Create(AOwner);
  210.    FTitle := 'FastFile-Editor';
  211.    FSource := nil;
  212.    ErrorCode := ComponentRegistered(InitCode, Self, ClassName);
  213.    if (ErrorCode <> 0) then RegisterFailed(InitCode, Self , ClassName);
  214. end;
  215. {-- TMMFastFileDialog ---------------------------------------------------}
  216. procedure TMMFastFileDialog.SetSource(aSource: TMMFastFile);
  217. begin
  218.    if Longint(aSource) = Longint(Self) then exit;
  219.    if (aSource is TMMFastFile) or (aSource = nil) then
  220.    begin
  221.       if (FSource <> aSource) then
  222.       begin
  223.          FSource := aSource;
  224.       end;
  225.    end;
  226. end;
  227. {-- TMMFastFileDialog ---------------------------------------------------}
  228. procedure TMMFastFileDialog.Notification(AComponent: TComponent; Operation: TOperation);
  229. begin
  230.    inherited Notification(AComponent, Operation);
  231.    if (Operation = opRemove) and (AComponent = FSource) then
  232.       FSource := nil;
  233. end;
  234. {-- TMMFastFileDialog --------------------------------------------------}
  235. function TMMFastFileDialog.Execute: Boolean;
  236. begin
  237.    Result := False;
  238.    if assigned(FSource) then
  239.    begin
  240.       MMFFileDlg := TMMFFileDlg.Create(Application);
  241.       try
  242.          MMFFileDlg.FastFile.FileName := FSource.FileName;
  243.          MMFFileDlg.Title    := FTitle;
  244.          Result := (MMFFileDlg.ShowModal = mrOK);
  245.       finally
  246.          MMFFileDlg.Free;
  247.       end;
  248.    end;
  249. end;
  250. end.