2

我使用 C++ Builder (XE2),我需要开发一些在 Delphi 中也可以使用的 VCL 组件。据我了解,C++ Builder 支持 Delphi 代码和 Delphi 组件,但反过来不支持?如果是这样,最好开始用Delphi编写它,这样我就不会做双重工作?

我的问题的第二部分更具技术性;我知道如何在 VCL 组件中添加属性,但不知道如何添加事件。有人可以给我一个例子吗(无论是 Delphi 还是 C++ Builder)。

谢谢。

4

2 回答 2

4

据我了解,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 帮助。滚动到“另见”并在那里查看两个链接。

于 2012-09-19T12:33:04.350 回答
2

如:(从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;
于 2012-09-19T11:43:24.080 回答