Delphi 可以吗?我只知道 Java 里面的布局管理器可以,没听说过 Delphi 也有这个功能。在 VB/VC 中都需要自己做:
Private Sub Form_Resize
    ' 在这里根据窗体的大小调整控件的位置
End Sub如果要例子,发 email 给我。

解决方案 »

  1.   

    如edyang所说,在vc、vb、vfp中要解决窗体最大化时其中的控件跟着相应的伸缩,没别的好办法(不用ocx控件的话),只有在Form_Resize根据FORM的ScaleWidth和ScaleHeight改变你控件的大小!
      

  2.   

    感谢edyang和NiceFeather的答疑。由于我现在的编程显示环境是在800X600,但如果未知的显示环境是1024X768或别的,就产生了一个窗体FORM和其中的控件位置显示不能动态刷新的问题。我采用了一种比较笨的办法,就是先检测显示设置,然后强行改变到设计时的显示设置,退出时再恢复。这样做是很无奈的。如果用代码编程处理的话,由于FORM较多,是否每个FORM都得写代码呢,这样工作量会非常大,但DELPHI就不会有这个问题。各位如果有好的想法,请给以指教。再次感谢。             areyou
      

  3.   

    在窗体的onresize事件中写出让控件伸缩的程序,
    这时你也知道了窗体的height和width
    只要由它来控制其控件的尽寸就可以了呀
      

  4.   

    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 SubPrivate Sub Form_Load()
     Call ResizeInit(Me)  '在程序装入时必须加入
    End SubPrivate Sub Form_Resize()
     Call ResizeForm(Me)  '确保窗体改变时控件随之改变
    End Sub
    本 例 中 给 出 了 二 个 函 数:ResizeInit 和ResizeForm, 在 调 用ResizeForm 之 前 必 须 先 调 用ResizeInit。 你 可 以 将 本 程 序 拷 到 窗 体 代 码 段 里, 然 后 在 窗 体 里 加 入 任 意 控 件 即 可 进 行 测 试。
      

  5.   

     To areyou
    给我发邮件,我发一个控件给你
      

  6.   

    感谢各位,特别是gt的不厌其烦。非常感谢。  areyou