image上动态画线的问题! 我在image上画了一堆线,想让这些线动起来,但原来画的线还在上面。image没有clear属性,不能一下清除上面的内容,再重画,有什么办法吗?(我把image设为透明的) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第一种:Image1.Picture:=nil;第二种:Image1.Canvas.FillRect(rect(0,0,Image1.Width,Image1.Height));------一般画图不要在界面上直接画,内部用个bitmap,在它上面画,然后copy到界面上,速度可以加快,也可以解决闪烁 cll007的代码是在form的canvas上面画的,如果在image控件的canvas上面画始终都会有闪烁呢?? 闪有一种解决办法,就是 self.DoubleBuffered:=true;-----------或者采取下面的方法,不过下面的方法会有另外的问题unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, ExtCtrls, ComCtrls, OleCtrls, SHDocVw, Grids;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Image1: TImage; procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); private { Private declarations } FDraw:Boolean; FDownPoint,FUpPoint:TPoint; public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin //if not FDraw then FDownPoint:=Point(X,Y);end;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin if ssLeft in Shift then begin if FDraw then TImage(Sender).Canvas.Rectangle(FDownPoint.X,FDownPoint.Y, FUpPoint.X,FUpPoint.Y); FUpPoint:=Point(X,Y); TImage(Sender).Canvas.Rectangle(FDownPoint.X,FDownPoint.Y,X,Y); FDraw:=true; end;end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin FDraw:=false; TImage(Sender).Canvas.FillRect(TImage(Sender).Canvas.ClipRect);//可注释掉,以前画的就可以显示end;procedure TForm1.FormCreate(Sender: TObject);begin FDraw:=false; Image1.Canvas.Pen.Mode:=pmnotXor;end;end. 关于 图片 色彩校正的 批处理 该怎么做? 写一个过程,所有的窗体单元都能调用,怎么处理.. 怎么把光标定位在我要找的记录上(如在Dbgrid上)? 求助,在xp系统下怎样实现程序自动关机呀? 好用delphi IDE插件有哪些? 求教:ApplyUpdate二次更新数据失败 关于TCavas作图的问题 如何获取CommandText里执行的值? 生成Form时遇到的问题。 分布式计算,如何防止数据伪造和纂改,希望大家来讨论讨论 我怎样通过程序检测在系统突然遭断电或非法错误而不正常关闭? 十万火急DBGrid控件的一种用法
第二种:Image1.Canvas.FillRect(rect(0,0,Image1.Width,Image1.Height));
------
一般画图不要在界面上直接画,内部用个bitmap,在它上面画,然后copy到界面上,速度可以加快,也可以解决闪烁
-----------
或者采取下面的方法,不过下面的方法会有另外的问题
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, ExtCtrls, ComCtrls, OleCtrls, SHDocVw, Grids;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Image1: TImage;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FDraw:Boolean;
FDownPoint,FUpPoint:TPoint;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
//if not FDraw then
FDownPoint:=Point(X,Y);
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssLeft in Shift then
begin
if FDraw then
TImage(Sender).Canvas.Rectangle(FDownPoint.X,FDownPoint.Y,
FUpPoint.X,FUpPoint.Y);
FUpPoint:=Point(X,Y);
TImage(Sender).Canvas.Rectangle(FDownPoint.X,FDownPoint.Y,X,Y);
FDraw:=true;
end;
end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FDraw:=false;
TImage(Sender).Canvas.FillRect(TImage(Sender).Canvas.ClipRect);//可注释掉,以前画的就可以显示
end;procedure TForm1.FormCreate(Sender: TObject);
begin
FDraw:=false;
Image1.Canvas.Pen.Mode:=pmnotXor;end;end.