TCornerButton から継承する新しいコンポーネントを作成して、ドロップダウン メニュー オプションを追加しました。
最初の質問...
ドキュメントで説明されているように、「Paint」メソッドではなく「AfterPaint」メソッドをオーバーライドする必要があるのはなぜですか。「ペイント」をオーバーライドしても、描画は行われませんでした。
2番目の質問...
「AfterPaint」メソッドを使用して少し下向きの矢印を描画すると、ボタンがフォーカスされるまで約5ピクセル右にオフセットされます。ボタンの上にカーソルを置いただけでは、問題は解決されないようです (再描画が発生すると予想されるため)。私はこれをコード内の「ScalePoint」の有無にかかわらず結び付けましたが、毎回間違っています。また、設計時に間違った位置に表示されます。実行時にボタンがフォーカスされるとすぐに、矢印が期待される位置に移動します。フォーカスを失うと、間違った位置に戻ります。ご参考までに。「幅」は変更されていません-私はそれをテストしました。
procedure TLFButton.AfterPaint;
var
down_arrow: TPolygon;
x, y: Extended;
begin
inherited;
if FDropDownButton then
begin
Canvas.Fill := TText(FindStyleResource('text')).Fill;
x := Width - 12;
y := (Height / 2) - 3;
SetLength(down_arrow, 3);
down_arrow[0] := ScalePoint(PointF(x, y), Scale.X, Scale.Y);
down_arrow[1] := ScalePoint(PointF(x+8,y), Scale.X, Scale.Y);
down_arrow[2] := ScalePoint(PointF(x+4,y+6), Scale.X, Scale.Y);
Canvas.FillPolygon(down_arrow, 255);
end;
end;