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

Вниз

Иконка в SysTray и завершение работы Windows   Найти похожие ветки 

 
BaDeVlad ©   (2003-12-29 11:39) [0]

Помещаю иконку в систрей. В ОнДестрой формы есть процедура сохранения настроек программы. При попытке закрыть форму, она скрывается.
Проблема: Если закрыть прогу (через пункт меню), параметры сохраняются, если завершить работу виндов - то нет. Простите заранее, но нигде не нашел, как пользоваться квериэндсейшн. Я его ловлю, в принципе (для аппликэйшена) и вызываю Форм1.клозе. Но что-то не работает.


 
BiN ©   (2003-12-29 12:57) [1]

сохраняй параметры внутри процедуры обработки сообщения WM_QUERYENDSESSION


 
BaDeVlad ©   (2003-12-29 13:27) [2]

To >> BiN

Не помогает. Настройки пишу в реестр обычными Делфовыми методами. WM_QUERYENDSESSION для чего вообще ловится: для Application?
Вот гадость, и проверить никак нельзя по F8 :-)


 
BiN ©   (2003-12-29 14:01) [3]

пиведи код


 
BiN ©   (2003-12-29 14:04) [4]

а проверить можно очень просто
имитируй завершение сеанса, посылая сообщение

SendMessage(Form1.handle, WM_QUERYENDSESSION, 0, ENDSESSION_LOGOFF)


 
Князев Сергей   (2003-12-29 15:33) [5]


private
{ Private declarations }
procedure WMQueryEndSession(var Message: TWMQueryEndSession);
message WM_QUERYENDSESSION;
....................

{При закрытии}

procedure TForm1.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
inherited;
//Пихай все сохранения сюда
Close;
end;



 
BaDeVlad ©   (2003-12-29 17:38) [6]

TO >> Князев Сергей

Обработчик писать для главной формы нужно, или для Аппликейшена?


 
JSilver   (2003-12-29 21:12) [7]

См. сообщение тов. Князева Сергея. При завершении Винда всем процессам шлет 2 сообщения. Поделюсь кое чем о сообщении WM_QUERYENDSESSION, т. к. я тоже его использовал.
WM_QUERYENDSESSION посылается всем работающим приложениям Windows в момент инициализации процесса окончания работы Windows. Логическая переменная CanClose, передаваемая обработчику как var-параметр, может позволить программе (и Windows) завершить свою работу, если имеет значение True, значение же False не позволит программе завершить свою работу.

Следующий код демонстрирует как можно воспользоваться данным событием.

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
{Спрашиваем пользователя, если инициировано завершение работы.}
if MessageDlg("Вы уверены?", mtConfirmation, mbYesNoCancel, 0) = mrYes
then CanClose := true {Разрешаем завершение работы.}
else CanClose := false; {Не разрешаем завершение работы.}
end;

Но проще вызвать метод предка (См. сообщение тов. Князева Сергея). Это позволит автоматически определить парамктр CanClose. Обрати внимание на строку

//Пихай все сохранения сюда

А туда что хочешь поместить можно, хоть код сохранения, хоть вызыв процедуры сохранения (где хочешь там ее и реализовывай).



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

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

Наверх




Память: 0.48 MB
Время: 0.02 c
14-12483
TUser
2004-02-13 14:05
2004.03.05
технологии


1-12327
dendy
2004-02-22 22:50
2004.03.05
При изменении размера формы...


1-12363
Layner
2004-02-25 11:20
2004.03.05
Подскажите плз, как сгенерировать GUID (globally unique identifi)


1-12409
Ivolg
2004-02-24 17:11
2004.03.05
Шрифты


1-12405
ghg
2004-02-24 16:04
2004.03.05
потеря значения переменной