我使用 C++ Builder (XE2),我需要开发一些在 Delphi 中也可以使用的 VCL 组件。据我了解,C++ Builder 支持 Delphi 代码和 Delphi 组件,但反过来不支持?如果是这样,最好开始用Delphi编写它,这样我就不会做双重工作?
我的问题的第二部分更具技术性;我知道如何在 VCL 组件中添加属性,但不知道如何添加事件。有人可以给我一个例子吗(无论是 Delphi 还是 C++ Builder)。
谢谢。
我使用 C++ Builder (XE2),我需要开发一些在 Delphi 中也可以使用的 VCL 组件。据我了解,C++ Builder 支持 Delphi 代码和 Delphi 组件,但反过来不支持?如果是这样,最好开始用Delphi编写它,这样我就不会做双重工作?
我的问题的第二部分更具技术性;我知道如何在 VCL 组件中添加属性,但不知道如何添加事件。有人可以给我一个例子吗(无论是 Delphi 还是 C++ Builder)。
谢谢。
据我了解,C++ Builder 支持 Delphi 代码和 Delphi 组件,但反过来不支持?
在源代码级别 - 是的。但是,如果您选择无源分发您的库 - BPL+DCP+DCU - 那么这无关紧要,除了一些小的不兼容问题,例如 Delphi 缺少 [] 运算符和 C++ 缺少虚拟重载构造函数。
事实证明,这个估计是错误的。阅读下面雷米的评论
最接近您的示例 ov 事件是 VCL 本身,源代码通常随 Delphi 一起提供。如果您有没有 VCL 源的 Delphi Starter/Trial - 然后获取任何开源 VCL 库或组件。例如 JediVCL 或基本上几乎任何带有源的 VCL 组件。例如,任何“FWS”(免费提供源代码)组件 99% 使用事件。
最基本和广泛使用的事件通知类型——例如 TButton.OnClick、TForm.OnCreate 等等——是 TNotifyEvent
打开该类型的Delphi 帮助。滚动到“另见”并在那里查看两个链接。
如:(从about.delphi.com借来的代码)
type
TState = (stStarted, stStopped);
TStateChangeEvent = procedure
(Sender : TObject; State : TState) of object;
TThirdComponent = class(TSecondComponent) // or whatever
private
{ Private declarations }
FState : TState;
FOnStart,
FOnStop : TNotifyEvent;
FOnStateChange : TStateChangeEvent;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
procedure Start; override;
procedure Stop; override;
property State : TState
read FState;
published
{ Published declarations }
property OnStart : TNotifyEvent
read FOnStart
write FOnStart;
property OnStateChange : TStateChangeEvent
read FOnStateChange
write FOnStateChange;
property OnStop : TNotifyEvent
read FOnStop
write FOnStop;
end
然后你可以做
procedure TThirdComponent.Start;
begin
inherited;
FState := stStarted;
if Assigned(OnStart) then OnStart(Self);
if Assigned(OnStateChange) then
OnStateChange(Self, State);
end;