我在image上画了一堆线,想让这些线动起来,但原来画的线还在上面。image没有clear属性,不能一下清除上面的内容,再重画,有什么办法吗?(我把image设为透明的)  

解决方案 »

  1.   

    第一种:Image1.Picture:=nil;
    第二种:Image1.Canvas.FillRect(rect(0,0,Image1.Width,Image1.Height));
    ------
    一般画图不要在界面上直接画,内部用个bitmap,在它上面画,然后copy到界面上,速度可以加快,也可以解决闪烁
      

  2.   

    cll007的代码是在form的canvas上面画的,如果在image控件的canvas上面画始终都会有闪烁呢??
      

  3.   

    闪有一种解决办法,就是  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.