GDI+ 图像在绘图时不更新

问题描述 投票:0回答:1

我正在研究 Delphi 中的 GDI+,并找到了下面的演示。 (不记得在哪里。) 它非常简单,第一次点击时效果很好:在经典的 Delphi TImage 和 GDI+ 控制的 TImage 上并排绘制了一系列圆圈。
然而,随后的点击确实会在 Image1 中产生新的圆圈,但不会在 Image2(GDI+ 图像)中产生。这里发生了什么?

procedure TFormMain.Button1Click(Sender: TObject);
var
  I, X, Y, R: Integer;
  graphics: TGPGraphics;
  SolidPen: TGPPen;
  SolidBrush: TGPBrush;
begin
  graphics := TGPGraphics.Create(Image2.Canvas.Handle);
  SolidPen := TGPPen.Create(MakeColor(255, 0, 0, 0), 3);
  SolidBrush := TGPSolidBrush.Create(MakeColor(255, 0, 0, 0));
  try
    graphics.SetSmoothingMode(SmoothingModeAntiAlias);
    SolidPen.SetWidth(3);
    Image1.Canvas.Pen.Width := 3;
    for I := 1 to 1000 do
    begin
      R := Random(100);
      X := Random(700);
      Y := Random(1000);
      Image1.Canvas.Ellipse(X-R, Y-R, X+R, Y+R);

      (SolidBrush as TGPSolidBrush).SetColor($80000000 or Random($1000000));
      graphics.FillEllipse(SolidBrush, X-R, Y-R, 2*R, 2*R);
      graphics.DrawEllipse(SolidPen, X-R, Y-R, 2*R, 2*R);
    end;
  finally
    SolidBrush.Free;
    SolidPen.Free;
    graphics.Free;
  end;
end;
delphi gdi+
1个回答
0
投票

Andreas 对 WM_PAINT 的评论给了我一个想法:我添加了

Image2.Refresh

在循环之后,解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.