Lazarus
Home
Help
TinyPortal
Search
Login
Register
Lazarus
»
Forum
»
Free Pascal
»
General
(Moderators:
FPK
,
Tomas Hajny
) »
[SOLVED] Get name of assigned event handler thru rtti?
Free Pascal
Website
Downloads
Wiki
Documentation
Bugtracker
Mailing List
Lazarus
Website
Downloads (Laz+FPC)
Packages (OPM)
FAQ
Wiki
Documentation (RTL/FCL/LCL)
Bugtracker
CCR Bugs
IRC channel
GIT
Mailing List
Other languages
Foundation
Website
Useful Wiki Links
Project Roadmap
Getting the Source
Screenshots
How to use the forum
About donations (wiki)
Bookstore
Computer Math and Games in Pascal
(preview)
Lazarus Handbook
Search
Advanced search
Recent
Access violation when ope...
by
TRon
[
Today
at 07:06:49 am]
Does anyone know why thes...
by
TYDQ
[
Today
at 05:24:32 am]
Forum slow
by
Curt Carpenter
[
Today
at 03:41:07 am]
Arabic text, problem on L...
by
Zaher
[
Today
at 03:29:16 am]
InstallAware Using Lazaru...
by
TRon
[
Today
at 02:55:41 am]
Generics - correct syntax
by
Blaazen
[
Today
at 01:57:40 am]
Demoscene The Champs Crac...
by
Gigatron
[
Today
at 01:05:16 am]
How to use the Event Log?
by
n7800
[
Today
at 12:47:25 am]
v3.99 code completion que...
by
440bx
[
Today
at 12:45:55 am]
FpDebug breakpoint on "be...
by
440bx
[
Today
at 12:36:23 am]
Access violation when re-...
by
TRon
[April 19, 2024, 11:44:51 pm]
[solved] how to get class...
by
jamie
[April 19, 2024, 11:34:44 pm]
Lazarus for Windows on aa...
by
Wallaby
[April 19, 2024, 10:52:25 pm]
Poll: Watches and Display...
by
440bx
[April 19, 2024, 07:13:51 pm]
Who is Indy mattias?
by
paweld
[April 19, 2024, 04:17:53 pm]
I just released a commerc...
by
BrassGear
[April 19, 2024, 03:17:28 pm]
Database standards OR Am ...
by
gidesa
[April 19, 2024, 02:37:56 pm]
How to: create DLL file f...
by
TRon
[April 19, 2024, 02:26:53 pm]
A fairly simple sound sol...
by
paweld
[April 19, 2024, 01:46:11 pm]
Step-into the field sette...
by
Martin_fr
[April 19, 2024, 11:31:48 am]
AI, NLP and CAI: Text Gen...
by
Dzandaa
[April 19, 2024, 11:03:26 am]
dwindows for Android
by
PierceNg
[April 19, 2024, 10:54:44 am]
create system unit from s...
by
Laksen
[April 19, 2024, 10:53:57 am]
[Solved] Find child contr...
by
Joanna
[April 19, 2024, 09:53:43 am]
FpDebug unexpected Assemb...
by
Marc
[April 19, 2024, 08:46:38 am]
« previous
next »
Print
Pages: [
1
]
Author
Topic: [SOLVED] Get name of assigned event handler thru rtti? (Read 2529 times)
piola
Full Member
Posts: 124
Lazarus 2.2, 64bit on Windows 8.1 x64
[SOLVED] Get name of assigned event handler thru rtti?
«
on:
January 05, 2022, 02:00:44 pm »
Hello,
I know how to use RTTI with enum types. This is very helpful. Now I'm facing the problem that I'd like to get the name of an assigned event handler for debugging purposes. Is this possible?
Example:
Code: Pascal
[Select]
[+]
[-]
program
Project1
;
uses
Classes
,
SysUtils
;
type
TTest
=
class
(
TObject
)
procedure
MyTest
(
Sender
:
TObject
)
;
virtual
;
abstract
;
end
;
var
p
:
TNotifyEvent
;
t
:
TTest
;
begin
t
:
=
TTest
.
Create
;
p
:
=
@
t
.
MyTest
;
// wanted: pass p to an rtti call which returns the string "MyTest" or "TTest.MyTest"
FreeAndNil
(
t
)
;
end
.
«
Last Edit: January 13, 2022, 11:05:56 pm by piola
»
Logged
PascalDragon
Hero Member
Posts: 5481
Compiler Developer
Re: Get name of assigned event handler thru rtti?
«
Reply #1 on:
January 06, 2022, 01:43:05 pm »
Here you go, there are some requirements which I've mentioned in the code:
Code: Pascal
[Select]
[+]
[-]
program
trttifunc
;
{$mode objfpc}{$H+}
uses
Classes
,
SysUtils
;
type
{ either enable type information or descend from a type that already has it
enabled (e.g. TPersistent, TComponent, TControl, etc.) }
{$M+}
TTest
=
class
(
TObject
)
{ only published methods can be handled this way as of now (this will change
in the future with Extended RTTI, but we're not quite there yet) }
published
procedure
MyTest
(
Sender
:
TObject
)
;
virtual
;
{abstract;}
{ note: don't use an abstract method for this as this might mess up things }
end
;
{$M-}
procedure
TTest
.
MyTest
(
Sender
:
TObject
)
;
begin
end
;
{ and here we go: }
function
GetMethodName
(
aMethod
:
TMethod
)
:
String
;
var
clsname
,
methodname
:
String
;
begin
clsname
:
=
TObject
(
aMethod
.
Data
)
.
ClassName
;
methodname
:
=
TObject
(
aMethod
.
Data
)
.
MethodName
(
aMethod
.
Code
)
;
if
methodname
=
''
then
Result
:
=
''
else
Result
:
=
clsname
+
'.'
+
methodname
;
end
;
var
p
:
TNotifyEvent
;
t
:
TTest
;
begin
t
:
=
TTest
.
Create
;
p
:
=
@
t
.
MyTest
;
// wanted: pass p to an rtti call which returns the string "MyTest" or "TTest.MyTest"
Writeln
(
GetMethodName
(
TMethod
(
p
)
)
)
;
FreeAndNil
(
t
)
;
end
.
Logged
piola
Full Member
Posts: 124
Lazarus 2.2, 64bit on Windows 8.1 x64
Re: Get name of assigned event handler thru rtti?
«
Reply #2 on:
January 06, 2022, 09:07:12 pm »
Wow, great! Thank you very much!
Logged
Print
Pages: [
1
]
« previous
next »
Lazarus
»
Forum
»
Free Pascal
»
General
(Moderators:
FPK
,
Tomas Hajny
) »
[SOLVED] Get name of assigned event handler thru rtti?
TinyPortal
© 2005-2018