定义全局变量   LeftTop,RightButtom   :   TPoint; 
 procedure   TForm1.Image1MouseDown(Sender:   TObject;   Button:   TMouseButton; 
    Shift:   TShiftState;   X,   Y:   Integer); 
begin 
    LeftTop   :=   Point(x,y); 
end; procedure   TForm1.Image1MouseUp(Sender:   TObject;   Button:   TMouseButton; 
    Shift:   TShiftState;   X,   Y:   Integer); 
begin 
    RightButtom   :=   Point(x,y); 
    Image1.Canvas.Brush.Color   :=   clBlack; 
    Image1.Canvas.FrameRect(Rect(LeftTop,RightButtom)); 
end; 
我这样作了以后,可以画框了,但是  只能鼠标左键弹起的时候画图,而且这个框是一直存在的,我的目的是:鼠标按住拖动的时候,会有一个矩形框显示,鼠标左键弹起的时候,画的框就消失,应该在MOVE中怎么改 用image控件的话只能调入bmp图,如果是JPG的话,在用canvas时会出错,这个又该如何解决. 

解决方案 »

  1.   

    image的canvas会保存画的东西,画完后再刷新一下就可以,即重新装载一次图片
      

  2.   

    网上找到的,已经试过,在image上也能使用,不过image调的图只能是BMP才能用CANVAS
    例子是在form上画,如果在image1上画也是可以的,image1.canvas.DrawFocusRect();  第一次画框,第二次同位置画就会异或掉
    关键在move中
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls;type
      Tform1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);  private
        { Private declarations }
      public
        { Public declarations }
      end;var
      form1: Tform1;
      fdragging:boolean;
      frect:Trect;
      x1,y1:integer;
    implementation{$R *.DFM}procedure Tform1.FormCreate(Sender: TObject);
    begin
    fdragging:=false;
    end;procedure Tform1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if button=mbleft then
        begin
          fdragging:=true;
          frect.Left:=x;
          frect.Top:=y;
          frect.BottomRight:=frect.TopLeft;
          canvas.DrawFocusRect(frect);
          x1:=x;y1:=y;
        end;end;
    procedure Tform1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      fdragging:=false;
      canvas.DrawFocusRect(frect);
    end;
    procedure Tform1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
    if fdragging then
      begin
        canvas.DrawFocusRect(frect);
        if x1>x then
          begin
            frect.left:=x;
            frect.Right:=x1;
          end
                else
          begin
            frect.left:=x1;
            frect.right:=x;
          end;
          if y1>y then
            begin
              frect.top:=y;
              frect.Bottom:=y1;
            end
                  else
            begin
              frect.top:=y1;
              frect.bottom:=y;
            end;
          canvas.DrawFocusRect(frect);
      end;
    end;end.