![]() |
Einem Erzeugtem MenuItem ein Onclick zuweißen.
Hi,
ich erstelle mit:
Delphi-Quellcode:
5 MenüItems! (Wie der Code aussieht intressiert jetzt keinen!)
Item1 := TMenuItem.Create(Self);
Item2 := TMenuItem.Create(Self); Item3 := TMenuItem.Create(Self); Item4 := TMenuItem.Create(Self); Item5 := TMenuItem.Create(Self); List := TStringList.Create; List.LoadFromFile(SettingPath + 'LastFiles.txt'); Item1.Caption := List.Strings[0]; Item2.Caption := List.Strings[1]; Item3.Caption := List.Strings[2]; Item4.Caption := List.Strings[3]; Item5.Caption := List.Strings[4]; Form1.MainMenu1.Items[0].Items[6].Add(Item1); Form1.MainMenu1.Items[0].Items[6].Add(Item2); Form1.MainMenu1.Items[0].Items[6].Add(Item3); Form1.MainMenu1.Items[0].Items[6].Add(Item4); Form1.MainMenu1.Items[0].Items[6].Add(Item5); Die Caption sind immer die zuletzt geöffneten Dateien. Wie kann ich diesen Items ein OnClick zuweißen damit mein Programm daraufhin die Datei lädt? |
Re: Einem Erzeugtem MenuItem ein Onclick zuweißen.
Hallo,
ein onClick Ereignis kannst du wiefolgt zur Laufzeit hinzufügen: Du erstellst ein Procedure nach dem folgenden Muster, welche du bei Type hinzufügst. procedure DateiLaden(Sender: TObject); Als nächstes musst du diese Procedure zur Laufzeit bei dem onClick Ereignis hinzufügen. Item5.onClick:=DateiLaden; Nach dem folgenden Muster hatte ich das selbe Problem gelöst. Hoffe das ich weiterhelfen konnte. |
Re: Einem Erzeugtem MenuItem ein Onclick zuweißen.
Danke, ich werd mal versuchen
|
Re: Einem Erzeugtem MenuItem ein Onclick zuweißen.
Das ganze sieht jetzt so aus:
Delphi-Quellcode:
aber denn kommt bei dem Pfeil:
procedure TForm1.DateiLaden(Sender: TObject; Was: String);
begin Application.CreateForm(TForm2, Form2); TForm2(ActiveMDIChild).Richedit1.Lines.LoadFromFile(Was); end; procedure TForm1.NewItem; var Item1, Item2, Item3, Item4, Item5 : TMenuItem; List : TStringList; begin Item1 := TMenuItem.Create(Self); Item2 := TMenuItem.Create(Self); Item3 := TMenuItem.Create(Self); Item4 := TMenuItem.Create(Self); Item5 := TMenuItem.Create(Self); List := TStringList.Create; List.LoadFromFile(SettingPath + 'LastFiles.txt'); Item1.Caption := List.Strings[0]; Item2.Caption := List.Strings[1]; Item3.Caption := List.Strings[2]; Item4.Caption := List.Strings[3]; Item5.Caption := List.Strings[4]; Form1.MainMenu1.Items[0].Items[6].Add(Item1); Form1.MainMenu1.Items[0].Items[6].Add(Item2); Form1.MainMenu1.Items[0].Items[6].Add(Item3); Form1.MainMenu1.Items[0].Items[6].Add(Item4); Form1.MainMenu1.Items[0].Items[6].Add(Item5); Item1.OnClick := DateiLaden(Sender, Item1.Caption); //<- List.Free; end; [Fehler] umain.pas(631): Inkompatible Typen: 'TNotifyEvent' und 'procedure, untyped pointer or untyped parameter' |
Re: Einem Erzeugtem MenuItem ein Onclick zuweißen.
versuche es doch einmal so:
Delphi-Quellcode:
procedure TForm1.DateiLaden(Sender: TObject);
begin Application.CreateForm(TForm2, Form2); TForm2(ActiveMDIChild).Richedit1.Lines.LoadFromFile(Item1.Caption); end; [..] //bekannt Item1.OnClick := DateiLaden(Sender); //<- List.Free; end; |
Re: Einem Erzeugtem MenuItem ein Onclick zuweißen.
Ich schaue mal.
Ich hatte damals keine Variablen mit übergeben gehabt. |
Re: Einem Erzeugtem MenuItem ein Onclick zuweißen.
MikeS sein Vorschlag ist ned schlecht :thuimb:
Allerdings kann glaub ich auf das (Sender) verzichtet werden. |
Re: Einem Erzeugtem MenuItem ein Onclick zuweißen.
ich denke schon das man (Sender) benötigt, denn irgendwo muss ja übergeben werden von
wem das ereignis ausgelöst wurde! wenn sender nicht dort stehen würde würde folgendes nicht funktionieren:
Delphi-Quellcode:
ist nur so ein beispiel! keine garantie habe es nicht überprüft!
procedure TForm1.onclick(Sender: TObject);
begin TMenuItem(Sender).visible := false; end; |
Re: Einem Erzeugtem MenuItem ein Onclick zuweißen.
Zitat:
Das ist keine gute Idee denn das was da geladen werden muss ist ja immer unterschiedlich. |
Re: Einem Erzeugtem MenuItem ein Onclick zuweißen.
Ich habs mal kurz umgeschrieben wie MikeS das sagte aber ich bekomm immer noch die gleiche Fehlermeldung!
|
Re: Einem Erzeugtem MenuItem ein Onclick zuweißen.
Wie gesagt lasse mal das (Sender) hinter DateiLaden weg. Es müsste dann eigentlich gehen.
|
Re: Einem Erzeugtem MenuItem ein Onclick zuweißen.
Als ich sowas mal gemacht hab, habe ich auch nur den Namen der Prozedur übergeben. Die hatte bei mir auch nur den Sender-Parameter der Klasse TObject (welch ein Widerspruch).
Innerhalb der Event-Prozedur ist Sender dann das Menü-Item das den Event Ausgelöst hat. Dann kannst du bspw. die Caption des Items als Dateinamen nehmen und den öffnen. Bis dann, S - tefano [EDIT]Zur Sicherheit (hab ich jedenfalls gemacht) solltest du vielleicht wenn du auf Sender zugreifen willst und damit ein TMenuItem ansprechen willst das ganze immer so ausdrücken:
Delphi-Quellcode:
so als Beispiel.[/EDIT]
(Sender as TMenuItem).Caption
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 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