![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
минимизация формы [D7, XP]
Lera © (2006-03-24 11:03:00)скажите пож-та, какое сообщение windows ловит сворачивание формы
Lera (2006-03-24 14:51:00) [1]справки нет, а где можно взять... SC_MAXIMIZE раскрывает все формы на весь экран
Kolan (2006-03-24 14:47:00) [2]
PostMessage(Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
У вас что нет справки.
WM_SYSCOMMAND + Windows SDK
Lera (2006-03-24 14:45:00) [3]спасибо, а чтобы развернуть приложение в прежний вид существуют ли команды windows?
kea (2006-03-24 14:28:00) [4]//---- смотрим 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
Kolan (2006-03-24 14:27:00) [5]По всей видимости так:
PostMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
Lera (2006-03-24 14:19:00) [6]а вы не знаете какому сообщению windows соответствует
Application.minimize?
balepa (2006-03-24 14:01:00) [7]
KolanСтранно SIZE_MAXIMIZED работает, а вот при минимизации нет .
При менимизации WM_SIZE вообще не приходит...
А если сделать все это во второй форме то приходит.
А почему в первой не работает ?
begin...end (2006-03-24 13:20:00) [8]> 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.
Lera (2006-03-24 13:18:00) [9]я опытным путем нашла код параметра минимизации 61472
Kolan (2006-03-24 13:18:00) [10]Для ятестов кинул на форму лист бох. код изменил так:
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:17:00) [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...
Lera (2006-03-24 13:10:00) [12]спасибо...а ты не знаешь как тогда быть?
Kolan (2006-03-24 13:06:00) [13]
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 12:23:00) [14]не мог бы ты дать код, плиз
Lera (2006-03-24 11:58:00) [15]скажи пож-та, а как учесть этот параметр в процедуре?
balepa (2006-03-24 11:54:00) [16]Окну посылается сообщение WM_SIZE с wParam = SIZE_MINIMIZED
Lera (2006-03-24 11:47:00) [17]имеется ввиду сворачивание по значку '-' в правом углу формы
Lera (2006-03-24 11:42:00) [18]в процедуру при сообщении WM_SIZE программа попадает перед появлением формы, а при сворачивании не попадает....каково всетаки сообщение при сворачивании?
TUser (2006-03-24 11:33:00) [19]wm_syscommand
balepa (2006-03-24 11:26:00) [20]> Lera (24.03.06 11:03)
> скажите пож-та, какое сообщение windows ловит сворачивание
> формы
???????????????
Если надо свернуть то,
SendMessage(hwnd,SW_MINIMIZE,0,0)
или
CloseWindow(Wnd: HWnd);