Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem mit MenuItems - Werte übergeben? (https://www.delphipraxis.net/35362-problem-mit-menuitems-werte-uebergeben.html)

stoermi 6. Dez 2004 09:21


Problem mit MenuItems - Werte übergeben?
 
Ich erstelle zur Laufzeit Instanzen einer Klasse.
Dabei wird für jede Instanz im MainMenü ein Eintrag angelegt.
Wenn der Benutzer diesen Eintrag im Menü clickt, soll ein Fenster aufgehen, in dem die Wert der Instanz angezeigt werden sollen.

Bisher sieht es so aus:

Delphi-Quellcode:
neuesItem := TMenuItem.Create(Self);
neuesItem.Name := neuInstanz.Name;
neuesItem.Caption := 'Instanz '+zmWerte[0];
neuesITem.OnClick := InstanzEigClick;
HotelForm.Instanzen.Add(neuesItem);
- neuesItem ist der neue Eintrag.
- er bekommt den selben Namen, wie die Instanz
- onClick bekommt folgende prozedur zu gewiesen...

Delphi-Quellcode:
procedure THotelForm.InstanzEigClick(Sender: TObject);
var InstanzName : ShortString;
    InstanzObj : TKlasse;
begin
  InstanzName := (Sender as TMenuItem).Name;
  InstanzObj := TKlasse(FindComponent(InstanzName));
  InstanzAnzeigenForm.wertsetzen(InstanzObj);
  InstanzAnzeigenForm.ShowModal;
end;
- InstanzName soll der Name der des Items zugewiesen werden = Name der Instanz
- dann wird nach der Instanz gesucht und InstanzObj zugewiesen
- wertsetzen bewirkt, das die Edits im AnzeigenForm mit den Werten der Instanz belegt werden
- dann soll das Formular mit den werten angezeigt werden

Leider klappt dies nicht!!!
Der Compiler meckert zwar nicht - aber die Edits im Formular haben unmögliche Werte, nur nicht die, die es haben soll!

Was habe ich falsch gemacht?
Gibt es eine andere Möglichkeit?

Wie kann ich einem MenüItem zur Laufzeit sagen, was passiert, wenn jemand drauf klickt und kann gleichzeitig Werte mit übergeben?

jim_raynor 6. Dez 2004 11:46

Re: Problem mit MenuItems - Werte übergeben?
 
1. Was sind das für Instanzen? Sind das sichtbare COntrols? Nur dann funktioniert das mit FindComponent.

2. Jedes Control (auch TMenuItem) hat eine Tag Eigenschaft in der du einen Beliebigen Wert speichern kannst.

beim erstellen:

neuesItem.Tag := Integer(neuInstanz)

beim Auslesen:

InstanzObj := TKlasse((Sender as TMenuItem).Tag)

3. Statt TKlasse(FindComponent(InstanzName)); würde ich (FindComponent(InstanzName) as TKlasse); benutzen, da so auch der Typ geprüft wird. Es kann nämlich durchaussein, dass er nicht das findet, was du erwartest.

stoermi 6. Dez 2004 16:36

Re: Problem mit MenuItems - Werte übergeben?
 
Zitat:

Zitat von jim_raynor
1. Was sind das für Instanzen? Sind das sichtbare COntrols? Nur dann funktioniert das mit FindComponent.

Oh, das wusste ich nicht. Ich dachte, dass findComponent immer geht. Es sind im übrigen Instanzen einer selbst erstellten Klasse. Geht also nicht mit findComponent

Zitat:

Zitat von jim_raynor
2. Jedes Control (auch TMenuItem) hat eine Tag Eigenschaft in der du einen Beliebigen Wert speichern kannst.

beim erstellen:
Delphi-Quellcode:
neuesItem.Tag := Integer(neuInstanz)
beim Auslesen:
Delphi-Quellcode:
InstanzObj := TKlasse((Sender as TMenuItem).Tag)

Das ist natürlich ne sehr gute Möglichkeit. Dann werde ich das wohl so machen müssen.

Zitat:

Zitat von jim_raynor
3. Statt TKlasse(FindComponent(InstanzName)); würde ich (FindComponent(InstanzName) as TKlasse); benutzen, da so auch der Typ geprüft wird. Es kann nämlich durchaussein, dass er nicht das findet, was du erwartest.

Gut zu wissen. Auch wenn es mir hier nicht hilft. Danke für deine Antwort!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 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