Es ist technisch möglich (andernfalls könnte der Formular-Designer der IDE keinen Code für Komponentenereignishandler zur Entwurfszeit erzeugen), jedoch gibt es wichtige Vorbehalte, die Ihr Ziel behindern (und das bestimmte Beispiel in Ihrer Frage unmöglich machen) resolve):
die notwendige RTTI ist nur für Eigenschaften erzeugt, die als published
(wie Komponente Ereignisse erklärt werden). RTTI wird nicht für Methoden selbst generiert (selbst published
Einsen), oder für Eigenschaften, die nicht published
sind.
TObject
hat eine öffentliche MethodAddress()
Methode für das Erhalten der Speicheradresse einer published
Methode (das DFM-Streaming-System diese verwendet, wenn Event-Handler Einhaken) Sie können jedoch nicht die erforderliche RTTI aus einem Methodenzeiger allein zu bekommen.
IF Sie können eines published
Ereignis an den Wert einen bestimmten Methodenzeiger übereinstimmen, dann können Sie die Parameternamen aus der Veranstaltung RTTI extrahieren. Besorgen Sie sich einen TypInfo.PPropInfo
Zeiger für das Ereignis mit der TypInfo.GetPropInfo()
Funktion, dann passieren seine PropType
Feldwert an der TypInfo.GetTypeData()
Funktion einen TypInfo.PTypeData
Zeiger zu bekommen, und dann können Sie durchlaufen seine ParamList
Feld (das ein Array von Datensätzen enthalten ParamName
und TypeName
Felder) .
Sehen Sie im folgenden Blog-Artikel zu diesem Thema, um weitere Informationen:
Getting the parameters of published methods.
Für das, was Sie versuchen, eine Universallösung würde Extended RTTI erfordern, die in Delphi 2010 eingeführt wurde und ist somit nicht in Delphi 7. Erweiterte RTTI nicht auf published
Elemente beschränkt ist, und ist viel detaillierter als was das alte RTTI bietet.
Es gibt keine 'AddItem()' Methode in 'TString/List'. Es gibt 'Add()' und 'AddObject()' stattdessen. –
OK. Ich habe es korrigiert. –