我用delpi开发的图形软件中产生的图形有强烈的闪烁,不知为何,急盼答案,谢谢了(5分)

  • 主题发起人 主题发起人 陈君凯
  • 开始时间 开始时间

陈君凯

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm2.FormPaint(Sender: TObject);
var
shaped:array of TShape;
lab:array of TLabel;
i,j:integer;
q:nodeptr;
w,h:integer;
begin
SetLength(shaped, n+1);
for i:=1 to n do
begin
shaped:=TShape.Create(self);
shaped.Parent:=Self;
shaped.Height:=30;
shaped.Width:=30;
shaped.Top:=adj.zby;
shaped.Left:=adj.zbx;
shaped.Brush.Color:=clGreen;
shaped.Pen.Color:=clNavy;
shaped.Pen.Mode:=pmCopy;
shaped.Pen.Style:=psSolid;
shaped.Pen.Width:=1;
shaped.Shape:=stCircle;
end;
for i:=1 to n do
begin
q:=adj.link;
while q<>nil do
begin
Form2.Image1.Canvas.Pen.Color:=clOlive;
Form2.Image1.Canvas.Pen.Width:=1;
Form2.Image1.Canvas.MoveTo(adj.zbx+30,adj.zby+15);
Form2.Image1.Canvas.LineTo(adj[q^.num].zbx,adj[q^.num].zby+15);
q:=q^.link
end;
end;
for i:=1 to l do
begin
Form2.Image1.Canvas.Pen.Color:=clRed;
Form2.Image1.Canvas.Pen.Width:=2;
Form2.Image1.Canvas.MoveTo(adj[pre.x].zbx+30,adj[pre.x].zby+15);
Form2.Image1.Canvas.LineTo(adj[pre.y].zbx,adj[pre.y].zby+15);
end;
 
应该用TPaintBox来画图,就不会闪烁了。
 
在delphi里好像找不到Tpainbox控件,有这样的类,是在窗体中说明它,然后再用吗?
 
在delphi里好像找不到Tpainbox控件??
在System页啊
 
Tpaintpox控见我试了,在产生图形时仍有闪烁,
能给例子说明吗?
谢了
 
你这段程序问题太多了
1. 每次FormPaint的时候用TShape.Create为什么? 上次Create的都那里去了?
这些Shape每个Create一次就可以了, 不用的时候就Free掉
2. 已经画到Image里面的图形不需要每次FormPaint的时候刷新,Image自己会刷的.

解决办法是把你这些画图的语句都从FormPaint拿出去,只需要画一次即可,否则每次
刷新都重新画当然闪烁了
 
后退
顶部