Динамеческое изменение размеров элементов управления
Я хочу поделиться очень полезными функциями CM_ResizeCtl() и CM_ResizeWidth(), которые подгоняют элемент управления при изменении размеров форм. В основном я использую их для подчиненных форм в табличном виде.
Что нужно сделать:
- Создать новую форму.
- Убрать область выделения, полосы прокрутки, область выбора записей.
- Разместить в области данных элемент управления в левом верхнем углу. Назовем его
f_spis_. Элементом управления может быть любой тип. Я чаще использую для подобных случаев подчиненную форму в табличном виде. Элемент управления можно размещать и в заголовке или примечании формы, но в этом случае элемент управления будет меняться только по ширине. - Создать событие формы «Изменение размера» следующего вида:
Private Sub Form_Resize()
Call mc_Form.VC_ResizeCtl(Me.f_spis_)
End Sub
Код функций:
Public Sub VC_ResizeCtl(ByRef ctl As Control)
' Скоков С.А. 2006-12-16
' Изменяет размер элемента управления под оконные размеры формы.
' функция должна вызываться на событие Form_Resize()
' Элемент управления должен находится в области данных.
' Предполагается что он один и должен занимать всю облатсь данных.
' 0.6 * c_lTvipInSm и 1 * c_lTvipInSm константы, определенные опытным путем,
' чтобы элемент управления не прилипал к правой и ниженй части формы
On Error GoTo Err_
Dim frm As Form
Dim lCtlWidth As Long, lCtlHeight As Long
Dim lDetailHeight As Long
Set frm = ctl.Parent
'-- изменение размеров "поверхности" формы
frm.Width = frm.WindowWidth
lDetailHeight = frm.WindowHeight - frm.Section(acHeader).Height - frm.Section(acFooter).Height
'-- если форму свернуть, то произойдет ошибка
If lDetailHeight < 0 Then
Exit Sub
End If
frm.Section(acDetail).Height = lDetailHeight
'-- изменение размеров элемента управления
lCtlWidth = frm.WindowWidth - ctl.Left * 2 - 0.4 * c_lTvipInSm
lCtlHeight = frm.WindowHeight - ctl.Top * 2 - 1 * c_lTvipInSm _
- frm.Section(acHeader).Height - frm.Section(acFooter).Height
If lCtlWidth > c_lTvipInSm Then ctl.Width = lCtlWidth
If lCtlHeight > c_lTvipInSm Then ctl.Height = lCtlHeight
Exit_:
Exit Sub
Err_:
MsgBox Err.Description
Resume Exit_
Resume
End Sub
Public Sub CM_ResizeWidth(ByRef frm As Form, ByRef ctl As Control)
' Скоков С.А. 2008-03-12
' Изменяет размер элемента управления под оконные размеры формы по ШИРИНЕ.
' функция должна вызываться на событие Form_Resize()
' Элемент управления должен находится в области данных.
' Предполагается что он один и должен занимать всю облатсь данных.
' 0.6 * c_lTvipInSm и 1 * c_lTvipInSm константы, определенные опытным путем,
' чтобы элемент управления не прилипал к правой и ниженй части формы
On Error GoTo Err_
Const c_lTvipInSm As Long = 567
Dim lCtlWidth As Long, lCtlHeight As Long
'-- изменение размеров элемента управления
lCtlWidth = frm.WindowWidth - ctl.Left - 0.6 * c_lTvipInSm
If lCtlWidth > c_lTvipInSm Then ctl.Width = lCtlWidth
Exit_:
Exit Sub
Err_:
MsgBox Err.Description
Resume Exit_
End Sub
До встречи!
(с) Скоков Сергей
Подписаться на: RSS или e-mail рассылку или добавить в ЖЖ друзья.