Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634

Разместить форму в правом нижнем углу

18.01.2016, 13:50. Показов 1972. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Собственно задача тривиальная...
Visual Basic
1
2
Me.Left = Screen.Width - Me.Width
Me.Top = Screen.Height - Me.Height - {ВЫСОТА ПАНЕЛИ ЗАДАЧ}
Но не могу догнать как определить высоту панели задач
Заранее спасибо всем!

Может кому сгодится
Чуток подправил + код + EXE + скрины + Фирменный ТРИовский & Драковский манифест)))

Visual Basic
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
 
Private Type APPBARDATA
    cbSize As Long
    hwnd As Long
    uCallbackMessage As Long
    uEdge As Long
    rc As RECT
    lParam As Long
End Type
Const ABS_AUTOHIDE = &H1
Const ABS_ONTOP = &H2
Const ABM_GETSTATE = &H4
Const ABM_GETTASKBARPOS = &H5
 
Private Sub cmbExit2_Click()
    Unload frmLog
End Sub
 
Private Sub Form_Load()
    Dim ABD As APPBARDATA, Ret As Long
    Dim hPanel As Integer
    Dim gPanel As Integer
    
    SHAppBarMessage ABM_GETTASKBARPOS, ABD
    Ret = SHAppBarMessage(ABM_GETSTATE, ABD)
    If Trim(Str(ABD.rc.Top)) > 0 Then hPanel = (Trim(Str(ABD.rc.Bottom)) - Trim(Str(ABD.rc.Top))) * 15
    If Trim(Str(ABD.rc.Left)) > 0 Then gPanel = (Trim(Str(ABD.rc.Right)) - Trim(Str(ABD.rc.Left))) * 15
    
    Me.Left = Screen.Width - Me.Width - gPanel
    Me.Top = Screen.Height - Me.Height - hPanel
End Sub
 
Private Sub tmr_Timer()
    frmLog.txtLog = frmLog.txtLog & vbCrLf & "Text Log"
End Sub
 
Private Sub txtLog_Change()
    txtLog.SelStart = Len(txtLog)
End Sub
Миниатюры
Разместить форму в правом нижнем углу   Разместить форму в правом нижнем углу   Разместить форму в правом нижнем углу  

Разместить форму в правом нижнем углу  
Вложения
Тип файла: rar prjTaskBar.rar (7.5 Кб, 13 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.01.2016, 13:50
Ответы с готовыми решениями:

Как зделать чтобы было видно иконка работающей программы в правом нижнем углу
За рании блогадарю. Извинаюсь за плохой русскйи.

Как разместить окно в нижнем правом углу?
Стандартное решение работает некорректно (скрин приложил), надо чтобы окно находилось в углу впритык, подскажите в чем может быть проблема?...

Открыть форму в правом нижнем углу
Доброго времени суток. Ни как не могу найти решения для одной задачи Необходимо что бы форма появлялась в правом нижнем углу Access (...

11
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
18.01.2016, 13:53
Visual Basic
1
2
3
4
    Dim rc  As RECT
    
    SystemParametersInfo SPI_GETWORKAREA, 0, rc, 0
    SetWindowPos Me.hWnd, 0, rc.iRight - Me.ScaleWidth, rc.iBottom - Me.ScaleHeight, 0, 0, SWP_NOSIZE Or SWP_NOOWNERZORDER
Панель задач может быть и сбоку и сверху. Эта формула для формы без бордюра.
2
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
18.01.2016, 14:00  [ТС]
Приветствую уважаемый Анатолий!
Я давно не программировал..
Можно полный листинг объявления деклараций и типов?
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
18.01.2016, 14:01
Тут смотри.
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
18.01.2016, 14:31
Да уж.. системные метрики бывает не так просто получить
когдато этого даже в книжках небыло написанно )

The Trick не сказал вам об еще одном сюрпризе ?

Добавлено через 11 минут
kreotodr, проще всего это так: вы просто сминусуйте ScaleWidth и ScaleHeight

а разницу припишите, тоесть разницу между любой формой и её реальным квадратом
ширина панели формы в метриках и ширина нижней панели в Windos .. почти всегда одинаковая
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
18.01.2016, 14:34  [ТС]
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Чуток не дождался ответа..
Не знаю все ли корректно, но вроде как корректно при любом расположении панели задач...
Проверял и с аеро и без него...

Visual Basic
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
 
Private Type APPBARDATA
    cbSize As Long
    hwnd As Long
    uCallbackMessage As Long
    uEdge As Long
    rc As RECT
    lParam As Long
End Type
 
Const ABS_AUTOHIDE = &H1
Const ABS_ONTOP = &H2
Const ABM_GETSTATE = &H4
Const ABM_GETTASKBARPOS = &H5
 
 
Private Sub Form_Load()
       
    Dim ABD As APPBARDATA, Ret As Long
    Dim hPanel As Integer
    Dim gPanel As Integer
    
    SHAppBarMessage ABM_GETTASKBARPOS, ABD
    Ret = SHAppBarMessage(ABM_GETSTATE, ABD)
    
    If Trim(str(ABD.rc.Top)) > 0 Then hPanel = (Trim(str(ABD.rc.Bottom)) - Trim(str(ABD.rc.Top))) * 15
    If Trim(str(ABD.rc.Left)) > 0 Then gPanel = (Trim(str(ABD.rc.Right)) - Trim(str(ABD.rc.Left))) * 15
    
    
    Me.Left = Screen.Width - Me.Width - gPanel
    Me.Top = Screen.Height - Me.Height - hPanel
 
End Sub
Добавлено через 1 минуту
Цитата Сообщение от fever brain Посмотреть сообщение
kreotodr, проще всего это так: вы просто сминусуйте ScaleWidth и ScaleHeight
а разницу припишите, тоесть разницу между любой формой и её реальным квадратом
Спасибо но уже сделал...
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
18.01.2016, 14:48
Цитата Сообщение от kreotodr Посмотреть сообщение
Спасибо но уже сделал...
Вы не правильно сделали

Напимер, вот как можно отобразить форму строго посередине
.Left = (Screen.Width - (.Left + .Width)) / 2
.Top = (Screen.Height - (.Top + .Height)) / 2

Мне пофиг, делайте как хотите, вообщето панель можно не учитывать
если даже она будет прятаться, и если всё правильно делать (без извращений)

то рабочий стол должнг будет поправить и все нижние окна, а если будете умничать, то у вас это вызовет глюки
а потом будете говорить чтл бэйсик во всйм виноват ..
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
18.01.2016, 14:53
Цитата Сообщение от fever brain Посмотреть сообщение
Вы не правильно сделали
Напимер, вот как можно отобразить форму строго посередине
.Left = (Screen.Width - (.Left + .Width)) / 2
.Top = (Screen.Height - (.Top + .Height)) / 2
Это ты неправильно сделал. Screen возвращает размеры всего экрана, а не рабочей области.
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
18.01.2016, 14:55
Цитата Сообщение от kreotodr Посмотреть сообщение
Спасибо но уже сделал...
Вы не правильно сделали

Напимер, вот как можно отобразить форму строго посередине
.Left = (Screen.Width - (.Left + .Width)) / 2
.Top = (Screen.Height - (.Top + .Height)) / 2

Мне пофиг, делайте как хотите, вообщето панель можно не учитывать
если даже она будет прятаться, и если всё правильно делать (без извращений)

то рабочий стол должен будет поправить и все нижние окна, а если будете умничать, то у вас это вызовет глюки
а потом будете говорить что бэйсик во всём виноват ..











Хотел исправить офографию, да не успел ..
1
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
18.01.2016, 16:05  [ТС]
Коллеги всем спасибо!
Успокойтесь, мой пример работает правильно. Протестировал в 4х положениях на трех ОСЯХ. Что еще нужно?
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
19.01.2016, 11:39
Ты должен вызывать InitCommonControls, а то на ХР не работает. Для ленивых так:
Visual Basic
1
InitCommonControlsEx 3435973.8623@
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
20.01.2016, 05:34
--------------
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.01.2016, 05:34
Помогаю со студенческими работами здесь

Как расположить форму в правом нижнем углу?
Как расположить форму в правом нижнем углу, выше панели задач? Пробовал так procedure show_form_in_position(); var ...

Открыть форму в правом нижнем углу экрана
Привет всем.У меня такая ситуация,мне надо чтоБы при открытии программы она открылась справа внизу независимо от разпрешения монитора,кто...

Как показать форму в правом нижнем углу экрана?
Как показать форму в правом нижнем углу экрана?

Показать небольшую форму в правом нижнем углу экрана с учетом высоты панели задач
Приветствую всех! Друзья, помогите с советом. Пишу программу одну. Суть в том, что эта софтина должна выдавать оповещения. Стандартный...

Как разместить форму в верхнем правом углу экрана?
как разместить форму в верхнем правом углу экрана????


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru