Tự chỉnh kích thước các control

Các thủ thuật liên quan đến việc xử lý ứng dụng, biểu mẫu và control
Đăng trả lời
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4783
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 526 times

Tự chỉnh kích thước các control

Gửi bài by truongphu »

Thủ thuật: Tự chỉnh kích thước các control
Tác giả: Sưu tầm
Mô tả: Rất nhiều bạn trao đổi vấn đề nầy: Tự chỉnh kích thước các control khi form resize. Forum chúng ta cũng đã có bài viết. Tôi thấy bài nầy cũng chi tiết nên gởi lên, tạm chiếm topic riêng, sau nầy sẽ nhập chung
  1. Option Explicit
  2.  
  3. ' Note that this example does not scale controls within
  4. ' other controls. For example, if you place a TextBox
  5. ' inside a PictureBox, the TextBox's position and
  6. ' dimensions are relative to the PictureBox not the
  7. ' form. This example does not handle this case.
  8. '
  9. ' It also does not adjust fonts, stretch pictures, etc.
  10. '
  11. ' For a more complete example, see the Stretchable
  12. ' control in my book "Custom Controls Library".
  13. '
  14. '     http//www.vb-helper.com/ccl.htm
  15.  
  16. Private Type ControlPositionType
  17.     Left As Single
  18.     Top As Single
  19.     Width As Single
  20.     Height As Single
  21.     FontSize As Single
  22. End Type
  23.  
  24. Private m_ControlPositions() As ControlPositionType
  25. Private m_FormWid As Single
  26. Private m_FormHgt As Single
  27. ' Save the form's and controls' dimensions.
  28. Private Sub SaveSizes()
  29. Dim i As Integer
  30. Dim ctl As Control
  31.  
  32.     ' Save the controls' positions and sizes.
  33.    ReDim m_ControlPositions(1 To Controls.Count)
  34.     i = 1
  35.     For Each ctl In Controls
  36.         With m_ControlPositions(i)
  37.             If TypeOf ctl Is Line Then
  38.                 .Left = ctl.X1
  39.                 .Top = ctl.Y1
  40.                 .Width = ctl.X2 - ctl.X1
  41.                 .Height = ctl.Y2 - ctl.Y1
  42.             Else
  43.                 .Left = ctl.Left
  44.                 .Top = ctl.Top
  45.                 .Width = ctl.Width
  46.                 .Height = ctl.Height
  47.                 On Error Resume Next
  48.                 .FontSize = ctl.Font.Size
  49.                 On Error GoTo 0
  50.             End If
  51.         End With
  52.         i = i + 1
  53.     Next ctl
  54.  
  55.     ' Save the form's size.
  56.    m_FormWid = ScaleWidth
  57.     m_FormHgt = ScaleHeight
  58. End Sub
  59.  
  60. Private Sub Form_Load()
  61.     SaveSizes
  62. End Sub
  63. ' Arrange the controls for the new size.
  64. Private Sub ResizeControls()
  65. Dim i As Integer
  66. Dim ctl As Control
  67. Dim x_scale As Single
  68. Dim y_scale As Single
  69.  
  70.     ' Don't bother if we are minimized.
  71.    If WindowState = vbMinimized Then Exit Sub
  72.  
  73.     ' Get the form's current scale factors.
  74.    x_scale = ScaleWidth / m_FormWid
  75.     y_scale = ScaleHeight / m_FormHgt
  76.  
  77.     ' Position the controls.
  78.    i = 1
  79.     For Each ctl In Controls
  80.         With m_ControlPositions(i)
  81.             If TypeOf ctl Is Line Then
  82.                 ctl.X1 = x_scale * .Left
  83.                 ctl.Y1 = y_scale * .Top
  84.                 ctl.X2 = ctl.X1 + x_scale * .Width
  85.                 ctl.Y2 = ctl.Y1 + y_scale * .Height
  86.             Else
  87.                 ctl.Left = x_scale * .Left
  88.                 ctl.Top = y_scale * .Top
  89.                 ctl.Width = x_scale * .Width
  90.                 If Not (TypeOf ctl Is ComboBox) Then
  91.                     ' Cannot change height of ComboBoxes.
  92.                    ctl.Height = y_scale * .Height
  93.                 End If
  94.                 On Error Resume Next
  95.                 ctl.Font.Size = y_scale * .FontSize
  96.                 On Error GoTo 0
  97.             End If
  98.         End With
  99.         i = i + 1
  100.     Next ctl
  101. End Sub
  102.  
  103. Private Sub Form_Resize()
  104.     ResizeControls
  105. End Sub
Tập tin đính kèm
howto_resize_controls_to_fit.zip
(12.33 KiB) Đã tải về 620 lần
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Đăng trả lời

Quay về