Главная страница
    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.49 MB
Время: 0.014 c
1-1141306181
MegaVolt
2006-03-02 16:29
2006.04.09
Как выводить статус от нескольких потоков?


15-1142499130
Pa6oTa
2006-03-16 11:52
2006.04.09
!СРОЧНО! - небольшая БД, работа на 3дня.


15-1142440059
kilonet
2006-03-15 19:27
2006.04.09
Delphi vs TurboPascal


2-1143116539
Nsk3D
2006-03-23 15:22
2006.04.09
Оформление функции в длл


15-1142803604
Volf_555
2006-03-20 00:26
2006.04.09
Проблема с DVD - читает только CD-диски, а DVD-нет...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский