Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

свернуть и восстановить


Змей ©   (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?


Наверх

Титульная страница Поиск, карта сайта Написать письмо