Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Недавно использовавшиеся файлы в главном меню

Delphi , Компоненты и Классы , Меню

Недавно использовавшиеся файлы в главном меню

Оформил: 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, которая создает список最近 использованных файлов в главном меню формы. Список хранится в реестре Windows и может быть изменен пользователем добавлением или удалением элементов из него.

Вот подробное описание кода:

Unit UnitRecentList

Единица определяет класс TRecentList, представляющий список最近 использованных файлов. Он имеет несколько свойств: Key, Count, MainMenu, Parent, Proc, Ident и AddPos. Свойство Key используется для идентификации реестра, где хранятсяrecent files, Count specifies the number of recent files to display, MainMenu is the main menu where the recent files list is added, Parent is the parent form of the main menu, Proc is a procedure that will be called when an item in the recent files list is clicked, and Ident and AddPos are used to identify the position of the recent files list in the main menu.

Constructor Create

Конструктор создает новый экземпляр класса TRecentList. Он инициализирует несколько свойств: Items, Count, MainMenu, Parent и Proc. Он также создает новый реестр с указанным Key и читает существующие recent files из него.

Procedure ItemsToMenu

Процедура обновляет главное меню, добавляя или удаляя элементы в зависимости от содержимого списка Items. Если список пуст, он скрывает все элементы, кроме одного "Recent Files". Если список имеет более одного элемента, он показывает все элементы, кроме первого.

Procedure ItemClick

Процедура вызывается при клике на элементе списка recent files. Она вызывает свойство Proc с caption кликнутого элемента как параметром.

Procedure CustomItemAdd

Процедура добавляет новый элемент в список recent files. Если список уже содержит такой же элемент, она удаляет дубликат и обновляет главное меню соответствующим образом.

Destructor Destroy

Деструктор освобождает реестр и сохраняет содержимое списка Items обратно в реестр.

FormCreate

В обработчике события FormCreate формы создается экземпляр класса TRecentList с указанными параметрами: Key, Count, MainMenu, Parent и Proc.

Click

Процедура Click вызывается при клике на элементе списка recent files. Она открывает файл, связанный с кликнутым элементом, используя пользовательскую функцию DateiOeffnen.

Button1Click

В обработчике события Button1Click добавляется новый элемент в список recent files, вызвав процедуру CustomItemAdd.

FormClose

В обработчике события FormClose формы освобождается экземпляр класса TRecentList, используя функцию FreeAndNil.

Недавно использованные файлы в главном меню реализованы с помощью класса TRecentList, который добавляет RecentList в TMainMenu.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Меню ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:50:21/0.0061399936676025/1