Форма накрывает таскбар

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Форма накрывает таскбар

Сообщение keks-n » 21.06.2006 (Ср) 15:00

Есть форма с BorderStyle=0. Если вдруг WindowState становится равно vbMaximized, форма накрывает собой таскбар.

Вопрос: почему так, и как бороться?

Ответа на этот простой вроде бы вопрос я на форуме не нашёл.
Изображение

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 21.06.2006 (Ср) 15:18

Попробуй SetWindowPos
Код: Выделить всё
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)

SetWindowPos Me.hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
Подпись проходит рефакторинг

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 21.06.2006 (Ср) 15:23

Lumen
Не пашет...
Изображение

IIIypuk
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 10.06.2006 (Сб) 12:39

Сообщение IIIypuk » 21.06.2006 (Ср) 16:08

пфф, юзай GetSystemMetrix
Короч, счас напишу вариант, кому то я уже писал это...

IIIypuk
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 10.06.2006 (Сб) 12:39

Сообщение IIIypuk » 21.06.2006 (Ср) 16:10

Во, нашел. Решение через GetSysetMetrics и SetWindowPos:

Код: Выделить всё
Option Explicit
Const SM_CYCAPTION = 4
Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long


Const SWP_SHOWWINDOW = &H40
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long


Private Sub Form_DblClick()
Dim lngCY As Long
Dim lngCX As Long
Dim lngCaption As Long

lngCY = GetSystemMetrics(SM_CYSCREEN)
lngCX = GetSystemMetrics(SM_CXSCREEN)
lngCaption = GetSystemMetrics(SM_CYCAPTION)

Call SetWindowPos(Me.hwnd, 0, 0, 0, lngCX, lngCY - lngCaption, SWP_SHOWWINDOW)

End Sub

onell
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 131
Зарегистрирован: 21.06.2006 (Ср) 16:04
Откуда: 2taev City

Сообщение onell » 21.06.2006 (Ср) 16:18

попробуй поменять BorderStyle формы с FixedSingle на Sizable

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 21.06.2006 (Ср) 16:20

Сделать так, чтобы WindowState не могло стать равным vbMaximized.

"Вдруг" - это когда именно?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.06.2006 (Ср) 16:34

Amed, это значит, как только WindowsState становится равнум 2, форма занимает весь экран...

А зачем с этим бороться если это фича?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 21.06.2006 (Ср) 16:50

У меня окно нестандартного вида, т. е. свой заголовок, кнопки наверху. Но мне нужна свёртка/развёртка, как у нормального окна. Так всё, работает, но при нажатии "Развернуть" в системном меню, происходит WindowState=2, и таскбар исчезает. Поскольку с окошком я работаю без участия сабклассинга, то перехват WM_INITMENU(для активации/установки надписей) и WM_COMMAND (для самостоятельной обработки нажатия на пункт Развернуть/Восстановить) невозможен...
Вот и надо при разворачивании не трогать таскбар.
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 21.06.2006 (Ср) 16:57

keks-n, а где системное меню у окна с BorderStyle=0?

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 21.06.2006 (Ср) 17:03

IIIypuk
Таскбар может быть и сбоку... И толще. Но за идею спасибо, ибо я получив ошибку, при попытке поправить размер VB'шными средствами, забил на изменение размеров. Ну ничего - найду измерялку таскбара и доделаю код.
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.06.2006 (Ср) 17:25

API SystemParametersInfo
Lasciate ogni speranza, voi ch'entrate.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 21.06.2006 (Ср) 17:45

Amed
Нуу... Он у меня не совсем равен 0. Точнее в design-time он ему вообще не равен :) Просто бордеры сносятся при инициализации, посредством исзменения стиля окна. И всё это, для эмуляции нормального поведения форточки.
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 21.06.2006 (Ср) 18:25

Итого получилось:
Вложения
GForm03.rar
(13.33 Кб) Скачиваний: 31
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 60

    TopList