Недавно использовавшиеся файлы в главном менюDelphi , Компоненты и Классы , МенюНедавно использовавшиеся файлы в главном меню
Оформил: DeeCo { 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 Единица определяет класс Constructor Create Конструктор создает новый экземпляр класса Procedure ItemsToMenu Процедура обновляет главное меню, добавляя или удаляя элементы в зависимости от содержимого списка Procedure ItemClick Процедура вызывается при клике на элементе списка recent files. Она вызывает свойство Procedure CustomItemAdd Процедура добавляет новый элемент в список recent files. Если список уже содержит такой же элемент, она удаляет дубликат и обновляет главное меню соответствующим образом. Destructor Destroy Деструктор освобождает реестр и сохраняет содержимое списка FormCreate В обработчике события Click Процедура Button1Click В обработчике события FormClose В обработчике события Недавно использованные файлы в главном меню реализованы с помощью класса TRecentList, который добавляет RecentList в TMainMenu. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |