![]() |
Einem Event zugewiesene Ereignisprozedur ermitteln?
Ich weise (nach bestimmten nicht weiter wichtigen Kriterien) dem OnClick-Event von MenuItems verschiedene Prozeduren zu, z.B.:
Delphi-Quellcode:
Wie kann ich später im Code herausfinden, welchem MenuItem ich welche Prozedur zugewiesen habe?
PopupMenu1.Items[1].OnClick := Prozedur3;
PopupMenu1.Items[2].OnClick := Prozedur1; PopupMenu1.Items[3].OnClick := Prozedur2; So geht das jedenfalls nicht:
Delphi-Quellcode:
Wie mach ich's richtig? Oder geht das nur mit RTTI oder sowas?
for i := 0 to PopupMenu1.Items.Count - 1 do
if PopupMenu1.Items[i].OnClick = Prozedur1 then ... else if PopupMenu1.Items[i].OnClick = Prozedur2 then ... else if PopupMenu1.Items[i].OnClick = Prozedur3 then ... |
Re: Einem Event zugewiesene Ereignisprozedur ermitteln?
versuch mal:
Delphi-Quellcode:
Eine Methode besteht ja aus einem Methodenzeiger und dem zugehörigen Objekt.
if TMethod(PopupMenu1.Items[i].OnClick).Code = TMethod(Prozedur1).Code then
|
Re: Einem Event zugewiesene Ereignisprozedur ermitteln?
Delphi-Quellcode:
kreidet der Compiler als "Ungültige Typumwandlung" an...
TMethod(Prozedur1)
|
Re: Einem Event zugewiesene Ereignisprozedur ermitteln?
Zitat:
|
Re: Einem Event zugewiesene Ereignisprozedur ermitteln?
Ich baue mir eine Unit, die mir an ein beliebiges bestehendes PopUpMenu ein paar Standardfunktionen anfügt. Das mache ich, indem ich dem PopupMenu zur Laufzeit neue Einträge hinzufüge und sie entsprechend anpasse.
Da ich mir nun nicht extra merken wollte, welche Funktion denn nun auf welchem MenuItem liegt (diese Info brauche ich zum dynamischen Ein- und Ausschalten von Einträgen), wollte ich dafür einfach die verknüpfte Prozedur heranziehen. Scheint aber wohl nicht so einfach zu sein. Dann muss ich mir halt den Index der jeweiligen Funktion umständlich merken. Umständlich, weil ich entweder für jeden Eintrag extra eine Variable eintragen muss oder - wenn ich ein Array nehme - ich mir wieder extra merken muss, welcher ArrayIndex welcher Funktion entspricht. Da steht dann im Code:
Delphi-Quellcode:
Sollte es eine einfachere Lösung geben zu einem bestehenden (Popup-) Menü Default-Funktionen hinzuzufügen bin ich ganz Ohr ;-)
for i := 0 to PopupMenu1.Items.Count - 1 do
if i = myArray[3] then ... // [3] ist seeehr sprechend... |
Re: Einem Event zugewiesene Ereignisprozedur ermitteln?
Hallo,
schau mal nach RTTI z. B. auf dieser Seite: ![]() Habe schonmal eine entsprechende Routine geschrieben, hab' die Sourcen aber zur Zeit nicht verfügbar. |
Re: Einem Event zugewiesene Ereignisprozedur ermitteln?
Zitat:
Delphi-Quellcode:
oder so.
if not Frobbering then
FFrobberItem.Visible := False; |
Re: Einem Event zugewiesene Ereignisprozedur ermitteln?
Du kannst doch dem .Tag der Items eine ID zuweisen.
dann brauchst du du dir nur zu merken welche Funktion welche ID besitzt. |
Re: Einem Event zugewiesene Ereignisprozedur ermitteln?
Daran habe ich auch schon gedacht. Dann darf aber die Anwendung nicht schon die Tags verwenden und ich habe wieder keinen sprechenden Code:
Delphi-Quellcode:
Natürlich könnte ich noch Konstanten für die Tags anlegen, aber das ist alles so umständlich...
for i := 0 to PopupMenu1.Items.Count - 1 do
if PopupMenu1.Items[i].Tag = 1 then ... else if PopupMenu1.Items[i].Tag = 2 then ... else if PopupMenu1.Items[i].Tag = 3 then ... Ich hatte gehofft, dass da vielleicht was mit den erweiterten RTTI-Möglichkeiten von Delphi2010 geht? |
Re: Einem Event zugewiesene Ereignisprozedur ermitteln?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 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