|
|
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#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 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
имхо, ресайз контролов на форме под конкретное разрешение экрана - это порочная практика. лучше делайте скроллируемый вьюпорт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 15:36 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Ну вообщето резайз контролов крутовато, много возни и забываешь про основную задачу. Ну исходи из мин 800*600 или из 1024*768 все таки ты же можешь соорентироваться на основной размер мониторов. Потом можно использовать скролл, это в принципе не так сложно. Нужно только на форму поместить контейнер (picturebox или frame), а все контролы ставить в этот контейнер. А уже затем вычислять размеры и положение контейнера. Ведь у него координаты могут быть и с минусом. Только полосы если берешь стандартные, то у них min и max не могут быть отрицательными, соответсвенно надо перевычислять. Можно взять Microsoft Forms 2.0 Object Library там у полос может быть отрицательное значение. Файл FM20.DLL, устанавливается с офисом типа 2000 и далее, только не забудь потом в Setup его добавить. Кстати там и ListBox и ComboBox, такие как надо, с колонками, но нет сортировки и заполнение только программным путем. Типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Главное правильно вычислять все эти положения контейнера, надо тренироваться на пустой форме, но зато потом код абсолютно одинаков на все формы и без проблем используешь. Да, если используются контролы которые получают фокус, необходимо прокручивать, чтоб контрол оказалася в видимой области, а то грустно будет. Я так реализовал печать с просмотром, класно получилось без всяких DataEnvironment и масштаб и таскание мышкой и тд и тп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 04:03 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
MelkiadesFor Each obj In Me.Controls вам о чем-нибудь говорит? Ну ка, ну ка, поподробнее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 08:49 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Konst_Oneимхо, ресайз контролов на форме под конкретное разрешение экрана - это порочная практика. Я не виноват - начальство требует... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 08:50 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
blinowНу исходи из мин 800*600 или из 1024*768 все таки ты же можешь соорентироваться на основной размер мониторов. Потом можно использовать скролл, это в принципе не так сложно. Нужно, короче, привязать все контролы к краям формы - что бы они при любом разрешении сдвигались относительно ее краев... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 08:55 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Это по скролу. Для того, чтобы не привязывать каждый контрол к краям формы, для этого все контролы нужно поместить в контейнер который может содержать контролы, в частности, это PictureBox или Frame. В контейнере все координаты контролов будут относительно края контейнера, а ты в свою очередь двигай только контейнер. И положение контейнера вычисляй от размеров формы PictureBox.Width и Height, такая какая тебе надо. Размер формы делай подходящий для разрешения, Наличие или отсутствие полос вычисляй исходя из размеров контейнера и формы, только у формы не забудь Width это Me.ScaleWidth, то же Height. Короче потренеруйся, помести PictureBox на форму, при запуске уменьши размер формы и вычисляй, влазит, не влазит и вычисляй значения Min и Max Scroll ов, не забудь и про ширину самих скролов. У стандартных скролов значения Min не может быть отрицательным, соответственно нужно довычислять. На первый взгляд геморно, но если задаться целью, то не так и сложно и потом код то подходит на любую форму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2006, 04:11 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
For Each obj In Me.Controls Это конечно хорошо. Но надо анализировать каждый контрол и перевычислять его размер и положение, этого мало а шрифты. По умолчанию идет там SanSerif типа, он не труетапе, соответственно его размеры имеют определенный набор, значит надо еще и подгонять контрол под имеющийся размер шрифта. Если использовать труетапе, то надо сперва выяснить какие шрифты есть на компе, скажете Arial, а что у Вас в Worde никогда не появлялись кракозябры, и это всего лишь от того, что в доке используется Arial, а на компе только Arial Cyr. Конечно это классная вещь для сдирания денег или умничинья, рассказал сказки про страшную неполадку, день промурыжил, а потом выдал на гора. А так сам видишь сколько гемора, и даже используя труетапе, надо прикидывать нормально входит шрифт или всеже немного увеличить контрол. Ни одно произведение мелкософта, так не делает, это очень мудрено и жрет процессор и ... Да и использование труетапе все таки дополнительные вычисления (не твои) но проц то пашет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2006, 04:24 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
panuя так иногда делаю Public Const LikeScrWidth As Long = 15360 'ширина экрана..... . . . С уважением Александр Плотников. Спасибо. Очень помог этот код, только пришлось писать для каждого элемента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2006, 11:54 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
gavРебята, спасибо вам за такие хорошие ответы, но вы маленько забыли, что при пересчете размеров формы пересчитываются размеры и положение каждого контрола на ней. В среднем их по 20 шт. на форме, что на каждый контрол такие штуки писать? :) В Form_Resize. Но это не самое интересное - самое интересное это когда юзер меняет масштаб в настройке монитора... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2006, 13:59 |
|
||
|
адаптация форм к разным мониторам
|
|||
|---|---|---|---|
|
#18+
Дурак Можно ввести какие нибудь коэффициенты привязанные к разрешению и в Form_Resizе каждый контролл масшатабировать... Фиксированные размеры форм - это жесто. У нас такое не допускается. Нафига масштабировать диалоговые окна, к примеру? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2006, 14:02 |
|
||
|
|

start [/forum/topic.php?all=1&fid=60&tid=2164892]: |
0ms |
get settings: |
12ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
173ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
93ms |
get tp. blocked users: |
2ms |
| others: | 209ms |
| total: | 532ms |

| 0 / 0 |
