Потомок TGraphicControl рисует пустой перед событием рисования - PullRequest
2 голосов
/ 11 февраля 2020

Создал мой собственный простой компонент, основанный на TGraphicControl, который нарисовал aws SVG graphi c. Переопределенная процедура рисования проста ...

procedure TLFSVGControl.Paint;
begin
  Canvas.Brush.Style := bsClear;
  var g := TGPGraphics.Create(Canvas.Handle);
  g.SetTextRenderingHint(TextRenderingHintClearTypeGridFit);
  g.SetSmoothingMode(SmoothingModeAntiAlias);
  DrawSVG(g);
  DrawTextLabel(g);
  g.Free;
end;

Используя этот компонент в моем приложении, я позволяю пользователю щелкнуть и перетащить компонент, чтобы переместить его. Проблема заключается в том, что перед тем, как он перейдет к процедуре рисования, он рисует черный (фоновый) прямоугольник компонента. В результате вы получаете мерцание этой черной границы при перемещении элемента управления. Поскольку TGraphicControl не может получить сообщение WM_ERASEBKGND, я не уверен, как обойти это.

На первом изображении ниже вы видите, что 4 экземпляра моего компонента нарисованы правильно, а на втором изображен снимок экрана при остановке на точка останова в первой строке метода Paint, когда пользователь попытался переместить компонент с меткой 2 (время выполнения). Продолжение приложения приводит к правильному отображению контрольного рисунка, но я действительно хотел бы избавиться от этого мерцания.

К вашему сведению. Ограничительная рамка компонента больше, чем график c, потому что для этого необходимо поддерживать вращение без ограничения графика c.

enter image description here enter image description here

...