Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.012 c
5-1119899149
Radgar
2005-06-27 23:05
2006.01.01
Массив в компоненте


14-1133966671
Ксардас
2005-12-07 17:44
2006.01.01
Задачи по программированию


9-1122141384
BigBrother
2005-07-23 21:56
2006.01.01
Очень мало Fps


2-1134659544
kalim
2005-12-15 18:12
2006.01.01
Ado connection


2-1134479787
Dysan
2005-12-13 16:16
2006.01.01
SQL.Append Драйвер не поддерживает данной функции?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский