Текущий архив: 2006.04.09;
Скачать: CL | DM;
Внизминимизация формы Найти похожие ветки
← →
Lera (2006-03-24 11:03) [0]скажите пож-та, какое сообщение windows ловит сворачивание формы
← →
Сергей М. © (2006-03-24 11:24) [1]
> какое сообщение windows ловит сворачивание формы
Windows ничего не "ловит".
Windows посылает это сообщение, а уж "ловит"-то его приложение, работающее под управлением Windows.
см., например, справку по WM_SIZE
← →
balepa © (2006-03-24 11:26) [2]> Lera (24.03.06 11:03)
> скажите пож-та, какое сообщение windows ловит сворачивание
> формы
???????????????
Если надо свернуть то,
SendMessage(hwnd,SW_MINIMIZE,0,0)
или
CloseWindow(Wnd: HWnd);
← →
TUser © (2006-03-24 11:33) [3]wm_syscommand
← →
Lera (2006-03-24 11:42) [4]в процедуру при сообщении WM_SIZE программа попадает перед появлением формы, а при сворачивании не попадает....каково всетаки сообщение при сворачивании?
← →
Lera (2006-03-24 11:47) [5]имеется ввиду сворачивание по значку "-" в правом углу формы
← →
balepa © (2006-03-24 11:54) [6]Окну посылается сообщение WM_SIZE с wParam = SIZE_MINIMIZED
← →
Lera (2006-03-24 11:58) [7]скажи пож-та, а как учесть этот параметр в процедуре?
← →
Lera (2006-03-24 12:23) [8]не мог бы ты дать код, плиз
← →
Kolan © (2006-03-24 13:06) [9]
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShellApi;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
procedure WMSize(var Msg: TMessage); message WM_SIZE;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMSize(var Msg: TMessage);
begin
if Msg.WParam = SIZE_MINIMIZED then
ShowMessage("Minimized");
if Msg.WParam = SIZE_MAXIMIZED then
ShowMessage("Maximized");
end;
СтранноSIZE_MAXIMIZED
работает, а вот при минимизации нет .
При менимизации WM_SIZE вообще не приходит...
← →
Lera (2006-03-24 13:10) [10]спасибо...а ты не знаешь как тогда быть?
← →
Kolan © (2006-03-24 13:17) [11]Для ятестов кинул на форму лист бох. код изменил так:
procedure TForm1.WMSize(var Msg: TMessage);
begin
case Msg.WParam of
SIZE_MINIMIZED: ListBox1.Items.Add("SIZE_MINIMIZED");
SIZE_MAXIMIZED: ListBox1.Items.Add("SIZE_MAXIMIZED");
SIZE_MAXHIDE: ListBox1.Items.Add("SIZE_MAXHIDE");
SIZE_MAXSHOW: ListBox1.Items.Add("SIZE_MAXSHOW");
SIZE_RESTORED: ListBox1.Items.Add("SIZE_RESTORED");
else
ListBox1.Items.Add("UnKnown");
end;
end;
Не приходит wm_size...
← →
Kolan © (2006-03-24 13:18) [12]Для ятестов кинул на форму лист бох. код изменил так:
procedure TForm1.WMSize(var Msg: TMessage);
begin
case Msg.WParam of
SIZE_MINIMIZED: ListBox1.Items.Add("SIZE_MINIMIZED");
SIZE_MAXIMIZED: ListBox1.Items.Add("SIZE_MAXIMIZED");
SIZE_MAXHIDE: ListBox1.Items.Add("SIZE_MAXHIDE");
SIZE_MAXSHOW: ListBox1.Items.Add("SIZE_MAXSHOW");
SIZE_RESTORED: ListBox1.Items.Add("SIZE_RESTORED");
else
ListBox1.Items.Add("UnKnown");
end;
end;
Не приходит wm_size...
← →
Lera (2006-03-24 13:18) [13]я опытным путем нашла код параметра минимизации 61472
← →
begin...end © (2006-03-24 13:20) [14]> Lera (24.03.06 11:47) [5]
> имеется ввиду сворачивание по значку "-" в правом углу формы
Тогда см. [3]:TMyForm = class(TForm)
private
procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
end;
procedure TMyForm.WMSysCommand(var Message: TWMSysCommand);
begin
if Message.CmdType and $FFF0 = SC_MINIMIZE then
ShowMessage("Окно сворачивается!");
inherited
end
Этот же обработчик сработает и в том случае, если, например, был выбран пункт системного меню (в левом верхнем углу окна). Если нужно отловить именно сворачивание по нажатию на кнопку "Свернуть", дополнительно посылайте из обработчика сообщение WM_NCHITTEST и проверяйте результат на HTMINBUTTON.
← →
balepa © (2006-03-24 14:01) [15]
KolanСтранно SIZE_MAXIMIZED работает, а вот при минимизации нет .
При менимизации WM_SIZE вообще не приходит...
А если сделать все это во второй форме то приходит.
А почему в первой не работает ?
← →
Lera (2006-03-24 14:19) [16]а вы не знаете какому сообщению windows соответствует
Application.minimize?
← →
Kolan © (2006-03-24 14:27) [17]По всей видимости так:
PostMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
← →
kea (2006-03-24 14:28) [18]//---- смотрим unit Forms
procedure TApplication.Minimize;
begin
if not IsIconic(FHandle) then
begin
NormalizeTopMosts;
SetActiveWindow(FHandle);
if (MainForm <> nil) and (ShowMainForm or MainForm.Visible) then
begin
SetWindowPos(FHandle, MainForm.Handle, MainForm.Left, MainForm.Top,
MainForm.Width, 0, SWP_SHOWWINDOW);
DefWindowProc(FHandle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
end else
ShowWinNoAnimate(FHandle, SW_MINIMIZE);
if Assigned(FOnMinimize) then FOnMinimize(Self);
end;
end;
//----
Окну посылается WM_SYSCOMMAND с wParam = SC_MINIMIZE
← →
Lera (2006-03-24 14:45) [19]спасибо, а чтобы развернуть приложение в прежний вид существуют ли команды windows?
← →
Kolan © (2006-03-24 14:47) [20]
PostMessage(Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
У вас что нет справки.
WM_SYSCOMMAND + Windows SDK
← →
Lera (2006-03-24 14:51) [21]справки нет, а где можно взять... SC_MAXIMIZE раскрывает все формы на весь экран
Страницы: 1 вся ветка
Текущий архив: 2006.04.09;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.014 c