![]() |
Markiertes MainMenu-Item in Label ausgeben
Also,
nachdem ich die tolle Idee hatte, irgendwie ein OnClick in das dynamisch erstellte Menü zu hauen, bin ich zu dem Schluss gekommen, dass ich es auf nem anderen Weg versuchen sollte ( Ja, ich mach das noch nicht lange :P ). Also würde ich gerne die Caption des markierten Menü-items in ein Label ausgeben und dann ein globales OnClick mit ein paar Abfragen verwenden... Hier mal der Code zum erzeugen des Menüs... Wenn mir jemand genau erklären könnte, wie ich es mit ner direkten OnClick-Abfrage hinbekomme, wär ich natürlich auch nicht abgeneigt :) Über den Code: Er dient dazu, die Ordnerstruktur eines Verzeichnisses in ein Menü zu packen, so wie die Windows Startleiste...
Delphi-Quellcode:
Procedure CreateTreeMenus( Path : String; Root : TMenuItem );
Var SR : TSearchRec; Result : Integer; Item : TMenuItem; Begin Path := IncludeTrailingBackSlash( Path ); Result := FindFirst( Path + '*.*', faDirectory, SR ); While ( Result = 0 ) Do Begin If ( ( ( SR.Attr And faDirectory ) <> 0 ) And ( SR.Name <> '.' ) And ( SR.Name <> '..' ) ) Then Begin Item := TMenuItem.Create(Item); Item.Caption := SR.Name; Root.Add( Item ); CreateTreeMenus( Path + SR.Name, Item ); End; Result := FindNext( SR ); End; SysUtils.FindClose( SR ); End; |
Re: Markiertes MainMenu-Item in Label ausgeben
Du musst halt einen Ereignis-Handler für den OnClick-Event machen. Ausserdem warum übergibst du bei TMenuItem.Create das Item selber als Owner ... ? :gruebel:
Delphi-Quellcode:
interface
type TForm1 = class (TForm) MainMenu1: TMainMenu; // ... oder so, dein Main-Menü halt // ... private procedure CreateTreeMenus (Path : String; Root : TMenuItem); procedure MyMenuOnClick (Sender: TObject); // ... end; implementation procedure TForm1.CreateTreeMenus (Path : String; Root : TMenuItem); Var SR : TSearchRec; Result : Integer; Item : TMenuItem; Begin Path := IncludeTrailingBackSlash( Path ); Result := FindFirst( Path + '*.*', faDirectory, SR ); While ( Result = 0 ) Do Begin If ( ( ( SR.Attr And faDirectory ) <> 0 ) And ( SR.Name <> '.' ) And ( SR.Name <> '..' ) ) Then Begin Item := TMenuItem.Create(Root); // wenn du schon ein Root übergibst, nutz es auch Item.Caption := SR.Name; Item.OnClick := MyMenuOnClick; Root.Add( Item ); CreateTreeMenus( Path + SR.Name, Item ); End; Result := FindNext( SR ); End; SysUtils.FindClose( SR ); End; procedure TForm1.MyMenuOnClick (Sender: TObject); begin ShowMessage ((Sender as TMenuItem).Caption); end; |
Re: Markiertes MainMenu-Item in Label ausgeben
Danke erstmal :thumb:
Das war mal ein Code-Schnippsel aus den weiten des I-Nets... Es funktioniert soweit, nur wenn ich jetzt auf ein Verzeichnis gehe, registriert er das als Klick, wenn er das Menü aufklappt... Kann man das irgendwie noch verfeinern? |
Re: Markiertes MainMenu-Item in Label ausgeben
Beim Aufruf eines Untermenüs wird ein OnClick ausgelöst? Aber nur weil du auch klickst, oder? :gruebel:
In dem MyMenuOnClick kannst du den Sender in eine TMenuItem-Variable casten (Item := (Sender as TMenuItem)) und da prüfen, ob er Untermenüs hat (weiß ich grad nicht aus dem Kopf, gibt da aber was wie ItemCount oder so). Wenn ja, wird die Funktion verlassen, wenn nein dann weiter. |
Re: Markiertes MainMenu-Item in Label ausgeben
Es wird auch ohne Klick ausgelöst, habs aber dank deinem Tipp hinbekommen! :-D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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 by Thomas Breitkreuz