一件很奇怪的事情发生在我身上(至少对我来说很奇怪……)。 我已经在 Firemonkey 窗体上放置了一些 TImages,并且我已经将一些图像分配给它们的位图。 他们显示正常。 然后我添加了另一个 TImage,它是空的。 我正在尝试在 TImage.Canvas 中绘制一些形状,它似乎工作正常,因为我可以在很短的时间内看到带有形状的 TImage,之后带有我的绘图的 TImage 被表单删除并且只有那些“预加载”的 TImages 保持可见。 代码正在运行,因为我可以看到 TImage 的十分之一秒,然后它消失了,只是被表单背景取消了。 我究竟做错了什么? 这是代码
Procedure NDrawCircles(var IMGTarget: TImage; xc, yc, Radius: Integer; MyPen: MyPenType);
var
MyRect: TRectF;
CustPattern: Array [0 .. 7] of Single;
i: Integer;
MyDash, bsc : Integer;
x1, y1, x2, y2 : Extended;
V: Single;
Begin
bsc := IMGTarget.Canvas.BeginSceneCount;
if bsc = 0 then
IMGTarget.Canvas.BeginScene;
IMGTarget.Canvas.Stroke.Kind := TBrushKind.Solid;
IMGTarget.Canvas.Stroke.Color := MyPen.Color;
IMGTarget.Canvas.Stroke.Thickness := MyPen.Thickness;
IMGTarget.Canvas.Stroke.Dash := MyPen.Dash;
x1 := xc - Radius;
y1 := yc - Radius;
x2 := xc + Radius;
y2 := yc + Radius;
MyRect := TRectF.Create(x1, y1, x2, y2);
bsc := IMGTarget.Canvas.BeginSceneCount;
IMGTarget.Canvas.DrawEllipse(MyRect, MyPen.Opacita);
bsc := IMGTarget.Canvas.BeginSceneCount;
if bsc > 0 then
IMGTarget.Canvas.EndScene;
end;
Procedure TConfiguraDignita.DrawBaseModel;
Type
TCircleso = Record
XC,YC : Single;
R : Integer;
MyPen : MyPenType;
end;
Var i : Integer;
Circles : Array[1..7] of TCircleso;
Begin
for i := 1 to 7 do
begin
Circles[i].XC := TargetIMG.Width / 2;
Circles[i].YC := TargetIMG.Height / 2;
Circles[i].MyPen.Kind := TBrushKind.Solid;
Circles[i].MyPen.Color := claBisque;
Circles[i].MyPen.Dash := 1;
Circles[i].MyPen.Opacita := 1.0;
end;
Circles[1].MyPen.Thickness := 4.0;
Circles[2].MyPen.Thickness := 4.0;
Circles[3].MyPen.Thickness := 4.0;
Circles[4].MyPen.Thickness := 2.0;
Circles[5].MyPen.Thickness := 2.0;
Circles[6].MyPen.Thickness := 2.0;
Circles[7].MyPen.Thickness := 2.0;
Circles[1].R := 600;
Circles[2].R := 550;
Circles[3].R := 500;
Circles[4].R := 450;
Circles[5].R := 400;
Circles[6].R := 350;
For i := 1 to 7 do
NDrawCircles(TargetIMG, Trunc(Circles[i].XC), Trunc(Circles[i].YC), Circles[i].R, Circles[i].MyPen);
TargetIMG.Repaint;
End;
在 FormShow 中有一个 DrawBaseModel 过程的调用。 读取 bsc 是为了查看 beginescene 调用后 BeginScene 堆栈中是否有内容。