В форму вписана другая форма, которая, в свою очередь, отображена как таблица. Хочу сделать так, чтобы при изменении размеров внешней формы, за ней следовала и внутренняя. Т.е., наверху внешней различные управляющие кнопки и поля расположить, а чтобы все оставшееся снизу пространство занимала таблица второй формы.
У форм есть свойства Width и Height. Но, когда поставил их в обработчик Resize, то выяснилось, что они содержат постоянные значения первоначального размера формы при загрузке. Пробовал WindowWidth и WnidowHeight. Они действительно отслеживали текущую ширину и высоту, но их нельзя было изменть (записать) для внутренней формы - возникала ошибка попытки записи в свойство только для четния. Хотя в хелпе они описаны как R/W.
Как же поступить?
Может, описать заголовки функций из библиотеки API, и обращаться к ним напрямую? Или есть цивилизованный способ?
Access, как изменить размер формы?
Модератор: Naeel Maqsudov
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
1) Width и WindowWidth используют разные единицы измерения. Пересчитывать не просто - все завязано на разрешающую способность устройства.
3) Окно формы, и совокупность секций живут каждый своей жизнью. Но окно с помошью полос прокрутки позволяет просматривать всю совокупность секций. Если у секции CanGrow=true, то при увеличении размера контрола (например подчиненной формы) увеличится и размер секции. Как работает CanShrink - не проверял. Есть подозрение, что сама собой секция не уменьшится.
4) Итак, для решения задачи надо
а) пересчитывать пиксели в координаты форм и отчетов Access (скорее всего в VBA есть функция для этого)
b) изменять и размер контрола, и размер секции (по крайней мере при уменьшении размера). Причем надо помнить, что порядок действий важен. Так при уменьшении надо сначала уменьшить контролы, а потом секцию, а не наоборот. Так как иначе секция уменьшится на другую (меньшую) величину. (хотя тут надо проверить CanShrink...)
Если будет время попробую сделать пример, но не обещаю. Попробуйте сами.
2) Форма состоит из окна внутри которого лежат секции (заголовок формы, область данных, примечание формы). У каждой секции есть высота (Me.Section(i).Height), а Me.Width - это не шиина формы, а ширина всех секций (так как все секции имеют одинаковую ширину).У форм есть свойства Width и Height. Но, когда поставил их в обработчик Resize, то выяснилось
3) Окно формы, и совокупность секций живут каждый своей жизнью. Но окно с помошью полос прокрутки позволяет просматривать всю совокупность секций. Если у секции CanGrow=true, то при увеличении размера контрола (например подчиненной формы) увеличится и размер секции. Как работает CanShrink - не проверял. Есть подозрение, что сама собой секция не уменьшится.
4) Итак, для решения задачи надо
а) пересчитывать пиксели в координаты форм и отчетов Access (скорее всего в VBA есть функция для этого)
b) изменять и размер контрола, и размер секции (по крайней мере при уменьшении размера). Причем надо помнить, что порядок действий важен. Так при уменьшении надо сначала уменьшить контролы, а потом секцию, а не наоборот. Так как иначе секция уменьшится на другую (меньшую) величину. (хотя тут надо проверить CanShrink...)
Если будет время попробую сделать пример, но не обещаю. Попробуйте сами.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Не надо.(хотя тут надо проверить CanShrink...)
Используется при переоткрытии и перед печатью (см Хелп).
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Скорее всего функции нет. Нашел вот что:(скорее всего в VBA есть функция для этого)
In Visual Basic, use a numeric expression to set the value of this property. Values are expressed in twips (Твип. Единица измерения, равная 1/20 пункта или 1/1440 дюйма. В одном сантиметре содержится 567 твипов.).
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Эврика! На самом деле оказывается все измеряется в твипсах.
Был не прав...
Вот код:
Был не прав...
Вот код:

Код: Выделить всё
Private Sub Form_Resize()
Me.Form1.Width = Me.WindowWidth - 1800
Me.Width = Me.Form1.Left + Me.Form1.Width
Me.Form1.Height = Me.WindowHeight - 1800
Me.Section(acDetail).Height = Me.Form1.Top + Me.Form1.Height + 80
End Sub