MruUnit.pas
上传用户:tj00001
上传日期:2007-01-07
资源大小:672k
文件大小:3k
源码类别:

行业应用

开发平台:

Delphi

  1. //---------------------------------------------------------------------------
  2. //(R)CopyRight KivenSoft International ,inc 1999
  3. //单元名称:最近开启文件列表类
  4. //程序名称:电子书库
  5. //作    者:李会文
  6. //开始时间:1999.07.06
  7. //最后修改:1999.07.06
  8. //备注:此单元定义了最近开启的文件列表类
  9. //---------------------------------------------------------------------------
  10. unit MruUnit;
  11. interface
  12. uses
  13.   Menus;
  14. type
  15.   TMru=class
  16.   private
  17.     FFileList:array[0..4]of string;
  18.     FListIndex:array[0..4]of integer;
  19.     FParentMenu:TMenuItem;
  20.     FPosition:integer;
  21.     FVisible:boolean;
  22.     function GetFileList(index:integer):string;
  23.     procedure SetFileList(index:integer;Value:string);
  24.     procedure SetVisible(Value:boolean);
  25.   public
  26.     constructor Create;
  27.     destructor Destroy;override;
  28.     procedure Add(Fn:string);
  29.     property FileList[index:integer]:string read GetFileList write SetFileList;default;
  30.     property ParentMenu:TMenuItem read FParentMenu write FParentMenu;
  31.     property Position:integer read FPosition write FPosition;
  32.     property Visible:boolean read FVisible write SetVisible;
  33.   end;
  34. var
  35.   Mru:TMru;
  36.   
  37. implementation
  38. constructor TMru.Create;
  39. var
  40.   i:integer;
  41. begin
  42.   for i:=0 to 4 do
  43.   begin
  44.     FFileList[i]:='';
  45.     FListIndex[i]:=i;
  46.   end;
  47.   FParentMenu:=nil;
  48.   FPosition:=0;
  49.   FVisible:=true;
  50. end;
  51. destructor TMru.Destroy;
  52. begin
  53.   inherited Destroy;
  54. end;
  55. procedure TMru.Add(Fn:string);
  56. var
  57.   i,j,k:integer;
  58. begin
  59.   {$ifdef debug}
  60.     if FParentMenu=nil then raise Exception.Create('Error in TMru.InsertToMenu');
  61.   {$endif}
  62.   if FFileList[FListIndex[0]]=Fn then exit;
  63.   j:=-1;
  64.   for i:=1 to 4 do
  65.     if FFileList[FListIndex[i]]=Fn then j:=i;
  66.   if j=-1 then
  67.   begin
  68.     k:=FListIndex[4];   //保存最后串索引
  69.     FFileList[k]:=Fn; //更新最后串
  70.     for i:=4 downto 1 do FListIndex[i]:=FListIndex[i-1];
  71.     FListIndex[0]:=k;   //置最后串到最前
  72.   end
  73.   else
  74.   begin
  75.     k:=FListIndex[j];
  76.     for i:=j downto 1 do FListIndex[i]:=FListIndex[i-1];
  77.     FListIndex[0]:=k;
  78.   end;
  79.   if FVisible then
  80.     for i:=0 to 4 do
  81.       with FParentMenu do
  82.       begin
  83.         if FFileList[FListIndex[i]]<>'' then
  84.         begin
  85.           Items[Position+i].Caption:='&1 '+FFileList[FListIndex[i]];
  86.           Items[Position+i].Visible:=true;
  87.         end
  88.         else
  89.         begin
  90.           Items[Position+i].Visible:=false;
  91.         end;
  92.       end;
  93. end;
  94. function TMru.GetFileList(index:integer):string;
  95. begin
  96.   Result:=FFileList[FListIndex[index]];
  97. end;
  98. procedure TMru.SetFileList(index:integer;Value:string);
  99. begin
  100.   FFileList[FListIndex[index]]:=Value;
  101. end;
  102. procedure TMru.SetVisible(Value:boolean);
  103. var
  104.   i:integer;
  105. begin
  106.   FVisible:=Value;
  107.   with FParentMenu do
  108.   begin
  109.     if Value then
  110.     begin
  111.       for i:=0 to 4 do
  112.         if FFileList[FListIndex[i]]<>'' then Items[Position+i].Visible:=true
  113.         else Items[Position+i].Visible:=false;
  114.     end
  115.     else
  116.     begin
  117.       for i:=0 to 4 do Items[Position+i].Visible:=Value;
  118.     end;
  119.     Items[Position+5].Visible:=Value;
  120.   end;
  121. end;
  122. end.