Чтобы не было мерцаний при внешней рисовке на компоненте, я придумал такой механизм:
Код:
property Canvas: TCanvas read GetCanvas;
...
function GetCanvas: TCanvas;
begin
Result := FCanvasLink;
end;
procedure DoPaintEvent( _BitMap: TBitmap );
begin
if Assigned( FOnPaint ) then
begin
FCanvasLink := _BitMap.Canvas;
FOnPaint( Self );
FCanvasLink := FCanvas;
end;
FCanvas.Draw( 0, 0, _BitMap );
end;
К тому же ещё компонент при смене какого-то св-ва, к примеру Enable, может вызвать перерисовку, так как нужна другая картинка. При этом поддерживается анимация и перерисовка может идти многократная в таймере. Но каждая перерисовка заканчивается в процедуре DoPaintEvent. Вот тут и возникает та самая ошибка, если один из родителей моего компонента имеет Parent=nil, кроме формы конечно.