for*_*ajt 4 delphi methods components overriding
基于这个答案,我试图覆盖Delphi 7中的OnShowWindow方法TOleContainer.
unit MyOleContainer;
interface
uses
Windows, OleCtnrs;
type
TOleContainer = class(OleCtnrs.TOleContainer)
private
function OnShowWindow(fShow: BOOL): HResult; stdcall; override;
end;
implementation
function TOleContainer.OnShowWindow(fShow: BOOL): HResult;
begin
Result := S_OK;
end;
end.
Run Code Online (Sandbox Code Playgroud)
但这不会编译给出以下错误:[Error] MyOleContainer.pas(11): Field definition not allowed after methods or properties为什么?
编辑:
您能解释一下如何"声明IOleClientSite的实现,继承自TOleContainer并隐藏方法OnShowWindow [...]使用TOleContainer作为IOleClientSite"?
EDIT2:
这是你的意思吗?
TMyContainer = class(TOleContainer, IOleClientSite)
private
FIOleClientSite: IOleClientSite;
function SaveObject: HResult; stdcall;
...
constructor TMyContainer.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Self.OleObjectInterface.GetClientSite(FIOleClientSite);
end;
function TMyContainer.SaveObject: HResult;
begin
Result := FIOleClientSite.SaveObject;
end;
...
Run Code Online (Sandbox Code Playgroud)
错误消息有点误导.它本质上是说override关键字不能出现在stdcall关键字之后.
这有点暂时,但如果你重写一个方法,那么你不需要也不应该重新声明调用约定.覆盖方法时无法修改调用约定,因此最好不要重复它.
但是,当您修复该问题时,您的代码仍然无法编译.那是因为他的OnShowWindow功能不是虚拟的.因此,您无法覆盖它.
我没有看到如何在IOleClientSite.OnShowWindow不重新声明和重新实现整个实现的情况下改变实现的行为IOleClientSite.而且我认为这根本不容易.
| 归档时间: |
|
| 查看次数: |
1121 次 |
| 最近记录: |