Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Недавно использовавшиеся файлы в главном меню

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
  Die folgende Unit enthalt eine Klasse, die eine 
  RecentListe in ein TMainMenu einfugt. 
}

 { 
  This unit contains a class to add a 
  RecentList in a TMainMenu. 
}

 unit UnitRecentList;

 interface

 uses Windows, SysUtils, menus, Registry, Forms, Dialogs, Classes;

 type
   TOnClickPorc = procedure(Path : string) of object;

 type
   TRecentList = class(TObject)
   private
     Regis: TRegistryIniFile;
     Count: integer;
     Parent: TForm;
     MainMenu: TMainMenu;
     Items: TStringList;
     AddPos: integer;
     ClickProc: TOnClickPorc;
     Ident: integer;
   public
     // Key      : Porduktname zum Beispiel "SuperSoftware" 
    // Count    : Anzahl der angezeigten MenuItems 
    // MainMenu : Das MainMenu auf dem Formular in dem angezeigt werden soll 
    // Parent   : Das Parent Formular vom MainMenu (z.B. Form1) 
    // Proc     : Prozedur, die ausgefurt werden soll, wenn auf ein MenuItem geklickt wird. 
    //            z. B. "Procedure TForm1.RecentListClick(FileName : string);" 
    constructor Create(Key : string; Count, MenuIndex : integer;
       MainMenu : TMainMenu; Parent : TForm;
       Proc : TOnClickPorc);
     destructor Destroy; override;
     procedure CustomItemAdd(Value : string);
     procedure ItemsToMenu;
     procedure ItemClick(Sender : TObject);
   end;


 implementation

 constructor TRecentList.Create(Key : string; Count, MenuIndex : integer;
   MainMenu : TMainMenu; Parent : TForm;
   Proc : TOnClickPorc);
 var
   I : integer;
   NewItem : TMenuItem;
 begin
   // Initialisieren 
  Items := TStringList.Create;

   // Klasseneigenschaften setzen 
  Self.Count := Count;
   Self.Parent := Parent;
   Self.MainMenu := MainMenu;
   Self.Ident := MenuIndex;

   AddPos := MainMenu.Items[Ident].Count + 1;

   // Ubergebene Prozedur gleich der der lokalen "ClickPorc" setzen 
  ClickProc := Proc;

   // TRegistryIniFile instanzieren 
  Regis := TRegistryIniFile.Create('Software\' + Key);

   // Trennstrisch realisieren 
  NewItem := TMenuItem.Create(Parent);
   NewItem.Caption := '-';
   MainMenu.Items[Ident].Add(NewItem);

   // uber Schliefe alles einlesen 
  for i := 0 to Count - 1 do CustomItemAdd(Regis.ReadString('RecentFiles',
       'Item' + IntToStr(i) + IntToStr(Ident), ''));
 end;

 procedure TRecentList.ItemsToMenu;
 var
   NewItem : TMenuItem;
   I : integer;
 begin
   // Beim ersten mal "count" MenuItems erstellen 
  if MainMenu.Items[Ident].Count = AddPos then
     for i := 0 to Count - 1 do
     begin
       NewItem := TMenuItem.Create(Parent);
       NewItem.Caption := '';
       NewItem.OnClick := ItemClick;
       MainMenu.Items[Ident].Add(NewItem);
     end;

   // Die Liste "Items" duchgehen und die MenuItems danach benennen 
  for I := 0 to Items.Count - 1 do
     MainMenu.Items[Ident][i + AddPos].Caption := Items[i];

   // Dei leeren Eintrage unsichtbar machen die vollen sichtbar 
  for I := 0 to Count - 1 do
     MainMenu.Items[Ident][i + AddPos].Visible :=
       not (MainMenu.Items[Ident][i + AddPos].Caption = '');


   if Items.Count = 0 then MainMenu.Items[Ident][AddPos - 1].Visible := False
   else
     MainMenu.Items[Ident][AddPos - 1].Visible := True;
 end;


 procedure TRecentList.ItemClick(Sender : TObject);
 begin
   ClickProc((Sender as TMenuItem).Caption);
 end;

 procedure TRecentlIst.CustomItemAdd(Value : string);
 var
   i : integer;
 begin
   // Prufen 
  if Length(Value) = 0 then
   begin
     ItemsToMenu;
     Exit;
   end;
   // Testen, ob "Value" schon vorkommt 
  for i := 0 to Items.Count - 1 do
     if (Items[i] = Value) then
     begin
       Items.Delete(i);
       Break;
     end;
   // Items.Delete(i); 
  // Eintrag anhangen 
  Items.Insert(0, Value);
   // Wenn Liste voll, dann letztes rausschmeissen 
  if Items.Count > Count then
   begin
     //For i := 1 to Items.Count - 1 do Items[ i - 1 ] := Items[ i ]; 
    Items.Delete(Items.Count - 1);
   end;
   // Anzeige aktuallisieren 
  ItemsToMenu;
 end;

 // FreeAndNil(TRecentList) bei OnClose nicht vergessen 
destructor TRecentList.Destroy;
 var
   i : integer;
 begin
   // DAten in der Registry speichern 
  for i := 0 to Items.Count - 1 do
     Regis.WriteString('RecentFiles', 'Item' + IntToStr(I) + IntToStr(Ident), Items[i]);

   // Speicherleichen ausradieren 
  Regis.Free;
 end;

 end.

 { Und so instanziert man die Klasse: }

 //  Createn 
// 1. Parameter : Registry Schlussel 
// 2. Parameter : Anzal der Eintrage in der RecentList 
// 3. Parameter : Nummer des MenuItems unter das die RecentList kommen soll (meistens 0) 
// 4. Parameter : Das Menu, in die die Recentlist eingefugt werden soll 
// 5. Parameter : Das Formular, in dem sich das Menu befindet 
// 6. Parameter : Die Procedure, die ausgefuhrt werden soll, wenn auf einen Eintrag 
//                in der Recentlist gecklickt wird. 


procedure TForm1.FormCreate(Sender: TObject);
 begin
  RecentList.Create('SuperSoftware', 5, 0, MainMenu1, Self, Click);
 end;

 // Die Procedure wird ausgefuhrt, wenn auf einen Eintrag in der 
// RecentList gecklickt wird. 
// "Value" ist der Dateiname 
procedure TForm1.Click(FilePath: string );
 begin
  DateiOeffnen(FilePath);
 end;

 // Einen Eintrag in die Rechenlist vorhehmen 
procedure TForm1.Button1Click(Sender: TObject);
 begin
  RecentList.CustomItemAdd(Edit1.Text);
 end;

 // nicht vergessen, sonst werden die Anderungen nicht gespeichert 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
 begin
  FreeAndNil(RecentList);
 end;


 // von Sven Laufersweiler & Phillip Kroll 
Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay