为何我覆盖基类的虚方法后,不执行我新写的方法?(20分)

  • 主题发起人 主题发起人 wgqsoft
  • 开始时间 开始时间
W

wgqsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
TCustomDesktop = class(TCustomShellListView)
protected
function CustomDraw(const ARect: TRect; Stage: TCustomDrawStage): Boolean; override;
end;

function TCustomDesktop.CustomDraw(const ARect: TRect;
Stage: TCustomDrawStage): Boolean;
begin
Result := inherited CustomDraw(ARect, Stage);
ShowMessage('执行 CustomDraw');
end;

创建 TCustomDesktop 后,为何不执行新的 CustomDraw ?
 
var
a:TCustomDesktop;
begin
a:=TCustomDesktop.create(........)
a.CustomDraw(..........)

这样应该是可以的。
 
它应该是自动执行的!
 
看看将OwnerDraw属性设置为True是否可以。

to 睢志强:
CustomDraw在保护(Protected)区域,如果不是在同一单元的话,即使手动调用,连编译都通不过。
 
还是不行
 
function TCustomDesktop.CustomDraw(const ARect: TRect;
Stage: TCustomDrawStage): Boolean;
begin
Result := inherited CustomDraw(ARect, Stage);
ShowMessage('执行 CustomDraw');
end;
唯一的可能就是.调用到基类的CustomDraw方法时,以已退出了.就执行不了ShowMessage('执行 CustomDraw');
.
 
将SHOWMESSAGE移前一行,先看哈有没有进到你写的过程中来
 
看看基类的CustomDraw方法里,有没有exit, abort之类的语句
是不是这些跳转的原因
 
首先对象必须是由子类实例化的, 其次 方法必须重载.
 
确实是在基类中有执行条件
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
599
import
I
后退
顶部