TEdit可以,可TImage可以拖动,但拉它的边缘改变不了大小,有什么好办法可以在运行时用鼠标拖动的方式改变其大小

解决方案 »

  1.   

    设置
    AutoSize:=false;
    Stretch:=true;
    拖动改变大小的方法跟TEdit相同.
      

  2.   

    写了一个 拖动TImage右边界,改变宽度的演示, 供楼主参考:var
      CanReSized : boolean;
      W : integer;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      Caption := Format('%d,%d',[x,y]);
      with TImage(Sender) do
        begin
        if X = Width-1 then
           begin
           Cursor := crSizeWE;
           W := Width;
           end else CurSor := crDefault;
        if CanReSized then Width := X;
        end;
    end;procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if X = Image1.Width-1 then CanReSized := True else CanReSized := False;
    end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      CanReSized := False;
    end;
      

  3.   

    楼上的方法试了,在设计时创建好的TImage时可以生效
    但在运行时动态生成的TImage,我分别写了三个事件对应mousemove,mousedown,mouseup对应三个鼠标事件,可是发现mouseup事件一直没有进入,我都正确设置了鼠标事件呀
      

  4.   

    你说的这些,与本问题无关.
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure ImageMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure ImageMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure ImageMouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      end;var
      Form1: TForm1;implementation
    uses ExtCtrls;
    {$R *.dfm}var
      WCanReSized, HCanReSized : boolean;
      W, H : integer;procedure TForm1.ImageMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      Caption := Format('%d,%d',[x,y]);
      with TImage(Sender) do
        begin
        if (X=Width-1) and (Y=Height-1) then
           begin
           Cursor := crSizeNWSE;
           W := Width;
           H := Height;
           end else
        if X = Width-1 then
           begin
           Cursor := crSizeWE;
           W := Width;
           end else
        if Y=Height-1 then
           begin
           Cursor := crSizeNS;
           H := Height;
           end else CurSor := crCross;
        if WCanReSized then Width := X;
        if HCanReSized then Height := Y;
        end;
    end;procedure TForm1.ImageMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      with TImage(Sender) do 
        if (X=Width-1) and (Y=Height-1) then
           begin
           WCanReSized := True;
           HCanReSized := True;
           end else
        if X = Width-1 then
           begin
           WCanReSized := True;
           HCanReSized := False;
           end else
        if Y=Height-1 then
           begin
           WCanReSized := False;
           HCanReSized := True;
           end else
           begin
           WCanReSized := False;
           HCanReSized := False;
           end;
    end;procedure TForm1.ImageMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      WCanReSized := False;
      HCanReSized := False;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      with TImage.Create(self) do //动态创建TImage对象
        begin
        Left := 50;
        Top := 50;
        Picture.Bitmap.LoadFromFile('C:\Test.Bmp');
        Parent := self;
        Show;
        Cursor := crCross;
        OnMouseDown := ImageMouseDown;//指定它的MouseDown\move\up事件处理过程
        OnMouseUp := ImageMouseUp;    //
        OnMouseMove := ImageMouseMove; //
        end;;
    end;
      

  5.   

    上面的例子,已经是动态创建TImage,并可以拖动"右边界""下边界""右下角"调整大小的了.实际上,可以使用Splitter控件达到这些效果.自己研究吧,我就不给代码了.
      

  6.   

    怎么搞这么复杂?就这两句代码,一定管用
    image.Picture.Graphic.Width:=xx
    image.Picture.Graphic.Height:=yy;
      

  7.   

    怎么搞这么复杂?就这两句代码,一定管用
    image.Picture.Graphic.Width:=xx
    image.Picture.Graphic.Height:=yy;-------------------------------------你的xx, yy  怎么得来的? 那能不能把实现的代码全部写出来,看一下简化了多少? 难道说我的全部代码就只是相当于你的这两句代码?????????自己写一下试一试,不要信口说来