Форум: "WinAPI";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];
ВнизИконка в 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c