2

私はC++Builder(XE2)を使用しており、Delphiでも使用されるいくつかのVCLコンポーネントを開発する必要があります。私が理解しているように、C ++ BuilderはDelphiコードとDelphiコンポーネントをサポートしていますが、その逆はありませんか?もしそうなら、私が二重の仕事をしないように、Delphiでそれを書き始める方が良いでしょうか?

私の質問の2番目の部分は、より技術的なものです。VCLコンポーネントにプロパティを追加する方法は知っていますが、イベントを追加する方法がわかりません。誰かが私に例を教えてもらえますか(DelphiまたはC ++ Builderに関係なく)。

ありがとう。

4

2 に答える 2

4

私が理解しているように、C ++ BuilderはDelphiコードとDelphiコンポーネントをサポートしていますが、その逆はありませんか?

ソースレベルで-はい。しかし、ライブラリをソースレス(BPL + DCP + DCU)で配布することを選択した場合、Delphiに[]演算子がなく、C ++に仮想オーバーロードコンストラクタがないなど、いくつかの小さな非互換性を除いて、問題はありません。

この見積もりは間違っていたことがわかりました。以下のレミーのコメントを読んでください


ovイベントの例に最も近いのはVCL自体であり、ソースは通常Delphiに付属しています。VCLソースのないDelphiスターター/トライアルがある場合は、オープンソースのVCLライブラリまたはコンポーネントを入手してください。JediVCLや、基本的にソースを含むほぼすべてのVCLコンポーネントなど。たとえば、99%の「FWS」(ソース付きで無料)コンポーネントはイベントを使用します。

最も基本的で広く使用されているイベント通知タイプ(TButton.OnClick、TForm.OnCreateなど)はTNotifyEventです。

そのタイプのDelphiヘルプを開きます。[関連項目]までスクロールして、そこにある2つのリンクを確認してください。

于 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 に答える