Показать сообщение отдельно
  #5  
Старый 01.06.2017, 12:40
Aptyp Aptyp вне форума
Прохожий
 
Регистрация: 10.03.2017
Сообщения: 14
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Чтобы не было мерцаний при внешней рисовке на компоненте, я придумал такой механизм:
Код:
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, кроме формы конечно.
Ответить с цитированием