Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Item aus Mainmenü als sender? (https://www.delphipraxis.net/35224-item-aus-mainmenue-als-sender.html)

herrentor 4. Dez 2004 01:13


Item aus Mainmenü als sender?
 
moin, ich habe ein problem mit meinem mainmenü und zwar möchte ich einen eintrag wie einen button benutzen:

Delphi-Quellcode:
if sender=Speichern then
in diesem fall ist Speichern ein button. was ich möchte ist:

Delphi-Quellcode:
if sender=Speichern or sender=mainmenu.speichernmenu then
wie kann ich also einen mainmenueintrag als sender benutzen? danke im voraus.

Christian Seehase 4. Dez 2004 01:18

Re: Item aus Mainmenü als sender?
 
Moin Herrentor,

so wie ich das sehe, solltest Du Dich mal mit TActionList beschäftigen.

herrentor 4. Dez 2004 01:20

Re: Item aus Mainmenü als sender?
 
ist das nicht mit mainmenü möglich?

dizzy 4. Dez 2004 01:22

Re: Item aus Mainmenü als sender?
 
Mach das doch besser als Cast mit Typunterscheidung. Bsp:
Delphi-Quellcode:
if Sender is TButton then
begin
  with TButton(Sender) do
  .
  .
end
else
if Sender is TMainMenuItem then
  with TMainMenuItem(Sender) do
  .
  .
end;
Ist eleganter als den Sender gegen jede existiernde Instanz zu prüfen. Und wenn du dann doch noch unter einzelnen Buttuns oder MenuItems unterscheiden musst, so würde ich da die Eigenschaft "Tag" nutzen - oder wenn alle (ganz sicher) eine einzigartige Beschriftung haben, dann geht's auch über die Caption. Das ist aber langsamer und nicht so schön, da wenn du diese dann änderst das Contorl nicht mehr identifiziert werden kann.

Gruss,
Fabian

Christian Seehase 4. Dez 2004 01:23

Re: Item aus Mainmenü als sender?
 
Moin Herrentor,

doch, sollte gehen:

Delphi-Quellcode:
  if (Sender is TMenuItem) then begin
    if (Sender as TMenuItem) = Speichern1 then ShowMessage('SPEICHERN');
  end;

dizzy 4. Dez 2004 01:32

Re: Item aus Mainmenü als sender?
 
Zitat:

Zitat von Christian Seehase
Moin Herrentor,

doch, sollte gehen:

Delphi-Quellcode:
  if (Sender is TMenuItem) then begin
    if (Sender as TMenuItem) = Speichern1 then ShowMessage('SPEICHERN');
  end;

Das as kann man sich hier allerdings sparen, da die Typprüfung dann ja schon erfolgreich war. Da reicht nen Cast (s.o.) ;)
Und hast ja Recht: Es macht auch hier noch Sinn den Vergleich mit der Instanz zu machen. Meine Variante mit dem Tag ist nur Mehraufwand.

Was aber auch gehen müsste:
Delphi-Quellcode:
if Integer(Pointer(Sender)) = Integer(Pointer(Speichern1)) then ....
Ob der Vergleich ganz ohne Cast auch geht weiss ich nicht, da es ja alles eh nur Integer sind. Es kann (und wird vermutlich) so sein dass der Compiler dann aber meckert. Also besser mit den Casts auf Nummer sicher gehen :)
Ob das nun schön/lesbar ist, das ist eine andere Frage :mrgreen:

herrentor 4. Dez 2004 01:34

Re: Item aus Mainmenü als sender?
 
ok, besten dank. funktioniert.


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