質問

Delphi を使用して、TLabel から継承したコンポーネントを作成し、TLabel.Paint でカスタム グラフィックスを追加しようとしています。グラフィックをテキストの左側に配置したいので、GetClientRect をオーバーライドしました。

function TMyComponent.GetClientRect: TRect;
begin
  result := inherited GetClientRect;
  result.Left := 20;
end;

このソリューションには解決したい大きな問題があります。コントロールの「グラフィックス領域」をクリックすることはできず、ラベル領域のみをクリックできます。キャプションが空の文字列の場合、デザイナーでコンポーネントをクリックしても選択することはできません。何か案は?

役に立ちましたか?

解決

まず初めに、私の下手な英語について失礼します。
それは良い考えではないと思います。コンポーネントの ClientRect を変更します。このプロパティ/情報はコンポーネントの内部の多くのメソッドとプロシージャに使用され、コンポーネントの機能/動作を変更できます。

テキストを書くポイントを変更しても良いと思います(20ピクセル) DoDrawText プロシージャ -例-) とコンポーネントはグラフィック領域のイベントに応答できます。

procedure TGrlabel.DoDrawText(var Rect: TRect; Flags: Integer);
begin
  Rect.Left := 20;
  inherited;
end;

procedure TGrlabel.Paint;
begin
  inherited;

  Canvas.Brush.Color := clRed;
  Canvas.Pen.Color := clRed;
  Canvas.pen.Width := 3;
  Canvas.MoveTo(5,5);
  Canvas.LineTo(15,8);

end;

他のヒント

このコンポーネントが実行する必要がある、TLabel から取得したメソッド/機能は何ですか?

おそらく、(TImage など) の子孫を作成し、そのペイント メソッドの一部としてテキストを描画する方がよいでしょうか?

それが本当に TLabel の子孫である必要がある場合(これに伴うすべてのことを伴う)、キャプションが空の場合はとにかく TLabel にこの問題が発生しないので、この設計時の問題に悩まされることになると思います。

あなたが得た他の回答にも興味があります!:-)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top