4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
1

Позиционирование окна формы

09.10.2017, 13:03. Показов 5634. Ответов 8
Метки нет (Все метки)

подскажите, какой код нужно вписать в vba, чтоб новая форма открывалась по умолчанию не в левом верхнем углу экрана, а посредине?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2017, 13:03
Ответы с готовыми решениями:

Позиционирование дочернего окна относительно элемента главного окна
Всем привет. Подскажите пожалуйста, как можно сделать. У меня есть главное окно, на котором условно...

Позиционирование окна по курсору
Есть задание. Создать окно размером в четверть площади экрана. После двойного щелчка мыши окно...

Позиционирование QToolBar по середине окна
Возможно ли такое? Если да, то как? Для наглядности привожу картинку. Интересует именно третий...

Размер окна и абсолютное позиционирование
Друзья, я только начинаю изучать css и html, будьте снесходительны. Я сверстал на коленке сайт...

8
8115 / 5019 / 550
Регистрация: 27.03.2013
Сообщений: 17,942
09.10.2017, 13:29 2
Цитата Сообщение от blade_snl Посмотреть сообщение
...не в левом верхнем углу экрана, а посредине?...
По идее наоборот ни чего прописывать не надо, оно должно само быть по центру экрана, по крайней мере так в - Access 2000-03.
А вот что бы при открытии или загрузки формы нужно задать смещение в низ и вправо нужно вместо ноликов указать количество твипов.

Visual Basic
1
DoCmd.MoveSize 0, 0
1 см = 165 или даже 265 твипов.
Пробуйте методом научного тыка.
1
Эксперт MS Access
26720 / 14400 / 3190
Регистрация: 28.04.2012
Сообщений: 15,782
09.10.2017, 13:59 3
В режиме формы установить свойство Выравнивание по центру (AutoCenter) не получится. Возможно только в режиме конструктора. Или, как уже рекомендовал PuhKMV, воспользоваться методами MoveSize от Docmd или Move формы. Т.е. надо или программно переключиться в режим конструктора, задать значение свойству и заново открыть форму. Или найти каким-то образом параметры рабочего стола экрана (методов много) и центрировать форму.
Но как бы проще изначально задать свойство в конструкторе...

Цитата Сообщение от PuhKMV Посмотреть сообщение
1 см = 165 или даже 265 твипов.
В 1 см. 567 твипов
1
8115 / 5019 / 550
Регистрация: 27.03.2013
Сообщений: 17,942
09.10.2017, 14:46 4
mobile, я похоже как всегда преуменьшил в 4 раза.
0
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
09.10.2017, 16:42  [ТС] 5
спасибо, через DoCmd.MoveSize 0, 0 все сработало, а через конструктора - у меня там итак параметр Выравнивание по центру стоял "да", не помогало... )
а как, всеже можно вытащить параметры экрана текущего пользователя и заставлять форму центрироваться исходя из текущего разрешения?
0
Эксперт MS Access
26720 / 14400 / 3190
Регистрация: 28.04.2012
Сообщений: 15,782
09.10.2017, 18:15 6
Лучший ответ Сообщение было отмечено alvk как решение

Решение

Параметры экрана вытаскиваются апишными функциями. Но можно и без них, с помощью трюка где по DoCmd.Maximize узнаем размеры рабочего стола и ставим форму посередине. Код на событии открытия формы
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Form_Open(Cancel As Integer)
    Dim w, h
    On Error GoTo errRef
    DoCmd.Echo False
    DoCmd.Maximize
    w = Me.WindowWidth
    h = Me.WindowHeight
    DoCmd.Restore
    Me.Move (w - Me.WindowWidth) / 2, (h - Me.WindowHeight) / 2, Me.WindowWidth, Me.WindowHeight
errRef:
    DoCmd.Echo True
End Sub
2
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
09.10.2017, 19:46  [ТС] 7
mobile, разве подобным кодом оно не левый верхний угол формы в центр экрана ставит? )

Добавлено через 15 минут
ну, насчет центра я ошибся... но смещает окно вправо-вниз... попробовал по-другому записать:
Visual Basic
1
Me.Move (w / 2) - (Me.WindowWidth / 2), (h / 2) - (Me.WindowHeight / 2), Me.WindowWidth, Me.WindowHeight
но ничего не поменялось... (((

Добавлено через 4 минуты
...причем, по вертикали норм центрирует, а по горизонтали с моим кодом приложенным выше уводит вправо, а вот так - на пол-корпуса влево:
Visual Basic
1
Me.Move (w / 2) - Me.WindowWidth, (h / 2) - Me.WindowHeight, Me.WindowWidth, Me.WindowHeight
Добавлено через 9 минут
проблема решилась перезапуском проекта.
итого, центрирует по этой команде как положено:
Visual Basic
1
Me.Move (w / 2) - (Me.WindowWidth / 2), (h / 2) - (Me.WindowHeight / 2), Me.WindowWidth, Me.WindowHeight
0
Эксперт MS Access
26720 / 14400 / 3190
Регистрация: 28.04.2012
Сообщений: 15,782
09.10.2017, 19:53 8
Нет, Ваша формула: (w / 2) - Me.WindowWidth не верна. Она даст смещение. Возможно причина кроется в несоответствии Me.WindowWidth и Me.WindowHeight. Попробуйте вместо них поставить me.InsideWidth и me.InsideHeight
Visual Basic
1
Me.Move (w - Me.InsideWidth) / 2, (h - Me.InsideHeight) / 2, Me.InsideWidth+600, Me.InsideHeight+600
Здесь 600 это поправка на рамку, на поле записи, на скролл. Подбирается вручную

Добавлено через 2 минуты
(w / 2) - (Me.WindowWidth / 2) в точности равно (w - Me.InsideWidth) / 2
1
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
10.10.2017, 11:44  [ТС] 9
благодарю за помощь, все красиво ))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.10.2017, 11:44

Позиционирование окна выбора папок
String sPath = "D:\\Temp"; if (SelectDirectory("Выберите каталог", "", sPath)) // sPath -...

Позиционирование сайта относительно окна браузера
Мне нужно чтобы при открытии сайта блок div с баннером был скрыт вверху и при заходе на сайт не...

Позиционирование размера/положения окна чужого процесса
Всем привет! Постоянно администрирую маленький сервер.. При загрузке сервера на рабочем столе...

ChangerSizeWindows Позиционирование размера / положения окна чужого процесса
Всем привет! Постоянно администрирую маленький сервер.. При загрузке сервера на рабочем столе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.