ВОПРОС - как заморозить окно?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Сообщение Юстас » 16.01.2005 (Вс) 20:08

tyomitch писал(а):Кстати, у тебя там баг: если вытащить окно проги из-под показываемого диалога, получается некрасиво ;-)


Это уже также исправлено

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.01.2005 (Вс) 20:14

Юстас писал(а):tyomich, я примерно представляю себе разницу между Def и Window

Видимо нет, раз писал "Хоть SetWindowLong\GWL_WNDPROC, хоть непосредственно в CreateDialogParam указывать адрес процедуры".
И не между Def и Window, а между DialogProc и WindowProc (это их стандартные названия в SDK!)
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 16.01.2005 (Вс) 20:44

2 tyomitch

Спасибо за код, теперь более понятно.

2 Юстас

Похоже у меня появился ещё один разработчик программы Resource Viewer :)

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 16.01.2005 (Вс) 21:01

2 tyomitch

Насчёт кода:

Код: Выделить всё
Public Function ShowDialog(ByVal ResName As String, pb As PictureBox) As Boolean
Dim rc As RECT, rcPic As RECT
hDialog = CreateDialogParam(hModule, ResName, pb.hwnd, 0, 0)
If IsWindow(hDialog) Then
If GetParent(hDialog) = pb.hwnd Then
Call GetWindowRect(hDialog, rc)
Call MoveWindow(hDialog, 0, 0, rc.Right - rc.Left, rc.Bottom - rc.Top, 1)
pb.Move 0, 0, (rc.Right - rc.Left) * Screen.TwipsPerPixelX, (rc.Bottom - rc.Top + 24) * Screen.TwipsPerPixelY
SavePosition 0, 0
Else
Call GetWindowRect(hDialog, rc)
Call GetWindowRect(pb.hwnd, rcPic)
Call MoveWindow(hDialog, rcPic.Left, rcPic.Top, rc.Right - rc.Left, rc.Bottom - rc.Top, 1)
-----------------------------------------------
'Call SetParent(hDialog, pb.hwnd)
-----------------------------------------------
SavePosition rcPic.Left, rcPic.Top
End If
Call ShowWindow(hDialog, SW_NORMAL)
Subclass hDialog
ShowDialog = True
End If
End Function


Мне ведь главное, чтобы диалог не вылезал за пределы PictureBox'а, а тут никак это не выходит.

2 Юстас

tyomitch писал(а):

Кстати, у тебя там баг: если вытащить окно проги из-под показываемого диалога, получается некрасиво


Это уже также исправлено


Можно узнать КАК?

Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Сообщение Юстас » 16.01.2005 (Вс) 21:10

BV
ты на предыдущей странице мой последний код смотрел ? :)

Там измененная ф-ция из модуля + ещё две.
В измененной есть строка SetParent hDialog, FrmMain.PFrame.hwnd - вот этим и решается проблема вытаскивания окна из-под диалога.

На всякий случай: там же и замороженность окна, т.е. диалог теперь невозможно перетащить :) Т.е. весь проблем решён

Успехов!

Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Сообщение Юстас » 16.01.2005 (Вс) 21:14

BV
Пардон, я ошибочно адресовал этот код SergeySV2, а не тебе. Поэтому может ты и не глянул его ....

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 16.01.2005 (Вс) 21:30

2 Юстас

Ошибаешся, я код просмотрел и протестировал, но ничего кроме БОЛЬШОГО падения за десяток попыток я так и не получил.

Может я что-то не так сделал?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.01.2005 (Вс) 21:37

BV писал(а):2 tyomitch

Насчёт кода:
Код: Выделить всё
...


Мне ведь главное, чтобы диалог не вылезал за пределы PictureBox'а, а тут никак это не выходит.

А я тут при чём? Я взял твой код, какой он был, и добавил туда пресловутый сабклассинг. По ходу заметил баг. И всё...
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

The End

Сообщение BV » 16.01.2005 (Вс) 21:51

2 Юстас

Всё, теперь работает! Спасибо за код и уделённое время. :thumright:

2 tyomitch

Проблема решена.

Всем, кто участвовал в этом топике ОГРОМНОЕ СПАСИБО!
На этом вопрос можно считать исчерпаным.

Пред.

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

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

Сейчас этот форум просматривают: PetalBot и гости: 1

    TopList