在方法体中获得方法自己的名字 ( 积分: 100 )

  • 主题发起人 张鸿林
  • 开始时间
to jfyes
呵呵!谢谢指教
 
function GetMethodName(Func: Pointer): string;
begin
Result := TForm1.MethodName(Func);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
ShowMessage(GetMethodName(@TForm1.FormCreate));
ShowMessage(GetMethodName(@TForm1.Button3Click));
ShowMessage(GetMethodName(@TForm1.TestIt));
ShowMessage(GetMethodName(@TForm1.FuncIt));
end;
 
谢谢piao40993470和jfyes,
type TOK = procedure (Sender: TObject) of object;
procedure TForm1.btn1Click(Sender: TObject);
var tt: TOK;
begin
tt := btn1Click;
ShowMessage(Form1.MethodName(@tt));
end


tt := btn1Click;---------还是把它写死了^-^
我想如引用self一样,代码在任何一个过程中都一样

 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
published
procedure test;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.test;
begin
Form1.test;
end;

你是不是要這個?
 
to 张鸿林
难道你的意思是调用方法要从自己获得名称?(而且在运行时刻)
就像
procedure okok;
begin
ShowMessage(okok.name);//呵呵,打个比方
end;
 
to piao40993470
没错,就是这个意思
 
procedure TForm1.Button1Click(Sender: TObject);
var
P : Pointer;
begin
asm
PUSH EAX
CALL @@1
@@1:
POP EAX
SUB EAX, $22 //计算入口地址
MOV P, EAX
POP EAX
end;
//
ShowMessage(TForm1.MethodName(P));
//
end;
 
哇!
还是tseug强!!!!
佩服佩服
 
tseug,有够厉害的说。
 
tseug,大师级的
留一天,明天结单
 
ShowMessage(TForm1.MethodName(P));
这个TForm1还需要推敲一下
tseug,是否也来个汇编实现?
现在这个问题已经变成纯技术讨论了,是否真在应用中使用这个技术不重要
 
大家都答的啊,结贴,就是一个 self.methodname吗,RTTI信息。
 
张鸿林:我弄的“榨尽最后一滴血 v3.3 For SQL SERVER/ACCESS”,能给我提提意见吗?
qq:42872272
 
大家都答的啊,结贴,就是一个 self.methodname吗,RTTI信息。
=============
赫赫,不是那么简单
如果这个问题处理得好的话,可以像self一样
定义一个self.thisMethod引用来调用
为了更深入讨论,另开300分的贴子
当然,高手不在乎分,再开贴子只是表示这个问题有难度
请接下贴讨论
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3006961
 
多人接受答案了。
 
顶部