程序打开后显示一个白屏,右键菜单新建,弹出一个窗口,设置label标签的caption和name属性,然后自动生成到白屏上,label可自由拖动,以此类推可重复生成label,请教如何制作?

解决方案 »

  1.   

    动态建立TLabel,然后处理它的OnMouseDown、OnMouseMove、OnMouseUp事件。
      

  2.   

    写一个反回TControl的Func,Result就是那个控件了
      

  3.   

    什么控件啊?动态创建tlabel到是可以,可怎么处理它的onmousedown、onmousemove、onmouseup事件啊?
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Label1: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure Label1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure Label1MouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        fDown: Boolean;
        fDynLabel: TLabel;
        { Private declarations }
      public
        { Public declarations }
      end;
    var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      fDynLabel := TLabel.Create(Self);
      with fDynLabel do
      begin
        Parent := Form1;
        Left := 100;
        Top := 100;
        Font.Size := 12;
        Caption := 'Dynamic Label Demo';
        OnMouseDown := Self.Label1MouseDown;
        OnMouseUp := Self.Label1MouseUp;
        OnMouseMove := Self.Label1MouseMove;
      end;
      fDown := FALSE;
    end;procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      fDown := TRUE;
    end;procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      P: TPoint;
    begin
      if fDown then
      begin
        GetCursorPos(P);
        P := Form1.ScreenToClient(P);
        fDynLabel.Left := P.X;
        fDynLabel.Top := P.Y;
      end;
    end;procedure TForm1.Label1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      fDown := FALSE;
    end;end.
      

  5.   

    好象不能多次生成label吧,对应的动作只是针对label1,没有达到要求效果,每次生成的label我要手动设置label的name和caption属性
      

  6.   

    确实是动态建立,可是我要是再建一个label,也让他实现可拖拽功能,就办不到啦,想想看两个或多个可拖拽的label同时出现,,,,关于动态建立一个label,然后具有label1所具有的鼠标响应事件,真的很让我头疼,其实我是想做一个网络连接状态图这样一个软件,我想用.ini文件记录label的ip地址,然后让两个ip之间自动划线表示连通,首先建立多个单位的label并且可拖拽就把我难倒了,不知道如何继承一个已有的label响应事件,有朋友能帮帮我吗?
      

  7.   

    5楼的就可以动态创建,并且可拖动,为什么不试一下呢?
    关键是你要处理好onmousemove事件