powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / адаптация форм к разным мониторам
25 сообщений из 34, страница 1 из 2
адаптация форм к разным мониторам
    #33220465
gav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые знатоки! Имеется 2 вопроса, был бы очень благодарен если подскажете.

Есть проект, много форм. Используется на разных мониторах. Приходится формы пересчитывать (размеры, положение, контролы-размеры, положение и пр.) - иначе не помещаются в 15" и менее.

Пересчитыват надо от первоначально заданных параметров джля 17" монитора с разрешением 1280х1024. Размеры форм задаются программно.

При этом, если монитор меньший, и размеры формы, задаваемые программно (для вышеуказ. монитора) превышают максимально допустимые размеры для другого монитора, на котором работает приложение, то задаются эти размеры (максимально допустимые для другого монитора). Т.е. размеры форм искажаются изначально при загрузке формы, изначальные параметры уже не узнать из свойств формы. Придется хранить их в таблице, оттуда читать, и пересчитывать размер форм в зависимости от разрешения монитора, или значения API GetClientRect

Вопрос 1. Кто-нидь может знает более простой путь решения проблемы перенастройки форм под разные мониторы?

Вопрос 2.
Подскажите пожалуйста как можно в цикле организовать для каждой формы проекта: открытие затем чтение настроек форм (размеры, положение) затем закрытие.
Коллекцию Forms нельзя использовать, т.к. она содержит только открытые формы.
Как можно перебрать закрытые формы в цикле, не используя имен?
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #33220518
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос 1. Нет простых путей. Один геморойнее другого. Я в основном пишу приложения под 800х600 с модальными формами фиксированного размера. Если у юзера разрешение меньше - говорю, мол, на дворе цифровой век, а не каменный, поменяйте монитор.

Вопрос 2. По умолчанию форма открывается с теми размерами, с какими была задизайнена. Вообще, узнать размеры формы при ее отсутствии, по-моему, не представляется возможным =).
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #33220547
gav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy Вообще, узнать размеры формы при ее отсутствии, по-моему, не представляется возможным =).

Уважаемый Антонарий, форма присутствует :), просто ее надо открыть в цикле, т.е. вопрос стоит так по-дргому:

Как открыть форму не по имени, а используя к-л другой ид? Чтобы этот ид менять в цикле и по очереди открывать и закрывать формы?
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #33220650
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gavУважаемый Антонарий, форма присутствует :), просто ее надо открыть в цикле, т.е. вопрос стоит так по-дргому:
Форма в vb является классом. Пока не создана переменная этого класса, он не существует, т.е. нельзя узнать значения его свойств.
gavКак открыть форму не по имени, а используя к-л другой ид? Чтобы этот ид менять в цикле и по очереди открывать и закрывать формы?
Код: plaintext
1.
2.
3.
4.
Dim frm( 1  to  5 ) as Form
Set frm( 1 ) = New Form1
Set frm( 2 ) = New Form2
...
Короче, набить массив ручками, а в цикле делать Load/Unload frm(x)
Типа того....
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #33220775
infant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если вы все равно делаете пересчет форм - вставьте это код (е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

Пусть пользователь сам изменит размеры формы, как ему нравится
И при след. загрузке он получит то что он сделал в предыдущем сеансе
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #33220923
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
Public Sub LoadFormPosition(frm As Form)
Dim w As Long, h As Long
    If GetSetting(App.Title, frm.Name, "WindowState") <> "" Then
        frm.WindowState = Val(GetSetting(App.Title, frm.Name, "WindowState"))
        If frm.WindowState =  0  Then
            frm.Left = Val(GetSetting(App.Title, frm.Name, "Left"))
            frm.Top = Val(GetSetting(App.Title, frm.Name, "Top"))
            w = Val(GetSetting(App.Title, frm.Name, "Width"))
            h = Val(GetSetting(App.Title, frm.Name, "Height"))
            If w <>  0  Then frm.Width = w
            If h <>  0  Then frm.Height = h
            If frm.Name <> "frmMain" And frm.Height =  0  Then frm.WindowState =  2 
        End If
    Else
        frm.WindowState =  2 
    End If
End Sub

Public Sub SaveFormPosition(frm As Form)
    SaveSetting App.Title, frm.Name, "WindowState", frm.WindowState
    If frm.WindowState =  0  Then
        SaveSetting App.Title, frm.Name, "Left", frm.Left
        SaveSetting App.Title, frm.Name, "Top", frm.Top
        SaveSetting App.Title, frm.Name, "Width", frm.Width
        SaveSetting App.Title, frm.Name, "Height", frm.Height
    End If
End Sub

frmMain - основная MDI форма.
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #33220998
gav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, спасибо вам за такие хорошие ответы, но вы маленько забыли, что при пересчете размеров формы пересчитываются размеры и положение каждого контрола на ней. В среднем их по 20 шт. на форме, что на каждый контрол такие штуки писать? :)
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #33221129
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gavРебята, спасибо вам за такие хорошие ответы, но вы маленько забыли, что при пересчете размеров формы пересчитываются размеры и положение каждого контрола на ней. В среднем их по 20 шт. на форме, что на каждый контрол такие штуки писать? :)
Код: plaintext
1.
2.
3.
4.
Dim obj As VB.Control
For Each obj In Me.Controls
    ...
