![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
свернуть и восстановить
Змей © (2005-12-11 18:22:00)Привет Мастера!
есть функции свернуть и восстановить! кнопок в правом верхнем углу окна!
ведь это не hide & show
как этими функциями управлять? и как они называются?
Спасибо
sniknik (2005-12-11 22:52:00) [1]> Изврата не вижу.
хм... я тоже. но тогда до этого не додумался, все пытался непосредственно событие перехватить, потому изврат и был...
begin...end (2005-12-11 21:36:00) [2]> sniknik © (11.12.05 21:24) [6]
> NCHITTEST судя по хелпу тоже самое (надо извертываться)
procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
if (Message.CmdType and $FFF0) = SC_MINIMIZE then
if SendMessage(Handle, WM_NCHITTEST, 0, TMessage(Message).LParam) = HTMINBUTTON then
ShowMessage('Окно свёрнуто кнопкой')
else
ShowMessage('Окно свёрнуто не кнопкой');
inherited
end
Изврата не вижу.
sniknik (2005-12-11 21:24:00) [3]> Выделить именно нажатие кнопок можно с помощью WM_NCHITTEST.
выделял по WM_NCLBUTTONUP\WM_NCLBUTTONDOWN но както убого получалось надо было "извертываться" даже не ложил в качетве ответа. NCHITTEST судя по хелпу тоже самое (надо извертываться) и по значениям wParam то же самое что в них и в WM_NCMOUSEMOVE; (смотрел ->)
procedure WMNCMOUSEMOVE(var Message: TMessage); message WM_NCMOUSEMOVE;
procedure TForm1.WMNCMOUSEMOVE(var Message: TMessage);
var s : string;
begin
case Message.wParam of
HTERROR : s:= 'HTERROR';
HTTRANSPARENT : s:= 'HTTRANSPARENT';
Windows.HTNOWHERE: s:= 'HTNOWHERE';
HTCLIENT : s:= 'HTCLIENT';
HTCAPTION : s:= 'HTCAPTION';
HTSYSMENU : s:= 'HTSYSMENU';
HTSIZE : s:= 'HTSIZE';
HTMENU : s:= 'HTMENU';
HTHSCROLL : s:= 'HTHSCROLL';
HTVSCROLL : s:= 'HTVSCROLL';
HTMINBUTTON : s:= 'HTMINBUTTON';
HTMAXBUTTON : s:= 'HTMAXBUTTON';
HTLEFT : s:= 'HTLEFT';
HTRIGHT : s:= 'HTRIGHT';
HTTOP : s := 'HTTOP';
HTTOPLEFT : s:= 'HTTOPLEFT';
HTTOPRIGHT : s:= 'HTTOPRIGHT';
HTBOTTOM : s:= 'HTBOTTOM';
HTBOTTOMLEFT : s:= 'HTBOTTOMLEFT';
HTBOTTOMRIGHT : s:= 'HTBOTTOMRIGHT';
HTBORDER : s:= 'HTBORDER';
HTOBJECT : s:= 'HTOBJECT';
HTCLOSE : s:= 'HTCLOSE';
HTHELP : s:= 'HTHELP';
else
s:= '';
end;
Form1.Caption:= s;
Message.Result:= 0;
end;
предложенное тогда событие, в том то и дело, было гораздо проще (один "перехват" без вычислений где была мыша, кнопку нажали/отпустили, ...)
сам не пробовал тогда но автор показал как получилось.
надо бы в дайджесты ради интереса залезть... но лень. ;)
> определить по младшим четырём битам параметра wParam у WM_SYSCOMMAND.
а вот этого не получалось у нас тогда (это была именно моя идея по "разделению". но насколько помню "не шло")
begin...end (2005-12-11 19:47:00) [4]> sniknik © (11.12.05 19:28) [4]
Выделить именно нажатие кнопок можно с помощью WM_NCHITTEST. Более того -- могу ошибаться, но кое-что можно определить по младшим четырём битам параметра wParam у WM_SYSCOMMAND.
sniknik (2005-12-11 19:28:00) [5]begin...end © (11.12.05 18:57) [3]
> WM_SYSCOMMAND
не совсем нажатие кнопок, а всетаки уже команды. в основной както пытались разделить закрытие программы произошло от нажатия кнопки либо от другого события (команды в программе), так Шевченко приводил событие именно от кнопок окна вроде WM_CBLBUTTONCLICKED но не уверен точно (не мне нужно было, забыл ;)
стоит поискать если нужны именно нажатия кнопок.
begin...end (2005-12-11 18:57:00) [6]> Змей © (11.12.05 18:22)
Это системное меню окна. Что нужно -- отследить использование пунктов меню или сымитировать выбор пунктов? Если первое, то перехватывайте WM_SYSCOMMAND. Если второе, то отправляйте WM_SYSCOMMAND в DefWindowProc (или см. [1], [2]).
злобная танька (2005-12-11 18:52:00) [7].. и Application.Restore
злобная танька (2005-12-11 18:51:00) [8]Application.Minimize?