-
Всем привет. Помогите решить проблему. Имеется MDI-приложение. MDI формы оформлены так, что нету системных кнопок в меню и заголовке (не спрашивать зачем, так надо). При этом я хочу сохранить возможность сворачивать и разворачивать их. Для этого я отлавливаю двойной щелчок по заголовку MDI-формы через WndProc.
procedure WndProc(var Msg: TMessage); var i: Integer; begin inherited; if (Msg.Msg=WM_NCLBUTTONDBLCLK) and (Msg.WParam=htCaption) then begin case Self.WindowState of wsNormal: ShowWindow(Self.WindowHandle, SW_MINIMIZE); wsMinimized: ShowWindow(Self.WindowHandle, SW_MINIMIZE); end; end; end;
Проблема в том, что форма сворачивается в значок, но в ответ на повторный двойной щелчок по заголовку свёрнутой формы она не разворачивается, а прога намертво виснет. Почему? Я взломал сервер пентагона?
-
> wsMinimized: ShowWindow(Self.WindowHandle, SW_MINIMIZE); Выглядит как минимум странно
-
case Self.WindowState of wsNormal: Self.WindowState:=wsMinimized; wsMinimized: Self.WindowState:=wsNormal; end;
Так менее странно? Можешь предложить что-то другое?
-
При двойном щелчке по заголовку свернутой формы:
- если отладчик в эту процедуру заходит, то протрассировать - если нет, то значит, идет не то сообщение.
-
> - если нет, то значит, идет не то сообщение
Но сворачивается-то форма нормально. Проблема с разворачиванием
-
а с исправленным wsMinimized: Self.WindowState:=wsNormal; тоже виснет?
-
Да, без разницы. Был ещё и другой вариант. Думал, что после внесения изменения окно отсылало сообщение, которое перехватывалось моим и, соответственно, меняло состояние на обратное. Для того, чтобы "развести" эти события пробовал делать так:
var i:integer; begin case Self.WindowState of wsNormal: i:=0; wsMinimized: i:=1; end; case i of 0: Self.WindowState:=wsMinimized; 1: Self.WindowState:=wsNormal; end; end;
Без разницы, любыми способами окно вешается при попытке его развернуть. Но если использовать ShowWindow, но отсылать сообщения из другой программы, то всё ок, и сворачивается, и разворачивается.
-
добавь отладку - пиши OutputDebugString с состоянием переменных, и увидишь где входишь в цикл, и на что неправильно реагируешь.
|