Delphi 10.3社区PaintBox重新绘制函数的问题



我目前正在Delphi 10.3社区版本26.0.34749.6593中制作一个小程序。没有其他组件。

从本质上讲,我画的是安装在面板中的TPaintBox。到目前为止一切都很好,但当物体通过";PaintBox1.重新喷漆;对象得到了错误的BrushStyle(当它们应该有bsClear时是bsSolid,例如(当然我试着把它固定下来,但我没有运气。但我发现在以下几点上有些东西不起作用:

procedure TForm1.PaintBox1Paint(Sender: TObject);
var
i: Integer;
fig : ^TFigure;
apen: TPenStyle;
abrush: TBrushStyle;
color1,color2: TColor;
begin
aPen := PaintBox1.Canvas.Pen.Style;
aBrush := bsStyle;
color1 := PaintBox1.Canvas.Brush.Color;
color2 := PaintBox1.Canvas.Pen.Color;
for I:=0 to List.Count-1 do
begin
fig := List.Items[i];
case fig.Typ of
f_Kreis : begin
with Paintbox1.Canvas do
begin
pen.Style := fig.Pen;
Brush.Style := fig.Brush;
pen.Color := fig.PenColor;
brush.Color := fig.BrushColor;
Ellipse(fig.X,fig.Y,fig.X2,fig.Y2);
end;
end;
f_Rechteck :    begin
with PaintBox1.Canvas do
begin
Pen.Style := fig.Pen;
Brush.Style := fig.Brush;
Pen.Color := fig.PenColor;
Brush.Color := fig.BrushColor;
Rectangle(fig.X,fig.Y,fig.X2,fig.Y2);
end;
end;
f_Line :  begin
with PaintBox1.Canvas do
begin
pen.Style := fig.Pen;
brush.Style := fig.Brush;
pen.Color := fig.PenColor;
brush.Color := fig.BrushColor;
MoveTo(fig.X,Fig.Y);
LineTo(fig.X2,fig.Y2);
end;
end;
end;
end;

PaintBox1.Canvas.Pen.Style := aPen;
bsStyle := aBrush;
PaintBox1.Canvas.Brush.Color := color1;
PaintBox1.Canvas.Pen.Color := color2;
end;

所以当";画笔。样式:=图画笔&quot-线路被呼叫,什么也没发生。我一步一步地走;Brush.Style;仍然是";bsSolid";即使当";图"刷";是";bsClear";

说明:TFigure是我自己的类。它包含有关图形(如矩形(的信息。它是父类。

我错过什么了吗。我真的没主意了。有人能告诉我,为什么什么都没发生?

编辑:

为了测试,我添加了以下行:

if Brush.Style <> fig.Brush then
ShowMessage('Warnung!');

Brush.Style := fig.Brush;

它实际上不会将其设置为false,不过Brush。样式是bsSolid,图Brush是bsClear。

您已经声明了fig : ^TFigure;,但类实例已经是引用(指针(。因此,您正在创建一个指向引用的指针,并将该指针当作引用来使用。

删除指针运算符并声明

fig: TFigure;

我无法验证你的代码中是否有其他错误

最新更新