delphi鼠标拖动窗口 改变大小 如何让其中的控件随之改变 :比如说dbrid控件随窗口变化按比例变化 ,Button控件位置随窗口改变而改变..................

解决方案 »

  1.   

    在OnResize事件处理函数中处理
      

  2.   

    OnResize,记录本次和上一次的比例,然后逐个按比例缩放
      

  3.   

       你把所有控件放到PANEL里边 PANEL的align居中就可以了!
      

  4.   

    a5918886 你说的方法不行        窗口大小改变的时候,所有空间都自动重新排列,编写onsize事件处理代码,代码里面获取窗口大小,按照比例调整所有内部空间位置和大小。bdmh兄 能为小弟举个例子吗 最好附上代码 网上实在不好查 
      

  5.   

    a5918886 你说的方法不行    窗口大小改变的时候,所有空间都自动重新排列,编写onresize事件处理代码,代码里面获取窗口大小,按照比例调整所有内部空间位置大小。bdmh兄 能为小弟举个例子吗 最好附上代码 网上实在不好查 
      

  6.   

    在OnReSize事件中刷新Left、Top位置...
      

  7.   

    在窗体的onresize事件中写出让控件伸缩的程序, 
    这时你也知道了窗体的height和width 
    只要由它来控制其控件的尽寸就可以了...
    Option   Explicit 
    Private   FormOldWidth   As   Long 
            '保存窗体的原始宽度 
    Private   FormOldHeight   As   Long 
            '保存窗体的原始高度 '在调用ResizeForm前先调用本函数 
    Public   Sub   ResizeInit(FormName   As   Form) 
      Dim   Obj   As   Control 
      FormOldWidth   =   FormName.ScaleWidth 
      FormOldHeight   =   FormName.ScaleHeight 
      On   Error   Resume   Next 
      For   Each   Obj   In   FormName 
          Obj.Tag   =   Obj.Left   &   "   "   &   Obj.Top   &   "   "   _ 
          &   Obj.Width   &   "   "   &   Obj.Height   &   "   " 
      Next   Obj 
      On   Error   GoTo   0 
    End   Sub '按比例改变表单内各元件的大小, 
    '在调用ReSizeForm前先调用ReSizeInit函数 
    Public   Sub   ResizeForm(FormName   As   Form) 
      Dim   Pos(4)   As   Double 
      Dim   i   As   Long,   TempPos   As   Long,   StartPos   As   Long 
      Dim   Obj   As   Control 
      Dim   ScaleX   As   Double,   ScaleY   As   Double   ScaleX   =   FormName.ScaleWidth   /   FormOldWidth 
          '保存窗体宽度缩放比例 
      ScaleY   =   FormName.ScaleHeight   /   FormOldHeight 
          '保存窗体高度缩放比例 
      On   Error   Resume   Next 
      For   Each   Obj   In   FormName 
          StartPos   =   1 
          For   i   =   0   To   4 
            '读取控件的原始位置与大小           TempPos   =   InStr(StartPos,   Obj.Tag,   "   ",   vbTextCompare) 
              If   TempPos   >   0   Then 
                  Pos(i)   =   Mid(Obj.Tag,   StartPos,   TempPos   -   StartPos) 
                  StartPos   =   TempPos   +   1 
              Else 
                  Pos(i)   =   0 
              End   If 
              '根据控件的原始位置及窗体改变大小 
    '           的比例对控件重新定位与改变大小 
              Obj.Move   Pos(0)   *   ScaleX,   Pos(1)   *   ScaleY,   Pos(2)   *   ScaleX,   Pos(3)   *   ScaleY 
          Next   i 
      Next   Obj 
      On   Error   GoTo   0 
    End   Sub Private   Sub   Form_Load() 
      Call   ResizeInit(Me)     '在程序装入时必须加入 
    End   Sub Private   Sub   Form_Resize() 
      Call   ResizeForm(Me)     '确保窗体改变时控件随之改变 
    End   Sub 
    本例中给出了二个函数:ResizeInit和ResizeForm,在调用ResizeForm之前必须先调用ResizeInit...
      

  8.   


    设置控件的Align属性即可,例如设置为alClient如果是窗口大小改变的时候,所有空间都自动重新排列,一个方式是编写onsize事件处理代码,代码里面获取窗口大小,按照比例调整所有内部空间位置和大小。另外的办法是把控件按照一定的布局存放,合理的设置Align属性。
      

  9.   

    在DELPHI中使用微软的WindowsMediaPlayer ActiveX控件的时候,如果想让控件随窗口大小一起改变,
    最常用的方法就是设置控件的Align属性,但是你会发现,对于ActiveX控件,会出现问题.
      在网上很多贴子,有设置WindowsMediaPlayer控件的焦点的,有使用DoObjectVerb (-1)办法的。
    这两种办法在2000以下的操作系统中没有问题,但是在XP以上的系统中,因为其默认设置的效果是“拖动
    时改变窗口大小”,这样会不让你改变窗口大小。但是最大化、最小化的时候,没问题。最后在一个国外的论坛上找到了解决办法,方法如下:一劳永逸的解决办法是:1、先在窗口里定义一个类型:TLocOleCtrl = Class (TOleControl);2、在窗口的OnResize事件里加上:TLocOleCtrl (WindowsMediaPlayer1).OnPosRectChange (Rect (0, 0, ClientWidth, ClientHeight));通过以上两点设置,一切OK~~~~~