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

Вниз

Закрыть приложение   Найти похожие ветки 

 
Solo_Mes   (2005-07-29 12:12) [0]

Господа! Подскажите, как сделать так что бы при клике юзера на крестик в основной форме приложение сворачивалось (или игнорировало), а при завершении работы системы (выключение компа), приложение нормально завершало работу. В приложении создаётся объект с помощью CreateOLEObject и существует пока не выключается комп.


 
TUser ©   (2005-07-29 12:15) [1]

Form1.OnClose

+ ловить WM_QUERYENDSESSION


 
Чапаев ©   (2005-07-29 12:16) [2]

> при клике юзера на крестик в основной форме приложение сворачивалось (или игнорировало)
RTFM OnCloseQuery

> при завершении работы системы
Ищи по ФАКам фразу "какие сообщения ... при выключении".


 
Чапаев ©   (2005-07-29 12:16) [3]

Во, точно. Именно WM_QUERYENDSESSION. ;-)


 
Solo_Mes   (2005-07-29 12:16) [4]

Я так понимаю в OnClose игнорировать закрытие, а как использовать WM_QUERYENDSESSION??


 
Solo_Mes   (2005-07-29 12:18) [5]

т.е. по WM_QUERYENDSESSION закрывать форму и освобождать память ?
спсб будем пробовать


 
Чапаев ©   (2005-07-29 12:20) [6]

procedure WmQueryEndSession(var Msg:TWmQueryEndSession);message WM_QUERYENDSESSION;


 
ssk ©   (2005-07-29 12:32) [7]

вот, может поможет:

type
 TForm1 = class(TForm)

{ ...  }

protected
   procedure WMGETSYSCOMMAND(var Msg: TMessage); message WM_SYSCOMMAND;
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WMGETSYSCOMMAND(var Msg: TMessage);
begin
 if Msg.WParam = SC_CLOSE then
   Application.Minimize
 else
   inherited;
end;


 
begin...end ©   (2005-07-29 12:39) [8]

> ssk ©   (29.07.05 12:32) [7]
> if Msg.WParam = SC_CLOSE then

Справку следует читать внимательно.


 
ssk ©   (2005-07-29 12:43) [9]

>>begin...end
Справку следует читать внимательно


человек хотел получить крестик - он его получил.
а если вы о $FFF0 - так это уже другая история.


 
begin...end ©   (2005-07-29 12:49) [10]

> ssk ©   (29.07.05 12:43) [9]

> человек хотел получить крестик - он его получил.
> а если вы о $FFF0 - так это уже другая история.

Да, я именно о $FFF0. И это совсем не другая история.

Я не вижу гарантий, что "человек получит крестик" при использовании кода [7]. И если он его "получит" сейчас, то в один прекрасный момент он может его и не "получить".  результате пренебрежения документацией.


 
Solo_Mes   (2005-07-29 12:59) [11]

Спасибо большое всем. Вот такой вопросик ещё возник а можно ли как-то узнать о том что человек выбрал "Снять задачу" в диспетчере задач


 
ssk ©   (2005-07-29 13:00) [12]

>>Да, я именно о $FFF0. И это совсем не другая история.

смотря каким образом пользователь решит получить крестик. если он начнет вызывать контекстные меню в заголовке окна или на панели задач и выбирать "закрыть", то он естественно не получит крестик! а если он кликнет именно по крестику на окне - он его получит.


 
begin...end ©   (2005-07-29 13:11) [13]

> ssk ©   (29.07.05 13:00) [12]

Если пользователь хочет закрыть окно (ЛЮБЫМ способом -- нажатием на крестик, нажатием Alt+F4, выбором пунта системного меню), окну посылается сообщение WM_SYSCOMMAND. И по приходу этого сообщения в ЛЮБОМ случае для определения типа системной команды (свёртывание, развёртывание, закрытие и т.д.) к параметру WParam НУЖНО применять маску $FFF0. Понимаете?

И, конечно, только по WM_SYSCOMMAND нельзя определить, КАК пользователь дал команду на закрытие окна.


 
ssk ©   (2005-07-29 13:17) [14]

>>begin...end
>к параметру WParam НУЖНО применять маску $FFF0


что ж, признаю свое поражение в споре. вот выдержка из хелпа:

Remarks

The DefWindowProc function carries out the window menu request for the predefined actions specified in the previous table.
In WM_SYSCOMMAND messages, the four low-order bits of the uCmdType parameter are used internally by Windows. To obtain the correct result when testing the value of uCmdType, an application must combine the value 0xFFF0 with the uCmdType value by using the bitwise AND operator.


 
Solo_Mes   (2005-07-29 13:24) [15]

Ну с этим понятно, спасибо. Так а всётаки как определить снимается ли задача через диспетчер задач?


 
Solo_Mes   (2005-07-29 13:25) [16]

Кстати данный способ работает под всеми ОСями? (я имею ввиду семью виндовз)


 
Solo_Mes   (2005-07-29 13:28) [17]

Просто если игнорировать крестик, то всё нормально, а если приложение снять через диспетчер то оно нормально не закрывается.
Вот хотелось бы это тоже решить.


 
ssk ©   (2005-07-29 13:39) [18]

OnCloseQuery попробуй



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

Форум: "Основная";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.042 c
3-1121236824
Ирина
2005-07-13 10:40
2005.08.21
DBGrid


14-1122722534
Knight
2005-07-30 15:22
2005.08.21
Нужен "шпиён" за 1с...


11-1105541859
Help
2005-01-12 17:57
2005.08.21
Есть аналог Form1.Activate?


4-1118906834
leonidus
2005-06-16 11:27
2005.08.21
Как получить слово выделенное в другом приложении


4-1119449194
Семен Сорокин
2005-06-22 18:06
2005.08.21
Расположение заблокированного файла на диске.





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