0

デバイスへの入力と出力を制御および処理するクラスを作成しています。I/O の一部は、Comport ライブラリ (Tcomport、Dejan Crnila) を使用しているシリアル ポートによって行われる予定です。Tcomport および TcomDataPacket コンポーネントは、TComponent の子孫として宣言されています。

自分のクラスを次のように宣言する方が良いですか?

  1. 単純なクラス ( TThingy = クラス)
  2. コンポーネント (TThingy = class(TComponent)

1) の場合、TComPort.create 呼び出しに何を渡す必要がありますか? 現時点では、インスタンスの作成と解放を手動で処理するつもりです。

4

1 に答える 1

4
  • ユーザーがこれらのコンポーネントのいずれかをフォームにドロップできるようにするか、TComponentメカニズムを使用して所有権を処理できるようにする場合は、から派生させTComponentます。
  • それ以外の場合は、から派生しTObjectます。

Ownerフレームワークを作成するときの の指定TComponentはオプションです。オプトアウトする場合は、単純nilに a のコンストラクターに渡しTComponentます。それを行うと、コンポーネントの所有権を取得し、それFreeが完了したときに呼び出すのはあなたの仕事です。

したがって、あなたがやりたいことは、次のようにクラスを宣言することだと思います。

type
  TThingy = class
  private
    FComport: TComport;
  public
    constructor Create;
    destructor Destroy; override;
  end;

....

constructor TThingy.Create;
begin 
  inherited;
  FComport := TComport.Create(nil);
end;

destructor TThingy.Destroy;
begin
  FComport.Free;
  inherited;
end;
于 2013-02-17T13:31:14.800 に答える