gpt4 book ai didi

delphi - 使用接口(interface)作为已发布的链接属性

转载 作者:行者123 更新时间:2023-12-03 15:28:19 24 4
gpt4 key购买 nike

我正在尝试发布一个属性,该属性允许我在实现指定接口(interface)的所有组件之间进行选择。可以做这样的事情吗?

我尝试使用接口(interface)作为已发布的属性,但它似乎不起作用。以下是我遵循的步骤:

我定义了两个接口(interface)和三个对象用于测试:

uses
Classes, Variants;

type
IMyInterfaceA = interface
function FGetValue() : Variant;
end;

TMyObjectA = class(TComponent, IMyInterfaceA)
protected
FValue : Variant;
FAlternativeValueSource : IMyInterfaceA;
function FGetValue() : Variant;
published
property Value : Variant read FGetValue write FValue;
property AlternativeValueSource : IMyInterfaceA read FAlternativeValueSource write FAlternativeValueSource;
end;

IMyInterfaceB = interface
procedure DoSomething();
end;

TMyObjectB = class(TComponent, IMyInterfaceB)
public
procedure DoSomething();
end;

TMyObjectC = class(TComponent);

implementation

function TMyObjectA.FGetValue() : Variant;
begin
if((FValue = Null) AND (FAlternativeValueSource <> nil))
then Result := FAlternativeValueSource.FGetValue
else Result := FValue;
end;

procedure TMyObjectB.DoSomething();
begin
//do something
end;

然后我在设计时包中注册了 TMyObjectATMyObjectBTMyObjectC:

procedure Register();
begin
RegisterComponents('MyTestComponents', [
TMyObjectA,
TMyObjectB,
TMyObjectC
]);

//requires DesignIDE, uses DesignIntf
RegisterPropertyInCategory('Linkage', TMyObjectA, 'AlternativeValueSource');
end;

我已向表单添加了 4 个对象:

MyObjectA1: TMyObjectA;
MyObjectA2: TMyObjectA;
MyObjectB1: TMyObjectB;
MyObjectC1: TMyObjectC;

选择MyObjectA1,在对象检查器的AlternativeValueSource下拉列表中,我看到了所有具有接口(interface)的对象。 (我期望只有实现 IMyInterfaceAMyObjectA1MyObjectA2))

enter image description here

最佳答案

为您的界面定义 GUID。

  IMyInterfaceA = interface
['{A5675798-F457-4E32-B0AA-608717CFD242}']
function FGetValue() : Variant;
end;

Delphi 的 IDE 通过 GUID(设计时)识别接口(interface)。

关于delphi - 使用接口(interface)作为已发布的链接属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40584819/

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