Goa*_*aul -1 delphi compiler-errors
在 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
Run Code Online (Sandbox Code Playgroud)
整个 FMX.HintManager.pas 代码在这里:http ://pastebin.com/XSfahpV0
第 79 行是:
THintItem = class;
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助并告诉确切应该添加什么以便可以编译?如果需要,我可以提供 TeamViewer 会话。
代码是在 FireMonkey 中使用 Hints 编写的,但似乎没有长时间更新它。完整的源代码来自 Delphipraxis。
问候, G
好吧,编译器会告诉你发生了什么。您只需要学习如何解码其错误消息。这是如何做到的。
让我们看看第一个错误:
FMX.HintManager.pas(79): E2291 缺少接口方法 IControl.GetIsFocused 的实现
这首先指向第 79 行。内容如下:
THintItem = class;
Run Code Online (Sandbox Code Playgroud)
所以问题在于THintItem. 现在这有点令人困惑,因为这是一个前向声明。真正的问题是在单元的更深处发现的,但编译器总是将手指指向它认为类声明开始的地方。这就是前向声明。因此,每当您在前向声明中遇到错误时,请转到实际声明。这是:
THintItem = class(TFmxObject, IControl)
Run Code Online (Sandbox Code Playgroud)
所以,这是一个派生自TFmxObject实现IControl接口的类。现在,错误消息告诉我们该类缺少接口方法 IControl.GetIsFocused的实现。嗯,编译器当然是对的。没有这样的方法。对于所有其他缺失的函数,所有其他错误都具有相同的性质。
因此,要解决该问题,您需要提供IControl. 毫无疑问,FMX 框架自首次发布 XE2(即 FMX v1)和随 XE5 发布的 FMX v3 发布以来发生了巨大变化。您需要研究和了解框架中的差异,并将此代码从 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;
Run Code Online (Sandbox Code Playgroud)
因此,您的 10 个入门将是为每个缺失的方法添加空或存根实现。例如:
function THintItem.GetIsFocused: boolean;
begin
Result := False;
end;
procedure THintItem.MouseClick(Button: TMouseButton; Shift: TShiftState;
X, Y: Single);
begin
end;
Run Code Online (Sandbox Code Playgroud)
然后,您应该更仔细地研究该框架,以确定是否有任何方法需要的不仅仅是这些存根。
| 归档时间: |
|
| 查看次数: |
3217 次 |
| 最近记录: |