Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2011, 21:35   #1
ru3000
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 163
По умолчанию Размеры UserForm на разных мониторах

Помогите решить вопрос. Самому не одолеть.
Есть UserForm. Задача - чтобы эта форма отображалась корректно на мониторах с разным разрешением. Т.к. эта форма довольно большая, то на маленьких мониторах она вылезает за границы монитора.
Решение было найдено с помощью вычисления параметров монитора и с дальнейшим вычитанием из этих параметров.
Код:
Private Declare PtrSafe Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long
Private Sub UserForm_Initialize()
    UserForm1.Height = GetSystemMetrics(1) - 400
    UserForm1.Width = GetSystemMetrics(0) - 800
End Sub
Но все-равно это не идеальное решение, если на мониторе 16x9 все нормально отображается, то на мониторе 16x10 - уже идет кривизна, не говорю уже про 4x3.
Если у кого-нибудь есть какие-то соображения поделитесь, плиз.

Последний раз редактировалось ru3000; 10.04.2011 в 22:12.
ru3000 вне форума Ответить с цитированием
Старый 10.04.2011, 21:53   #2
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

А если выставлять конкретно размеры формы под каждое разрещение?
Вернее, у Вас даже не под разрешение, а под отношение сторон, я так понял
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 10.04.2011, 22:02   #3
ru3000
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 163
По умолчанию

Да, под отношение сторон. Изначально форма имеет размеры 800x600, отсюда и все проблемы.
ru3000 вне форума Ответить с цитированием
Старый 10.04.2011, 22:08   #4
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Не совсем понятна проблема
такая сложная форма, что нельзя ее просто пропорционально уменьшать или увеличивать?
"кривизна" это как?
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 10.04.2011, 22:11   #5
ru3000
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 163
По умолчанию

Цитата:
Сообщение от VictorM Посмотреть сообщение
нельзя ее просто пропорционально уменьшать или увеличивать?
Это простите как? А как вы предложите, что бы форма 800x600 на вылезала за границы монитора на маленьких ноутбуках?

Последний раз редактировалось ru3000; 10.04.2011 в 22:15.
ru3000 вне форума Ответить с цитированием
Старый 10.04.2011, 22:36   #6
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

Проект отображался на двух типах мониторов, поэтому пошел по простому пути – изменение Zoom формы в зависимости от переменной:

Private Sub UserForm_Activate()
Me.Zoom = IIf(bfrm = False, "130", "78")
vikttur вне форума Ответить с цитированием
Старый 10.04.2011, 22:51   #7
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

А если так
Код:
Private Sub UserForm_Initialize()
    k = (GetSystemMetrics(1) - 100)
    kk = k * 600 / 800
    UserForm1.Height = kk
    UserForm1.Width = k
    
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 10.04.2011, 23:08   #8
ru3000
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 163
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
А если так
Код:
Private Sub UserForm_Initialize()
    k = (GetSystemMetrics(1) - 100)
    kk = k * 600 / 800
    UserForm1.Height = kk
    UserForm1.Width = k
    
End Sub
Спасибо большое, все работает как надо!
ru3000 вне форума Ответить с цитированием
Старый 11.04.2011, 08:36   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Не зависимо от размера монитора и установленного разрешения, вывести форму на весь экран можно так:
Код:
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Sub Main()
    ShowWindow FindWindow(vbNullString, UserForm1.Caption), 3&
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Транспонирование множества данных из разных книгах или из разных листов на 1 лист посредством макроса Тантана Microsoft Office Excel 6 18.12.2014 13:04
Объединение данных из разных Файлов на разных листах одной книги Nikodim113 Microsoft Office Excel 20 12.01.2011 07:12
Питон в мониторах (Помогите с РГЗ) BRIGADIR Помощь студентам 3 05.04.2010 21:37
несколько разных строк из разных файлов сформировать в один Иван123456 Microsoft Office Excel 3 30.07.2009 17:05