Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.01;
Скачать: CL | DM;

Вниз

Несворачиваемое окно !   Найти похожие ветки 

 
psa247 ©   (2005-12-05 19:33) [0]

Какие события, точнее - что происходит с окном приложения при запуске WindowsExplorerCommand - "Свернуть все окна". И как его победить ?
:)
Пробовал ловить WM_SYSCOMMAND и переопределил обработчик Application.OnMinimize - не реагирует. Как быть ..?


 
Суслик ©   (2005-12-05 19:45) [1]

точно не знаю (сразу говорю), но я бы перехватил все события (кроме wm_paint) и почитал про них справку в msdn.


 
VirEx ©   (2005-12-05 19:46) [2]

рабочий стол в windows это содержимое окна проводника - Explorer"а, поэтому все окна которые находятся в нём - подчиненные окна (моё предположение), эта команда является внутренней командой проводника, и проводник может либо послать всем окнам WM_SHOWWINDOW:
sendmessage(handle,WM_SHOWWINDOW,fShow,fnStatus);

fShow: true, false

fnStatus:
SW_OTHERUNZOOM Window is being uncovered because a maximize window was restored or minimized.
SW_OTHERZOOM Window is being covered by another window that has been maximized.
SW_PARENTCLOSING Window"s owner window is being minimized.
SW_PARENTOPENING Window"s owner window is being restored.
либо просто скрывает своё окно (дескриптор hDC)

(вот второй случай написал и задумался, скорей всего неправильно)


 
umbra ©   (2005-12-05 20:00) [3]

тут надо скорее работать с WM_WINDOWPOSCHANGING (окно его получает до изменения Z-order-а окна) или WM_WINDOWPOSCHANGED (окно получает это сообщение после изменения своего Z-order-а)


 
psa247 ©   (2005-12-05 20:04) [4]

Заметил такую особенность: как бы насильно сворачивается, т.к. после вызова этой команды - следом вызывал и SetForeGround и ShowWindow и Application.Restore - окно начинало прыгать (т.е. свернется-развернется)


 
КаПиБаРа ©   (2005-12-06 06:20) [5]

psa247 ©   (05.12.05 19:33)
И как его победить ?



program Project1;

uses
 Forms, windows,
 Unit1 in "Unit1.pas" {Form1};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.ShowMainForm := False;
 ShowWindow(Application.Handle, SW_HIDE);
 Application.Run;
end.

--------------------------------

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Visible := True;
 FormStyle := fsStayOnTop;
end;

end.



 
Игорь Шевченко ©   (2005-12-06 10:43) [6]


> Какие события, точнее - что происходит с окном приложения
> при запуске WindowsExplorerCommand - "Свернуть все окна".
>  И как его победить ?


Не издевайся над пользователем. WM_SYSCOMMAND не посылается, окно рабочего стола помещается на передний план.


 
КаПиБаРа ©   (2005-12-06 10:49) [7]

Игорь Шевченко ©   (06.12.05 10:43) [6]
Это точно. Скрывается даже полностью "зависшее" окно приложения, которое не обрабатывает вообще никаких сообщений.


 
Чапаев ©   (2005-12-06 11:04) [8]

А я бы руки ломал за приложение, которое не сворачивается, когда я жму "Свернуть ВСЕ".


 
Думкин ©   (2005-12-06 11:07) [9]

> Чапаев ©   (06.12.05 11:04) [8]

Бедный Эксплорер.


 
КаПиБаРа ©   (2005-12-06 11:17) [10]

Чапаев ©   (06.12.05 11:04) [8]
Например за приложение таймер, главная форма которого размером 20х50 пикселей, расположенна в координатах (х=центр экрана, у=0)


 
Чапаев ©   (2005-12-06 12:03) [11]


> Например за приложение таймер, главная форма которого размером
> 20х50 пикселей, расположенна в координатах

Не знаю, не видел. А это главное. ;-)


 
psa247 ©   (2005-12-11 18:14) [12]


WM_WINDOWPOSCHANGING

   WPARAM wParam
   LPARAM lParam;
   
Parameters

wParam
This parameter is not used.
lParam
Pointer to a WINDOWPOS structure that contains information about the window"s new size and position.
Return Value

If an application processes this message, it should return zero.


Подскажите, как это выполнить ?
If an application processes this message, it should return zero.



Страницы: 1 вся ветка

Текущий архив: 2006.01.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.08 c
3-1131603472
db_noob
2005-11-10 09:17
2006.01.01
Добавление поля в ADOTable


2-1134560170
sanich
2005-12-14 14:36
2006.01.01
Непонятная ошибка при работе с таблицей


2-1134467181
mrGrey2
2005-12-13 12:46
2006.01.01
Преобразование KOI8-R в ANSI


14-1133958253
db_good
2005-12-07 15:24
2006.01.01
Ищу компонент


3-1131601988
DimonS
2005-11-10 08:53
2006.01.01
Можно вопрос для чайников?