delphi GDI+图像在绘图上不更新

jxct1oxe  于 2023-04-20  发布在  其他
关注(0)|答案(1)|浏览(152)

我在 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;
ybzsozfc

ybzsozfc1#

Andreas对WM_PAINT的评论给了我一个想法:我补充道

Image2.Invalidate

在循环之后,这解决了问题。
注意:根据Andreas的建议,我将原来写的刷新更改为无效。

相关问题