Форум: "Основная";
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];
ВнизЗавершение Windows Найти похожие ветки
← →
Brand (2002-02-11 23:41) [0]А как сделать так, чтоб по завершению Windows, моя прога, которая висит в SysTray, сделала все что надо и завершилась.
Потому-что у меня прога загружается при автозагрузке в SysTray, и если я ее ни разу не вызываю, то все Ок, а если я ее хоть раз вызываю, винда не завершается, до тех пор, пока я не закрою свою прогу.
Всем спасибо.
← →
Song (2002-02-12 16:48) [1]Я так думаю, что винды завершаю работу так: определяют кол-во задач, запущенных в системе и, перебирая их все по одной для каждой из них определяют PID процесса и завершают его, а это не что иное как посылка сообщения главной форме приложения, чтобы она сделала Close. По этому поставь все твои инструкции по завершению на onClose главной формы и всё будет работать. Или должно работать... :)))
← →
Юрий Зотов (M) (2002-02-12 16:57) [2]См. WM_QUERYENDSESSION и WM_ENDSESSION. И проверьте, что у Вас происходит в обработчике OnCloseQuery, если такой есть.
← →
Brand (2002-02-12 23:45) [3]А как работать с этими WM_.........?
← →
Dimk (2002-02-13 01:26) [4]У формы создаешь метод
procedure ВсеРавноКакоеИмя
(var Message: TMessage); message WM_QUERYENDSESSION;
ну и она будет вызываться когда сообщение придет.
А еще прочитай по нему доку чтобы знать что там надо ответить на него. Это есть в win32.hlp что с делфями вместе приходит.
← →
Brand (2002-02-13 22:48) [5]А можно конкретный отрывочек программы (процедуры)?
← →
Dimk (2002-02-14 00:40) [6]// взял из соурсов - не про то сообщение но важна сама идея
// объявление класса
TCustomEdit = class(TWinControl)
private
FMaxLength: Integer;
FBorderStyle: TBorderStyle;
FPasswordChar: Char;
FReadOnly: Boolean;
......
procedure WMSetFont(var Message: TWMSetFont); message WM_SETFONT;
procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED;
procedure CMEnter(var Message: TCMGotFocus); message CM_ENTER;
procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
procedure WMContextMenu(var Message: TWMContextMenu);
message WM_CONTEXTMENU;
......
end;
// теперь реализация одного из обработчиков сообщений
procedure TCustomEdit.WMSetFont(var Message: TWMSetFont);
begin
inherited;
if NewStyleControls and
(GetWindowLong(Handle, GWL_STYLE) and ES_MULTILINE = 0) then
SendMessage(Handle, EM_SETMARGINS, EC_LEFTMARGIN or EC_RIGHTMARGIN, 0);
end;
Ну а тебе надо чтото там сохранить и тп. А потом Application.Terminate;
>Юрий Зотов (M) (12.02.02 16:57)
>См. WM_QUERYENDSESSION и WM_ENDSESSION. И проверьте, что у Вас >происходит в обработчике OnCloseQuery, если такой есть.
Если делал такой обработчик - то погляди что возвращается в CanClose. Чтобы окно закрылось - надо True;
// пример из доки
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if MessageDlg("Close the form?", mtConfirmation,
[mbOk, mbCancel], 0) = mrCancel then
CanClose := False;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c