TLabel へのグラフィックの追加に関する問題
-
02-07-2019 - |
質問
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 にこの問題が発生しないので、この設計時の問題に悩まされることになると思います。
あなたが得た他の回答にも興味があります!:-)
所属していません StackOverflow