delphi5下的画图程序在delphi6下有闪烁,如何解决?(50分)

  • 主题发起人 主题发起人 bluebirds
  • 开始时间 开始时间
B

bluebirds

Unregistered / Unconfirmed
GUEST, unregistred user!
以下用鼠标画矩形框的程序在delphi5下可以运行,在delphi6下只要点击并拖动鼠标,
屏幕总是闪烁,难道必须放弃delphi6?
var
Form1: TForm1;
oldx,oldy,newx,newy:integer;
drawing:boolean=false;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
image1.Canvas.FillRect(image1.BoundsRect);
oldx:=0;
oldy:=0;
newx:=0;
newy:=0;
end;


procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if(not drawing)then
begin
if(oldx<>newx)then image1.Canvas.Rectangle(oldx,oldy,newx,newy);
oldx:=x;
newx:=x;
oldy:=y;
newy:=y;
drawing:=true;
image1.Canvas.Pen.Mode:=pmnot;
image1.Canvas.Brush.Style:=bsclear;
end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if drawing then
begin
image1.Canvas.Rectangle(oldx,oldy,newx,newy);
newx:=x;
newy:=y;
image1.Canvas.Rectangle(oldx,oldy,newx,newy);
end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if drawing then drawing:=false;
end;
 
可惜我没有D6,不能测试。

不过消除闪烁,你可以参考一下,也许有用:

http://www.delphibbs.com/delphibbs/dispq.asp?lid=654930
 
http://www.truevcl.net
有绘图控件
 
to fhb:
nnd 那个东西要钱的,没钱!
 
用TPaintBox替换TImage试试看
 
哪有那么复杂,一句话搞掂:
procedure TForm1.FormCreate(Sender: TObject);
begin
Self.DoubleBuffered:=true; //加上这句就可以了,

给分吧
 
应该没这么简单吧?
反正在我这里是没有效果。 :(
 
你试过了吗?
你的IMAGE1应该直接放在form上面,如果不是
直接放在form上,而是放在比如一个panel上,就
应该设置panel.doublebuffered:=true
 
Good! u r quite right!
确实是要设置Image的Parent的DoubleBuffered为True才行! [:)]
 
接受答案了.
 
多谢,我的是放在scrollbox上的,加上scrollbox1.doublebuffered:=true;就没有闪烁了。
 

Similar threads

后退
顶部