Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.046 c
4-1137893606
Microsom
2006-01-22 04:33
2006.04.09
Имя пользователя, из под аккаунта которого запущена программа.


2-1143229084
аматор
2006-03-24 22:38
2006.04.09
Работа с Firebird-2.0.0 (embed)


6-1134687059
Indy
2005-12-16 01:50
2006.04.09
[INDY] Как использовать TIdIOHandlerStream совместно с TIdNNTP?


2-1142997974
soi
2006-03-22 06:26
2006.04.09
Программное изменение размера дочернего окна


2-1143460798
dest81
2006-03-27 15:59
2006.04.09
Материнская плата