![]() |
Zuletzt geöffnete Dateien (im Datei-Menü) anzeigen
Ich will, dass wenn man auf (MainMenu) "Datei" klickt, 3 oder 4 Dateien angezeigt werden, die zuletzt geöffnet wurden. wie stelle ich das an?
Grüße, dopeline :dancer: |
Merk sie dir in einer Ini-Datei und beim Laden liest du sie aus und erstellst die Menüpunkte im Menü dynamisch. Beim Klick auf den Menüpunkt dient die Caption als Pfad zur Datei. Das wäre das einfachste.
|
:?
ich habe keinen schimmer, wie ich das anstellen soll :oops: ... kannst du mir vielleicht ein paar ansätze zeigen :wink: Grüße, dopeline |
Here we go:
Delphi-Quellcode:
Was jetzt noch fehlt ist die Begrenzung auf eine bestimmte Anzahl von Dateien. Aber etwas sollst du ja auch machen. :wink:
type
TForm1 = class(TForm) MainMenu1: TMainMenu; mnuFile: TMenuItem; Dateiffnen1: TMenuItem; OpenDialog1: TOpenDialog; procedure Dateiffnen1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } procedure MyMenuItemClick(Sender: TObject); // OnClick-Ereignis für den Menüpunkt public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} uses IniFiles; procedure TForm1.Dateiffnen1Click(Sender: TObject); var ini : TInifile; slKeyNumbers : TStringList; KeyNumber : Integer; begin if OpenDialog1.Execute then begin ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'\mru.ini'); try slKeyNumbers := TStringList.Create; try ini.ReadSectionValues('MRU', slKeyNumbers); KeyNumber := slKeyNumbers.Count; { mein schneller Versuch die Anzahl zu begrenzen } // if slKeyNumbers.Count = 5 then // begin // ini.DeleteKey('MRU', '0'); // ini.WriteString('MRU', '0', OpenDialog1.FileName); // end // else ini.WriteString('MRU', IntToStr(KeyNumber), OpenDialog1.FileName); // Dateiname in Ini eintragen, der Key ist eine Ziffer finally slKeyNumbers.Free; // Stringliste freigeben end; finally ini.Free; // Ini-Objekt freigeben end; end; end; procedure TForm1.FormCreate(Sender: TObject); var ini : TIniFile; slKeyNumbers : TStringList; i : Integer; NewItem : TMenuItem; begin ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'\mru.ini'); try slKeyNumbers := TStringList.Create; try ini.ReadSectionValues('MRU', slKeyNumbers); // Sektionswerte holen if slKeyNumbers.Count > 0 then // wenn welche da sind Trennlinie erzeugen begin NewItem := TMenuItem.Create(mnuFile); try NewItem.Caption := '-'; mnuFile.Insert(mnuFile.Count, NewItem); for i := 0 to slKeyNumbers.Count-1 do // in einer Schleife alle Dateien hinzufügen (nur die Dateinamen) begin NewItem := TMenuItem.Create(mnuFile); NewItem.Caption := '&'+IntToStr(i)+' '+ExtractFilename(ini.ReadString('MRU', IntToStr(i), '')); if NewItem.Caption = '' then continue; NewItem.Tag := i; // Menüeintrag eindeutig markieren mit der Tag-Eigenschaft NewItem.OnClick := MyMenuItemClick; // Menüeintag mit der Ereignissprozedur verbinden mnuFile.Insert(mnuFile.Count, NewItem); end; finally NewItem.Free; end; end; finally slKeyNumbers.Free; end; finally ini.Free; end; end; procedure TForm1.MyMenuItemClick(Sender: TObject); var ini : TiniFile; s : String; begin ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'\mru.ini'); try s := ini.ReadString('MRU', IntToStr((Sender as TMenuItem).Tag), ''); // Schlüsselwert an Hand des Tags indentifizieren ShowMessage(s); // Und ausgeben finally ini.Free; end; end; |
wow!
aber er ist die ganze zeit am meckern: :( (alles in. FormCreate) [Fehler] Uhaupt.pas(212): Undefinierter Bezeichner: 'mruFile' an der stelle:
Delphi-Quellcode:
und an der stalle:
NewItem := TMenuItem.Create(mnuFile);
Delphi-Quellcode:
dort sagt er auch 2x, dass es sich in dieser zeile um "inkompatible Typen" handelt
mnuFile.Insert(mnuFile.Count, NewItem);
und an folgender stelle sagt er, dass "Operator oder Semikolon fehlt", sowie 2x "inkompatible Typen" :
Delphi-Quellcode:
Woran kann das liegen?
mnuFile.Insert(mnuFile.Count, NewItem);
Gruß, dopeline |
mnuFile heißt mein "Datei"-Menü. Das nächste wäre mnuEdit für das "Bearbeiten"-Menü.
|
Zitat:
|
Liste der Anhänge anzeigen (Anzahl: 1)
Hä? Das ist die Ereignis-Prozedur für den Klick auf einen Menü-Eintrag. Warte ich hänge das ganze mal an.
|
Ok, also die fehlermeldungen dezimieren sich :wink:
hier sagt er mir, er kenne den Bezeichner MyMenuItem nicht: (im FormCreate)
Delphi-Quellcode:
und oben in der privaten deklaration sagt er "Das private-Symbol 'MyMenuItemClick' wurde deklariert, aber nie verwendet"
NewItem.OnClick := MyMenuItem; // Menüeintag mit der Ereignissprozedur verbinden
obwohl ich die prozedur im quelltext mit drin habe. du hast doch dort gesagt "// OnClick-Ereignis für den Menüpunkt" , wo kommt denn das dann hin? Gruß, dopeline |
Also so wie ich das verstehe, weißt du ihm als onclick ereignis ein menü zu. Und das kann ja nicht gehen.
Man liest sich Stanlay :coder: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz