Форум: "Начинающим";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
Внизсвернуть и восстановить Найти похожие ветки
← →
Змей © (2005-12-11 18:22) [0]Привет Мастера!
есть функции свернуть и восстановить! кнопок в правом верхнем углу окна!
ведь это не hide & show
как этими функциями управлять? и как они называются?
Спасибо
← →
злобная танька © (2005-12-11 18:51) [1]Application.Minimize?
← →
злобная танька © (2005-12-11 18:52) [2].. и Application.Restore
← →
begin...end © (2005-12-11 18:57) [3]> Змей © (11.12.05 18:22)
Это системное меню окна. Что нужно -- отследить использование пунктов меню или сымитировать выбор пунктов? Если первое, то перехватывайте WM_SYSCOMMAND. Если второе, то отправляйте WM_SYSCOMMAND в DefWindowProc (или см. [1], [2]).
← →
sniknik © (2005-12-11 19:28) [4]begin...end © (11.12.05 18:57) [3]
> WM_SYSCOMMAND
не совсем нажатие кнопок, а всетаки уже команды. в основной както пытались разделить закрытие программы произошло от нажатия кнопки либо от другого события (команды в программе), так Шевченко приводил событие именно от кнопок окна вроде WM_CBLBUTTONCLICKED но не уверен точно (не мне нужно было, забыл ;)
стоит поискать если нужны именно нажатия кнопок.
← →
begin...end © (2005-12-11 19:47) [5]> sniknik © (11.12.05 19:28) [4]
Выделить именно нажатие кнопок можно с помощью WM_NCHITTEST. Более того -- могу ошибаться, но кое-что можно определить по младшим четырём битам параметра wParam у WM_SYSCOMMAND.
← →
sniknik © (2005-12-11 21:24) [6]> Выделить именно нажатие кнопок можно с помощью 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 21:36) [7]> 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 22:52) [8]> Изврата не вижу.
хм... я тоже. но тогда до этого не додумался, все пытался непосредственно событие перехватить, потому изврат и был...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.014 c