6

TCustomButton から派生したカスタム ボタン コンポーネントがあります。

オーナードローにするために、次のように CreateParams をオーバーライドしました。

procedure TMyButton.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do
  begin
    Style := Style or BS_OWNERDRAW;
  end;
end;

私のボタンは自分の絵などで問題なく動作しますが、オブジェクト インスペクターでブール プロパティを提供して、ボタンを所有者描画するかどうかを指定するために使用できるようにしたいと考えています。

たとえば、プロパティが有効になっている場合、ボタンは所有者描画ボタンとして独自のペイント ルーチンでペイントされます。プロパティがオフになっている場合は、テーマに合わせた Windows ボタン スタイル (通常の TButton など) としてペイントする必要があります。

CreateParams は私のボタンに ownerdawn であるべきだと伝えますが、ボタンが ownerdrawing であるべきかどうかをボタンに伝えるオプションを提供したいと思います。設計時または実行時にコードを介してプロパティを変更することにより、ボタンに所有者描画するかどうかを伝えたいと思います。

これは可能ですか?

4

2 に答える 2

6

次のように実行できます。

  1. プロパティを作成しOwnerDrawます。
  2. そのプロパティをテストし、CreateParamsそれに応じて動作を切り替えます。
  3. RecreateWndプロパティが変更されるたびに呼び出します。

項目 3 の代わりに、 を呼び出すだけでウィンドウ スタイルを変更できる場合がありますSetWindowLongHandleAllocatedこれを行う前に、必ずテストしてください。不必要にウィンドウを強制的に作成しても意味がありません。ただし、これが発生するたびにペイント サイクルを強制する必要があると考えられます。

個人的には、ウィンドウの再作成を強制する傾向があると思います。

于 2013-02-06T16:56:24.250 に答える