请各位高手指点:
  如何在程序运行时,鼠标单击时动态产生控件如Label等,同时给该Label赋双击事件,并实现控件位置拖动等功能!
  (有实际例子更佳!)

解决方案 »

  1.   

    procedure TFRM_pictureandrecord.ImageMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
       StrTmp:string;
       StrCom:string;
       DoorState:String;
       i:integer;
    begin
        TImageControl(sender).MouseCapture:=true;
        if sender is Timage then
        begin
            if button=mbleft then
            begin
                memo1.Clear;
                StrTmp:=(sender as TImage).Name;
                DoorControl:=(sender as TImage).Name;
                for i :=0 to combobox1.Items.Count -1 do
                begin
                        StrCom:=combobox1.Items.Strings[i];
                end;
      

  2.   

    1.点击动态生成控件
    定义全局变量i:integer;
    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      la:TLabel;
    begin
      la:=TLabel.Create(self);
      la.Parent:=form1;
      la.Left:=x;
      la.Top:=y;
      la.Caption:='label'+inttostr(i+1);
      la.Name:='label'+inttostr(i+1);
      i:=i+1;
      la.AutoSize:=true;
      la.Transparent:=true;
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
      i:=0;
    end;
      

  3.   

    2.双击事件
    public
        { Public declarations }
        i:integer;
        procedure LabelDblClick(Sender: TObject);
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      la:TLabel;
    begin
      la:=TLabel.Create(self);
      la.Parent:=form1;
      la.Left:=x;
      la.Top:=y;
      la.Caption:='label'+inttostr(i+1);
      la.Name:='label'+inttostr(i+1);
      i:=i+1;
      la.AutoSize:=true;
      la.Transparent:=true;
      la.OnDblClick:=form1.LabelDblClick;
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
      i:=0;
    end;
    procedure TForm1.LabelDblClick(Sender: TObject);
    begin
      showmessage('双击事件');
    end;
      

  4.   

    var
        Draging: Boolean;
        DownX,DownY: Integer;
    procedure TForm1.MyMouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
        Draging := True;
        DownX := X;
        DownY := Y;
    end;
    procedure TForm1.MyMouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    begin
        if Draging then
        begin
            if Sender is TSpeedButton then
            begin
                (Sender as TSpeedButton).Left := X - DownX + (Sender as TSpeedButton).Left;
                (Sender as TSpeedButton).Top := Y - DownY + (Sender as TSpeedButton).Top;
            end;
        end;  
    end;
    procedure TForm1.MyMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
        if Draging then
        begin
            Draging := False;
            //将当前的控件位置存放到数据库中
        end;
    end;
    With 控件 do
    begin
        OnMouseDown:=MyMouseDown;
        OnMouseMove:=MyMouseMove;
        OnMouseUp:=MyMouseUp;
    end;
      

  5.   

    3.综合
      public
        { Public declarations }
        x1,y1,x2,y2:integer;
        i:integer;
        down:boolean;
        procedure LabelDblClick(Sender: TObject);
        procedure LabelMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure LabelMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure LabelMouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      la:TLabel;
    begin
      la:=TLabel.Create(self);
      la.Parent:=form1;
      la.Left:=x;
      la.Top:=y;
      la.Caption:='label'+inttostr(i+1);
      la.Name:='label'+inttostr(i+1);
      i:=i+1;
      la.AutoSize:=true;
      la.Transparent:=true;
      la.OnDblClick:=form1.LabelDblClick;
      la.OnMouseDown:=form1.LabelMouseDown;
      la.OnMouseMove:=form1.LabelMouseMove;
      la.OnMouseUp:=form1.LabelMouseUp;
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
      i:=0;
    end;
    procedure TForm1.LabelDblClick(Sender: TObject);
    begin
      showmessage('双击事件');
    end;procedure TForm1.LabelMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      x1:=x;
      y1:=y;
      down:=true;
    end;procedure TForm1.LabelMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if down=true then
      begin
        (sender as TLabel).Left:=(sender as TLabel).Left+x-x1;
        (sender as TLabel).Top:=(sender as TLabel).Top+y-y1;
        x1:=x;
        y1:=y;
      end;
    end;procedure TForm1.LabelMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      down:=false;
    end;end.
      

  6.   

    双击事件如何改变动态控件本身的Caption、Size等属性,请高手给详细的指示!
      

  7.   

    动态删除该控件可以吗?现在我只是在双击的事件处理方面还有一点问题:即控制该动态控件的Caption,Width,Height等属性,请高手再度帮忙。