一個管理最近使用過的文件的類

一個管理最近使用過的文件的類:

{-----------------------------------------------------------------------------
 Unit Name: RcntFileMgr
 Author:   

 Purpose:   Manager the recent file list.
 History:   2004.06.08    create
-----------------------------------------------------------------------------}


unit RcntFileMgr;

interface

uses
  Classes, SysUtils, Inifiles;

type
  TRecentFileChangedEvent = procedure(Sender:TObject) of object;
 
  TRecentFileManager=class(TObject)
  private
    FRecentFileList:TStringList;
    FMaxRecentCount:Integer;
    FOnRecentFileChanged:TRecentFileChangedEvent;
  protected
    function GetRecentFileCount():Integer;
    function GetRecentFile(Index:Integer):String;
    procedure LoadFromConfigFile();
    procedure SaveToConfigFile();
  public
    constructor Create();
    destructor Destroy();override;
    procedure AddRecentFile(const AFileName:String);
    property RecentFileCount:Integer read GetRecentFileCount;
    property RecentFile[Index:Integer]:String read GetRecentFile;
    property OnRecentFileChanged:TRecentFileChangedEvent read FOnRecentFileChanged write FOnRecentFileChanged;
  end;
 
implementation

{ TRecentFileManager }

function TRecentFileManager.GetRecentFileCount():Integer;
begin
  Result:=FRecentFileList.Count;
end;

function TRecentFileManager.GetRecentFile(Index:Integer):String;
begin
  Result:=FRecentFileList.Strings[Index];
end;

procedure TRecentFileManager.LoadFromConfigFile();
var
  Ini:TInifile;
  KeyList:TStringList;
  I:Integer;
begin
  Ini:=TInifile.Create(ExtractFilePath(ParamStr(0))+'config.ini');
  KeyList:=TStringList.Create();
  try
    Ini.ReadSection('RecentFile',KeyList);
    for I:=0 to KeyList.Count-1 do begin
      FRecentFileList.Add(Ini.ReadString('RecentFile',KeyList.Strings[I],''));
    end;
    if Assigned(FOnRecentFileChanged) then begin
      FOnRecentFileChanged(self);
    end;
  finally
    Ini.Free;
    KeyList.Free;
  end;
end;

procedure TRecentFileManager.SaveToConfigFile();
var
  Ini:TInifile;
  I:Integer;
begin
  Ini:=TInifile.Create(ExtractFilePath(ParamStr(0))+'config.ini');
  try
    Ini.EraseSection('RecentFile');
    for I:=0 to FRecentFileList.Count-1 do begin
      Ini.WriteString('RecentFile','Recent'+IntToStr(I),FRecentFileList.Strings[I]);
    end;
  finally
    Ini.Free;
  end;
end;

constructor TRecentFileManager.Create();
begin
  inherited Create();
  FRecentFileList:=TStringList.Create();
  FMaxRecentCount:=5;
  LoadFromConfigFile();
end;

destructor TRecentFileManager.Destroy();
begin
  if Assigned(FRecentFileList) then begin
    try
      SaveToConfigFile();
    except
      //ignore any exceptions
    end;
    FreeAndNil(FRecentFileList);
  end;
  inherited Destroy();
end;

procedure TRecentFileManager.AddRecentFile(const AFileName:String);
var
  RecentIndex:Integer;
begin
  RecentIndex:=FRecentFileList.IndexOf(AFileName);
  if RecentIndex>=0 then begin
    FRecentFileList.Delete(RecentIndex);
  end;
  FRecentFileList.Insert(0,AFileName);
  while FRecentFileList.Count>FMaxRecentCount do begin
    FRecentFileList.Delete(FRecentFileList.Count-1);
  end;
  if Assigned(FOnRecentFileChanged) then begin
    FOnRecentFileChanged(self);
  end;
end;

end.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章