Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi MRU - Most recenty Used Files (Einfache Unit) (https://www.delphipraxis.net/143999-mru-most-recenty-used-files-einfache-unit.html)

Woodman 27. Nov 2009 16:33


MRU - Most recenty Used Files (Einfache Unit)
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Interessierte,

ich habe schon länger nach einer einfachen Realisierung für eine MRU-Liste in meinen Programmen gesucht.
Es gibt zwar diverse Komponenten, aber die kann ich in TurboDelphi nicht integrieren.
Also hab' ich mich - immer noch als Anfänger - selber an die Arbeit gemacht. Ich möchte Euch das Ergebnis nicht vorenthalten, vielleicht kann jemand etwas damit anfangen:

Die Unit mru (Most Recently Used) dient dazu, die zuletzt geöffneten Dateien im Menu des Hauptprogrammes zur Verfügung zu stellen.
Die Namen der 10 zuletzt geöffneten Dateien werden werden in einer INI-Datei (vorzugsweise in der zum Programm gehörenden) gespeichert. Beim Programmstart werden diese ausgelesen und in einem Menupunkt dargestellt.

In dieser Unit sind drei Routinen, die im Hauptprogramm aufgerufen werden:
Delphi-Quellcode:
procedure getMRU(menu: TMenuItem; onClick: TNotifyEvent; iniFile: String);
procedure SaveMRU(strFile: String; menu: TMenuItem; onClick: TNotifyEvent; iniFile: String);
function getMenu(menu: TMenuItem): String;
Erklärung siehe weiter unten.

Zur Vorgehensweise:
Im Hauptprogramm unter dem Menupunkt 'Datei' bzw. 'Files' ein Submenu Names 'Zuletzt geöffnete Dateien' und hierunter wiederum ein SUbmenu Namens 'MRU' anlegen. (Siehe Grafik)

Ein OnClick-Ereignis für Submenu 'MRU' erzeugen.
Unter dem Menupunkt 'Zuletzt geöffnete Dateien' dürfen sonst weiter keine Menupunkte angegeben werden, da diese zur Laufzeit gelöscht werden.

Im Hauptprogramm muss ein Name für eine INI-Datei festgelegt werden. Ich mache das normalerweise wie folgt: (Siehe auch Beispielprogramm)
Delphi-Quellcode:
unit tstmru;
{
  Testprogramm für die Unit 'mru'

}
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, Inifiles, StdCtrls, mru;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    OpenDialog1: TOpenDialog;
    Datei1: TMenuItem;
    open1: TMenuItem;
    ZuletztgeffneteDateien1: TMenuItem;
    MRU: TMenuItem;
    Ende1: TMenuItem;
    procedure Ende1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure MRUClick(Sender: TObject);
    procedure open1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Ini: TIniFile;
  IniFile: String;  // Programm-Ini-Datei
  ProgrammName, ProgrammDir: String;

implementation

{$R *.dfm}

procedure TForm1.Ende1Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ProgrammName := ParamStr(0);
  IniFile:= ChangeFileExt(ProgrammName,'.ini');
  ProgrammDir := ExtractFilePath(ProgrammName);
  ProgrammName := ChangeFileExt(ExtractFileName(ProgrammName),'');
  Caption := ProgrammName;
  // Das Menu wird aufbereitet
  getMRU(ZuletztgeffneteDateien1,MRUClick,IniFile);   // <<<<<< Hier wird das Menu aufbereitet

end;

procedure TForm1.open1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin                                       // <<<<<< Hier wird die ausgewähhlte Datei zugefügt
    SaveMRU(OpenDialog1.FileName,ZuletztgeffneteDateien1,MRUClick,IniFile);
    // OpenFile_und_Startprogramm(OpenDialog1.FileName);
  end;
end;


procedure TForm1.MRUClick(Sender: TObject);
var lastOpen: String;
begin
   lastOpen := getMenu(TMenuItem(Sender));  // Hier wird der ausgewälte Dateinamen
   ShowMessage('"'+lastOpen+'"');            // "abgeholt"
   SaveMRU(lastOpen,ZuletztgeffneteDateien1,MRUClick,IniFile); // und wird gleich wieder
    // OpenFile_und_Startprogramm(lastOpen);                  // an erster Stelle des
end;                                                          // Menus kopiert


end.
Das wars. :-D

Wer es testen möchte: Ich habe das komplette Projekt angefügt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz