|
|
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Уважаемые знатоки! Имеется 2 вопроса, был бы очень благодарен если подскажете. Есть проект, много форм. Используется на разных мониторах. Приходится формы пересчитывать (размеры, положение, контролы-размеры, положение и пр.) - иначе не помещаются в 15" и менее. Пересчитыват надо от первоначально заданных параметров джля 17" монитора с разрешением 1280х1024. Размеры форм задаются программно. При этом, если монитор меньший, и размеры формы, задаваемые программно (для вышеуказ. монитора) превышают максимально допустимые размеры для другого монитора, на котором работает приложение, то задаются эти размеры (максимально допустимые для другого монитора). Т.е. размеры форм искажаются изначально при загрузке формы, изначальные параметры уже не узнать из свойств формы. Придется хранить их в таблице, оттуда читать, и пересчитывать размер форм в зависимости от разрешения монитора, или значения API GetClientRect Вопрос 1. Кто-нидь может знает более простой путь решения проблемы перенастройки форм под разные мониторы? Вопрос 2. Подскажите пожалуйста как можно в цикле организовать для каждой формы проекта: открытие затем чтение настроек форм (размеры, положение) затем закрытие. Коллекцию Forms нельзя использовать, т.к. она содержит только открытые формы. Как можно перебрать закрытые формы в цикле, не используя имен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 13:28 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Вопрос 1. Нет простых путей. Один геморойнее другого. Я в основном пишу приложения под 800х600 с модальными формами фиксированного размера. Если у юзера разрешение меньше - говорю, мол, на дворе цифровой век, а не каменный, поменяйте монитор. Вопрос 2. По умолчанию форма открывается с теми размерами, с какими была задизайнена. Вообще, узнать размеры формы при ее отсутствии, по-моему, не представляется возможным =). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 13:41 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Antonariy Вообще, узнать размеры формы при ее отсутствии, по-моему, не представляется возможным =). Уважаемый Антонарий, форма присутствует :), просто ее надо открыть в цикле, т.е. вопрос стоит так по-дргому: Как открыть форму не по имени, а используя к-л другой ид? Чтобы этот ид менять в цикле и по очереди открывать и закрывать формы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 13:49 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
gavУважаемый Антонарий, форма присутствует :), просто ее надо открыть в цикле, т.е. вопрос стоит так по-дргому: Форма в vb является классом. Пока не создана переменная этого класса, он не существует, т.е. нельзя узнать значения его свойств. gavКак открыть форму не по имени, а используя к-л другой ид? Чтобы этот ид менять в цикле и по очереди открывать и закрывать формы? Код: plaintext 1. 2. 3. 4. Типа того.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 14:17 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Если вы все равно делаете пересчет форм - вставьте это код (еcли нет еще) в Form_Resize и допишите Private Sub Form_Load() Me.Left = GetSetting(App.Title, "MyApp\MyForm", "Left", 0) Me.Top = GetSetting(App.Title, "MyApp\MyForm", "Top", 0) Me.Width = GetSetting(App.Title, "MyApp\MyForm", "Width", 9540) Me.Height = GetSetting(App.Title, "MyApp\MyForm", "Height", 6285) ..... end sub Private Sub Form_Unload() ................. If Me.WindowState = vbMinimized Then Exit Sub SaveSetting App.Title, "MyApp\MyForm", "Left", Me.Left SaveSetting App.Title, "MyApp\MyForm", "Top", Me.Top SaveSetting App.Title, "MyApp\MyForm", "Width", Me.Width SaveSetting App.Title, "MyApp\MyForm", "Height", Me.Height end sub Пусть пользователь сам изменит размеры формы, как ему нравится И при след. загрузке он получит то что он сделал в предыдущем сеансе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 14:46 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
2 infant: Твой пример просто запоминает положение формы на экране, это не то, что нужно автору. Кстати, вот расширенный вариант запоминалки. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. frmMain - основная MDI форма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 15:35 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Ребята, спасибо вам за такие хорошие ответы, но вы маленько забыли, что при пересчете размеров формы пересчитываются размеры и положение каждого контрола на ней. В среднем их по 20 шт. на форме, что на каждый контрол такие штуки писать? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 15:49 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
gavРебята, спасибо вам за такие хорошие ответы, но вы маленько забыли, что при пересчете размеров формы пересчитываются размеры и положение каждого контрола на ней. В среднем их по 20 шт. на форме, что на каждый контрол такие штуки писать? :) Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 16:22 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Melkiades в чем-то прав. Может посчитать коэффециенты для разных разрешений и умножать на них размеры и координаты контролов? Например, 1280х1024 это 1, тогда 1024х768 - 0.8, 1600х1200 - 1.25 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 17:00 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Antonariy Melkiades в чем-то прав. Может посчитать коэффециенты для разных разрешений и умножать на них размеры и координаты контролов? Например, 1280х1024 это 1, тогда 1024х768 - 0.8, 1600х1200 - 1.25 Да, я так и делаю, только размеры и положение форм и контролов на них храню в 3-х таблицах. Иначе нельзя: на малом мониторе уже при открытии ее размеры, и прочее корректируются под этот монитор, т.е. искажаются по сравнению с теми, которые заданы при разработке на базовом мониторе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 17:31 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Что-то я не понял. Какие размеры хранятся в базе? Те, с которыми задизайнена форма? Или размеры для каждого разрешения? И каким боком тогда ипользуются коэффициенты? И что значит "корректируются, т.е. искажаются"? И вообще, код искажений в студию! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 17:44 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
авторИначе нельзя: на малом мониторе уже при открытии ее размеры, и прочее корректируются под этот монитор, т.е. искажаются по сравнению с теми, которые заданы при разработке на базовом мониторе а не путает ли автор ScaleWidht/ScaleHeight с собственно Widht/Height? В свое время у меня с этим были большие проблемы. В любом случае, присоединюсь к Antonariy - код искажений в студию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2005, 08:41 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
gavРебята, спасибо вам за такие хорошие ответы, но вы маленько забыли, что при пересчете размеров формы пересчитываются размеры и положение каждого контрола на ней. В среднем их по 20 шт. на форме, что на каждый контрол такие штуки писать? :) Надо посмотреть в сторону ComponentOne. А точнее, SizerOne 8.0 из пакета ComponentOne Studio. По-моему это - лучший сайзер для VB6 (с учетом особенностей среды). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 08:57 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Worobjoff Надо посмотреть в сторону ComponentOne. А точнее, SizerOne 8.0 из пакета ComponentOne Studio. По-моему это - лучший сайзер для VB6 (с учетом особенностей среды). Далеко не всегда имеется возможность воспользоваться продуктами сторонних разработчиков. К тому же, имхо, подобные вещи надо делать исключительно ручками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 09:27 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
А разрешение экрана никто не считывает? Можно ввести какие нибудь коэффициенты привязанные к разрешению и в Form_Resizе каждый контролл масшатабировать... Фиксированные размеры форм - это жесто. У нас такое не допускается. Хотя и разрешение у всех стандартное - 1024*768. P.S. В дестве я вообще разрешение под себя переключал, а потом восстанавливал :-))). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 10:50 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
я так иногда делаю Public Const LikeScrWidth As Long = 15360 'ширина экрана Public Const LikeScrHeight As Long = 11520 'высота экрана Public Const Form1_Height As Long = 11070 Public Const Form1_Width As Long = 15360 Private Sub Form_Load() Dim ssLogin As String, ssPass As String ScrWid = Screen.Width ScrHei = Screen.Height If LikeScrWidth > ScrWid Or LikeScrHeight > ScrHei Then 'экран меньше чем 1024х768 MsgBox ("Размер экрана: " & ScrWid \ 15 & "x" & ScrHei \ 15 & " недостаточен для работы программы") End 'завершаем работу программы End If 'экран больше или равен 1024х768 If LikeScrWidth < ScrWid And LikeScrHeight < ScrHei Then With Form1 .Left = (ScrWid - LikeScrWidth) \ 2 'от левого края .Top = (ScrHei - Form1_Height) \ 2 'от верхнеро края End With Else 'экран 1024х768 With Form1 .Top = LNoll .Left = LNoll End With End If С уважением Александр Плотников. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2006, 13:15 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
AntonariyНет простых путей. Один геморойнее другого. Я в основном пишу приложения под 800х600 с модальными формами фиксированного размера. Если у юзера разрешение меньше - говорю, мол, на дворе цифровой век, а не каменный, поменяйте монитор. +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2006, 13:32 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Народ, а как настроить "контролы" на форме для любого разрешения монитора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 10:44 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Перечитать тему с начала. Можно несколько раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 10:52 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Видимо для каждого элемента формы придется писать код? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 13:07 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
И еще пару раз, пожалуй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 13:13 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Да с формой то все ясно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 13:53 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
For Each obj In Me.Controls вам о чем-нибудь говорит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 14:15 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Do MsgBox "Для 1 - Перечитать тему с начала. Можно несколько раз." Loop :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 14:15 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=33224363&tid=2164892]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
184ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 254ms |
| total: | 537ms |

| 0 / 0 |
