gpt4 book ai didi

delphi - 缺少接口(interface)方法 IControl 的实现

转载 作者:行者123 更新时间:2023-12-02 11:07:28 28 4
gpt4 key购买 nike

在 XE2 上编译没有问题,在 XE5 上显示以下错误:

    FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.GetIsFocused
FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.GetEnabled
FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.GetAbsoluteEnabled
FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.GetPopupMenu
FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.EnterChildren
FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.ExitChildren
FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.DoActivate
FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.DoDeactivate
FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.MouseClick
FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.GetInheritedCursor
FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.SetAcceptsControls

整个 FMX.HintManager.pas 代码在这里:
http://pastebin.com/XSfahpV0

第 79 行是:
THintItem  = class;

任何人都可以帮助并告诉确切应该添加什么以便可以编译?
如果需要,我可以提供 TeamViewer session 。

编写代码以使用 FireMonkey 中的提示,但似乎没有人长期更新它。
完整的源代码取自 Delphipraxis。

问候,
G

最佳答案

好吧,编译器会告诉你发生了什么。你只需要学习如何解码它的错误信息。这是如何做到的。

我们来看第一个错误:

FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.GetIsFocused



这首先指向第 79 行。内容如下:
THintItem  = class;

所以问题在于 THintItem .现在这有点令人困惑,因为这是一个前向声明。真正的问题在单元的更深处被发现,但编译器总是指出它认为类声明开始的地方。这就是前向声明。因此,每当您在前向声明中遇到错误时,请继续进行实际声明。这是:
THintItem = class(TFmxObject, IControl)

所以,这是一个派生自 TFmxObject 的类实现 IControl界面。现在,错误消息告诉我们该类缺少接口(interface)方法 IControl.GetIsFocused 的实现。好吧,编译器当然是对的。没有这样的方法。对于所有其他缺失的功能,所有其他错误的性质相同。

因此,要解决这个问题,您需要提供 IControl 中所有方法的实现。 .毫无疑问,自与 XE2(即 FMX v1)以及随 XE5(即 FMX v3)一起发布以来,FMX 框架已经发生了广泛的变化。您需要研究和理解框架中的差异,并将此代码从 FMX v1 移植到 FMX v3。

快速浏览了 THintItem ,似乎 IControl 的大多数实现方法为空。例如:
function THintItem.GetAcceptsControls: Boolean;
begin
Result := False;
end;

function THintItem.GetCursor: TCursor;
begin
Result := crNone;
end;

function THintItem.GetDesignInteractive: Boolean;
begin
Result := False;
end;

procedure THintItem.MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Single);
begin
end;

procedure THintItem.MouseMove(Shift: TShiftState; X, Y: Single);
begin
end;

procedure THintItem.MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Single);
begin
end;

procedure THintItem.MouseWheel(Shift: TShiftState; WheelDelta: Integer;
var Handled: Boolean);
begin
end;

因此,您的十个开始将是为每个缺少的方法添加空或 stub 实现。例如:
function THintItem.GetIsFocused: boolean;
begin
Result := False;
end;

procedure THintItem.MouseClick(Button: TMouseButton; Shift: TShiftState;
X, Y: Single);
begin
end;

然后,您应该更仔细地研究该框架,以确定是否有任何方法需要比这些 stub 更多的东西。

关于delphi - 缺少接口(interface)方法 IControl 的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20575088/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com