Next
C проверкой, не является ли контрол таймером или пунктом меню, например.
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #33221337
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkiades в чем-то прав. Может посчитать коэффециенты для разных разрешений и умножать на них размеры и координаты контролов? Например, 1280х1024 это 1, тогда 1024х768 - 0.8, 1600х1200 - 1.25
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #33221488
gav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy
Melkiades в чем-то прав. Может посчитать коэффециенты для разных разрешений и умножать на них размеры и координаты контролов? Например, 1280х1024 это 1, тогда 1024х768 - 0.8, 1600х1200 - 1.25


Да, я так и делаю, только размеры и положение форм и контролов на них храню в 3-х таблицах.
Иначе нельзя: на малом мониторе уже при открытии ее размеры, и прочее корректируются под этот монитор, т.е. искажаются по сравнению с теми, которые заданы при разработке на базовом мониторе.
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #33221553
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я не понял. Какие размеры хранятся в базе? Те, с которыми задизайнена форма? Или размеры для каждого разрешения? И каким боком тогда ипользуются коэффициенты? И что значит "корректируются, т.е. искажаются"? И вообще, код искажений в студию!
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #33222121
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИначе нельзя: на малом мониторе уже при открытии ее размеры, и прочее корректируются под этот монитор, т.е. искажаются по сравнению с теми, которые заданы при разработке на базовом мониторе
а не путает ли автор ScaleWidht/ScaleHeight с собственно Widht/Height? В свое время у меня с этим были большие проблемы.
В любом случае, присоединюсь к Antonariy - код искажений в студию.
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #33224363
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gavРебята, спасибо вам за такие хорошие ответы, но вы маленько забыли, что при пересчете размеров формы пересчитываются размеры и положение каждого контрола на ней. В среднем их по 20 шт. на форме, что на каждый контрол такие штуки писать? :)
Надо посмотреть в сторону ComponentOne. А точнее, SizerOne 8.0 из пакета ComponentOne Studio. По-моему это - лучший сайзер для VB6 (с учетом особенностей среды).
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #33224406
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Worobjoff
Надо посмотреть в сторону ComponentOne. А точнее, SizerOne 8.0 из пакета ComponentOne Studio. По-моему это - лучший сайзер для VB6 (с учетом особенностей среды).
Далеко не всегда имеется возможность воспользоваться продуктами сторонних разработчиков. К тому же, имхо, подобные вещи надо делать исключительно ручками.
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #33224626
Дурак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А разрешение экрана никто не считывает?

Можно ввести какие нибудь коэффициенты привязанные к разрешению и в Form_Resizе каждый контролл масшатабировать...

Фиксированные размеры форм - это жесто. У нас такое не допускается.

Хотя и разрешение у всех стандартное - 1024*768.

P.S. В дестве я вообще разрешение под себя переключал, а потом восстанавливал :-))).
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #33706770
panu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я так иногда делаю
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

С уважением
Александр Плотников.
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #33706828
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyНет простых путей. Один геморойнее другого. Я в основном пишу приложения под 800х600 с модальными формами фиксированного размера. Если у юзера разрешение меньше - говорю, мол, на дворе цифровой век, а не каменный, поменяйте монитор. +1
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #34145864
1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, а как настроить "контролы" на форме для любого разрешения монитора?
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #34145908
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перечитать тему с начала. Можно несколько раз.
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #34146524
1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо для каждого элемента формы придется писать код?
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #34146554
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще пару раз, пожалуй.
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #34146713
1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да с формой то все ясно...
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #34146818
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For Each obj In Me.Controls вам о чем-нибудь говорит?
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #34146820
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Do
MsgBox "Для 1 - Перечитать тему с начала. Можно несколько раз."
Loop
:)
...
Рейтинг: 0 / 0
адаптация форм к разным мониторам
    #34147241
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо, ресайз контролов на форме под конкретное разрешение экрана - это порочная практика.
лучше делайте скроллируемый вьюпорт.
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / адаптация форм к разным мониторам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]