我在程序中动态设计了很多LABEL,但不知如何实现这些label能用鼠标在窗体上随便拖动?
还有就是如何响应双击等等的事件呢?
另外有很多的动态LABEL,是否每一个都要写一段代码啊?
先多谢各位

解决方案 »

  1.   

    LABEL不支持拖动的,它没句柄用StaticText吧,它可以支持拖动在动态创建StaticText的时候给需要处理的事件(如双击)中添加关联的事件代码
      

  2.   

    能不能详细点呢?最好能给出实现两个STATICTEXT拖动的一些关键代码,多谢了
      

  3.   

    拖动一个Label:var   
      FDown: Boolean = False;
      FOldX, FOldy:integer;procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if (Button = mbLeft) then FDown:=true;
      FOldX := X;
      FOldy := Y;
    end;procedure TForm1.Label1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if (Button = mbLeft) then FDown:=false;
    end;procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
        if FDown then
         begin
           Label1.Left := Label1.Left + X - FOldX;
           Label1.Top := Label1.Top + Y - FOldY;
         end;
    end;动态生成的控件要响应事件,写成 Obj.OnXXXXX:=XXXXX 这样的格式就可以了。
      

  4.   

    动态生成的控件要响应事件,写成 Obj.OnXXXXX:=XXXXX 这样的格式就可以了?
    我试过,代码如下:
    Image[Rec_count-1].OnDblClick:=OnImageDblClick; //刚才定义的函数
    但是我定义了函数procedure OnImageDblClick(sender:Tobject);
    程序会报错啊,错误如下:
    [Error] Unit1.pas(47): Incompatible types: 'method pointer and regular procedure'
    该如何解决啊?
      

  5.   

    这问题虽然我也不是完全明白,但是把你的OnImageDblClick定义在窗体类中就行了,例如
    procedure Form1.OnImageDblClick(sender:Tobject);
    这样就可以写成 Obj.OnXXXXX:=XXXXX 了
      

  6.   

    Lbl1 写好 移动事件
    新增的时候指定到 lbl1的 鼠标事件
    new 
    ---
    SetLength(LbltArr, Length(LbltArr)+1);
    LbltArr[Length(LbltArr)-1]:=TLabel.Create(Self);
    LbltArr[Length(LbltArr)-1].Name:='LblArr'+inttostr(count_lbl);
    LbltArr[Length(LbltArr)-1].Parent:=Self;
    LbltArr[Length(LbltArr)-1].Top:=100 +Length(LbltArr)*10;
    LbltArr[Length(LbltArr)-1].Left:= 100+Length(LbltArr)*10 ;
    LbltArr[Length(LbltArr)-1].Caption:='new';
    LbltArr[Length(LbltArr)-1].OnClick:=Lbl1.OnClick;
    LbltArr[Length(LbltArr)-1].OnMouseDown:=Lbl1.OnMouseDown;
    LbltArr[Length(LbltArr)-1].OnMouseMove:=Lbl1.OnMouseMove;
    LbltArr[Length(LbltArr)-1].OnMouseUp:=Lbl1.OnMouseUp;