如何将一个方法的地址替换成另一个方法的地址? 举例来说,如何用方法B的地址替换成方法A的地址,从而达到调用方法A,实际上是调用方法B 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TMethod = procedure of Object; TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public m_Method : TMethod; procedure Msg1; procedure Msg2; { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.Msg1;begin ShowMessage('Msg1');end;procedure TForm1.Msg2;begin ShowMessage('Msg2');end;procedure TForm1.FormCreate(Sender: TObject);begin m_Method := Msg1;end;procedure TForm1.Button1Click(Sender: TObject);begin m_Method := Msg1;end;procedure TForm1.Button2Click(Sender: TObject);begin m_Method := Msg2;end;procedure TForm1.Button3Click(Sender: TObject);begin m_Method;end;end. sxy_9761() 的办法,基本是这样,如果是需要参数,而且参数类型一样,参数个数一样,那都简单,如果是参数有不同,则复杂一点 用指针Tproc = procedure;p: Pointer;procedure proc1;procedure proc2;p := @proc1;Tproc(p);p := @proc2;Tproc(p); 其实我想实现的是一个类里所有函数都指向同一个函数,比如下面这个类,Button1Click,Button2Click,Button3Click,SetSome,SetSome我都想让他们指向Gen TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } procedure Gen; public procedure SetSome(A:integer;S:string); function GetSome(s:tclass;name:integer):TClass; { Public declarations } end; 1 用函数指针2 利用多态的概念(搜一下 多的是 注好运)--------------------------------------- 欢迎访问 http://www.coderpub.com 技术论坛 delphi,asp.net,C#,j2me,软件工程,企业管理 关于强制类型转换的问题。 两个简单的问题 为什么我写的opengl代码没反应呢? 各位,请教用delphi编写的COM组件在网页中调用出现不支持此接口 估计没多少人会。Corba问题。 有两个问题想请教? Delphi 中连接数据库有几种方式,哪一种方式最好? 串行口编程问题 xiaohuan:刚才给我的程序解压密码是多少啊 怎样定义这样的函数,或者过程,以及我怎样去调用她? 生成可EXE文件怎么做啊?万分火急急,在线等 能给个DEMO吗?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type TMethod = procedure of Object; TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
m_Method : TMethod;
procedure Msg1;
procedure Msg2;
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.Msg1;
begin
ShowMessage('Msg1');
end;procedure TForm1.Msg2;
begin
ShowMessage('Msg2');
end;procedure TForm1.FormCreate(Sender: TObject);
begin
m_Method := Msg1;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
m_Method := Msg1;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
m_Method := Msg2;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
m_Method;
end;end.
如果是参数有不同,则复杂一点
Tproc = procedure;
p: Pointer;procedure proc1;
procedure proc2;p := @proc1;
Tproc(p);
p := @proc2;
Tproc(p);
Button1Click,Button2Click,Button3Click,SetSome,SetSome我都想让他们指向Gen
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
procedure Gen;
public
procedure SetSome(A:integer;S:string);
function GetSome(s:tclass;name:integer):TClass;
{ Public declarations }
end;
2 利用多态的概念
(搜一下 多的是 注好运)--------------------------------------- 欢迎访问 http://www.coderpub.com 技术论坛
delphi,asp.net,C#,j2me,软件工程,企业管理