Форум: "Основная";
Текущий архив: 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