我想要实现在运行时能够象在设计时那样可选中1个或多个空件,能移动,并能调整其大小;
另外,用户要求能自行改变字体大小,改后要求各控件也能随之自动调整;
还有,就是有没有能可折叠(里面能放控件)的类似vs.net的代码编辑器的控件?请问,有没有好的控件或方法?

解决方案 »

  1.   

    对于第一个问题比较好解决,不停的判断当前mouse下是否有控件就可以了,之后就是改变一下控件的属性
      

  2.   

    就是第一个问题不好解决呢你要做一个可以用鼠标调整大小的PANEL然后把所有东西都放带这个PANEL里去。。在PANEL的WM——SIZE消息处理中也改变 你的LABEL等东西的大小。
    第二个问题有 三放VCL可以解决。。具体不说了。。找来用就是
      

  3.   

    顺便给你点提示吧
    可以在运行期间改变大小和被移动Panel的方法
     在你的PANEL的MOUSEDONW里写下面的东西:if Button=mbLeft then
    begin
      ReleaseCapture;
       Panel1.Perform(WM_SYSCOMMAND,$f012,0);
    //改变$F012 就可以做到Panel 的大小改变。。
    //Good Luck!!!!!!!!!!!!!
    end;
      

  4.   

    gz----------------------------
    ------------------------------
    gz
      

  5.   

    谢谢大家的回复!还有,就是有没有能可折叠(里面能放控件)的类似vs.net的代码编辑器的控件?
    或有没有类似的方法可做到?
      

  6.   

    汗,
    现在的客户啊!!!!
    用第3方控件吧,RAIZE什么的。
      

  7.   


    procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Integer); 
    const 
    SC_DragMove = $F012; { a magic number } 
    begin 
    ReleaseCapture; 
    panel1.perform(WM_SysCommand, SC_DragMove, 0); 
    end;
    procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    {$IFNDEF WIN32} 
    var 
    pt : TPoint; 
    {$ENDIF} 
    begin 
    if ssCtrl in Shift then begin 
    ReleaseCapture; 
    SendMessage(Button1.Handle, WM_SYSCOMMAND, 61458, 0); 
    {$IFNDEF WIN32} 
    GetCursorPos(pt);
    SendMessage(Button1.Handle, WM_LBUTTONUP,MK_CONTROL,Longint(pt));
    {$ENDIF} 
    end; 
    end;