我在 Delphi 中查看GDI+,发现了下面的演示。(不记得在哪里了。)它非常简单,第一次点击就能正常工作:在经典的 Delphi 和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;
1条答案
按热度按时间ybzsozfc1#
Andreas对WM_PAINT的评论给了我一个想法:我补充道
在循环之后,这解决了问题。
注意:根据Andreas的建议,我将原来写的刷新更改为无效。