Что касается этого вопроса, я смог создать компонент FMX, представляющий собой белый прямоугольник с черной рамкой, который можно нарисовать внутри курсором мыши (как в MS Paint).
![enter image description here](https://i.stack.imgur.com/jnpjj.png)
Когда я компилирую и запускаю программу, я получаю это:
![enter image description here](https://i.stack.imgur.com/0LfO5.png)
Почему?
Если я установлю, например, свойство Align
, оно будет работать (клиент выравнивает его с клиентом). Если я выровняю компонент по Center
, он будет в центре, но его размер будет меньше (как на картинке).
Похоже, он не "сохраняет" ширину и высоту, которые я установил в Инспекторе объектов. Мой компонент имеет этот соответствующий код:
type
Test = class(TControl)
strict private
FLineFill: TStrokeBrush;
protected
procedure Paint; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Align;
property Anchors;
property ClipChildren;
property ClipParent;
property Cursor;
property Enabled;
property Locked;
property Height;
property HitTest;
property Opacity;
property Margins;
property Position;
property Visible;
property Width;
property OnClick;
property OnDblClick;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnMouseWheel;
property OnMouseEnter;
property OnMouseLeave;
property OnPainting;
property OnPaint;
property OnResize;
property OnResized;
end;
А вот и реализация:
constructor Test.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FLineFill := TStrokeBrush.Create(TBrushKind.Solid, $FF222222);
//more...
end;
destructor Test.Destroy;
begin
FLineFill.Free;
inherited;
end;
procedure Test.Paint;
var
begin
Canvas.Stroke.Assign(FLineFill);
Canvas.ClearRect(ClipRect, TAlphaColorRec.White);
Canvas.Stroke.Color := TAlphaColorRec.Black;
//more code...
end;
Я посмотрел на исходный код TPlotGrid
, который является простым компонентом, и он делает то, что я делаю в основном. Нужно ли настраивать что-то еще в событии Paint?