|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2016/8/8 1:54:44 |
标题: |
这种编译不过的情况,有办法解决吗? |
浏览:1504 |
|
加入我的收藏 |
楼主: |
procedure TForm5.btn1Click(Sender: TObject);
procedure OnButtonClick(Sender: TObject); begin ShowMessage('sss'); end;
var vBtn: TButton; begin vBtn := TButton.Create(Self); vBtn.OnClick := OnButtonClick; // 出错行 // .... end;
以上代码编译时出错,提示[DCC Error] Unit5.pas(37): E2009 Incompatible types: 'method pointer and regular procedure' 除了将OnOnButtonClick定义到类里之外,还有别的解决办法吗?
----------------------------------------------
18114532@qq.com |
作者: |
|
2016/8/8 2:36:31 |
1楼: |
你把 OnButtonClick 定义成类函数就行了。原因是单独的函数只有4个字节,而OnClick有8个字节长
----------------------------------------------
只有偏执狂才能生存!
|
作者: |
|
2016/8/8 9:15:53 |
2楼: |
procedure TForm4.FormCreate(Sender: TObject);
procedure ____(Sender: TObject); begin ShowMessage(Sender.ClassName); end;
var M: TMethod; begin M.Data := BitBtn1; M.Code := @____; TypInfo.SetMethodProp(BitBtn1, 'OnClick', M); end;
----------------------------------------------
!!!!!!!
|
作者: |
|
2016/8/8 17:18:17 |
3楼: |
2位热心朋友的指点,都是正确的,非常感谢2位高手,不过骑士给出的原因“单独的函数只有4个字节,而OnClick有8个字节长”我很想知道这么高深的东西,您是怎么学到的?
----------------------------------------------
18114532@qq.com
|
作者: |
|
2016/8/8 20:07:27 |
4楼: |
我是被人当作狗屎踩,但是被踩多了也就都明白了。
----------------------------------------------
只有偏执狂才能生存!
|
作者: |
|
2016/8/8 21:54:12 |
5楼: |
独立的函数是指针,类的成员函数是TMethod结构体
----------------------------------------------
武稀松http://www.raysoftware.cn
|
作者: |
|
2016/8/9 11:56:19 |
6楼: |
但我最终使用了嘎嘎的方法了,因为一些设计原因,不能定义到类中间
----------------------------------------------
18114532@qq.com
|
|