我正在研究 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;
Andreas 对 WM_PAINT 的评论给了我一个想法:我添加了
Image2.Refresh
在循环之后,解决了问题。