Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Einem Erzeugtem MenuItem ein Onclick zuweißen. (https://www.delphipraxis.net/16587-einem-erzeugtem-menuitem-ein-onclick-zuweissen.html)

Die Muhkuh 19. Feb 2004 17:50


Einem Erzeugtem MenuItem ein Onclick zuweißen.
 
Hi,

ich erstelle mit:
Delphi-Quellcode:
  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);
5 MenüItems! (Wie der Code aussieht intressiert jetzt keinen!)

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?

Markus K. 19. Feb 2004 17:56

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.

Die Muhkuh 19. Feb 2004 17:57

Re: Einem Erzeugtem MenuItem ein Onclick zuweißen.
 
Danke, ich werd mal versuchen

Die Muhkuh 19. Feb 2004 18:04

Re: Einem Erzeugtem MenuItem ein Onclick zuweißen.
 
Das ganze sieht jetzt so aus:

Delphi-Quellcode:
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;
aber denn kommt bei dem Pfeil:

[Fehler] umain.pas(631): Inkompatible Typen: 'TNotifyEvent' und 'procedure, untyped pointer or untyped parameter'

MikeS 19. Feb 2004 18:11

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;

Markus K. 19. Feb 2004 18:11

Re: Einem Erzeugtem MenuItem ein Onclick zuweißen.
 
Ich schaue mal.
Ich hatte damals keine Variablen mit übergeben gehabt.

Markus K. 19. Feb 2004 18:14

Re: Einem Erzeugtem MenuItem ein Onclick zuweißen.
 
MikeS sein Vorschlag ist ned schlecht :thuimb:
Allerdings kann glaub ich auf das (Sender) verzichtet werden.

MikeS 19. Feb 2004 18:24

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:
procedure TForm1.onclick(Sender: TObject);
begin
    TMenuItem(Sender).visible := false;
end;
ist nur so ein beispiel! keine garantie habe es nicht überprüft!

Die Muhkuh 20. Feb 2004 13:44

Re: Einem Erzeugtem MenuItem ein Onclick zuweißen.
 
Zitat:

Zitat von MikeS
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;


Das ist keine gute Idee denn das was da geladen werden muss ist ja immer unterschiedlich.

Die Muhkuh 20. Feb 2004 13:46

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!

Markus K. 20. Feb 2004 16:25

Re: Einem Erzeugtem MenuItem ein Onclick zuweißen.
 
Wie gesagt lasse mal das (Sender) hinter DateiLaden weg. Es müsste dann eigentlich gehen.

S - tefano 20. Feb 2004 16:40

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:
(Sender as TMenuItem).Caption
so als Beispiel.[/EDIT]


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