![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Иконка в SysTray и завершение работы Windows [D5, Win95/98]
BaDeVlad © (2003-12-29 11:39:00)
Помещаю иконку в систрей. В ОнДестройформы есть процедура сохранения настроек программы. При попытке закрыть форму, она скрывается.
Проблема: Если закрыть прогу (через пункт меню), параметры сохраняются, если завершить работу виндов - то нет. Простите заранее, но нигде не нашел, как пользоваться квериэндсейшн. Я его ловлю, в принципе (для аппликэйшена) и вызываю Форм1.клозе. Но что-то не работает.
JSilver (2003-12-29 21:12:00) [1]
См. сообщение тов. Князева Сергея. При завершении Винда всем процессам шлет 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. Обрати внимание на строку
//Пихай все сохранения сюда
А туда что хочешь поместить можно, хоть код сохранения, хоть вызыв процедуры сохранения (где хочешь там ее и реализовывай).
BaDeVlad (2003-12-29 17:38:00) [2]
TO >> Князев Сергей
Обработчик писать для главной формы нужно, или для Аппликейшена?
Князев Сергей (2003-12-29 15:33:00) [3]
private
{ Private declarations }
procedure WMQueryEndSession(var Message: TWMQueryEndSession);
message WM_QUERYENDSESSION;
....................
{При закрытии}
procedure TForm1.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
inherited;
//Пихай все сохранения сюда
Close;
end;
BiN (2003-12-29 14:04:00) [4]
а проверить можно очень просто
имитируй завершение сеанса, посылая сообщение
SendMessage(Form1.handle, WM_QUERYENDSESSION, 0, ENDSESSION_LOGOFF)
BiN (2003-12-29 14:01:00) [5]
пиведи код
BaDeVlad (2003-12-29 13:27:00) [6]
To >> BiN
Не помогает. Настройки пишу в реестр обычными Делфовыми методами. WM_QUERYENDSESSION для чего вообще ловится: для Application?
Вот гадость, и проверить никак нельзя по F8 :-)
BiN (2003-12-29 12:57:00) [7]
сохраняй параметры внутри процедуры обработки сообщения WM_QUERYENDSESSION