Текущий архив: 2005.12.11;
Скачать: CL | DM;
ВнизREPEAT UNTIL <Завершение работы WINDOWS> Найти похожие ветки
← →
IAMDANIL © (2005-11-22 14:13) [0]Как в консоли написать такой код?
← →
Ega23 © (2005-11-22 14:19) [1]WriteLn("REPEAT UNTIL <Завершение работы WINDOWS>");
← →
Digitman © (2005-11-22 14:20) [2]создай top-level-окно, организуй цикл
ожидания/выборки/диспетчеризации/обработки оконных сообщений
поступление окну WM_QUERYENDSESSION-сообщения есть факт попытки завершения Windows-сессии
← →
IAMDANIL © (2005-11-22 14:22) [3]
> создай top-level-окно, организуй цикл
>
> ожидания/выборки/диспетчеризации/обработки оконных сообщений
>
> поступление окну WM_QUERYENDSESSION-сообщения есть факт
> попытки завершения Windows-сессии
А можно пример?..
← →
Leonid Troyanovsky © (2005-11-22 14:27) [4]
> IAMDANIL © (22.11.05 14:22) [3]
> А можно пример?..
http://groups.google.com/group/fido7.ru.delphi.chainik/msg/23e83fdf49a13df2
Только надо помнить, что обработчик выполняется в
контексте другого потока.
--
Regards, LVT.
← →
IAMDANIL © (2005-11-22 14:35) [5]Там как-то непонятно...
Как завершить свою прогу?
Дайте пожалуйста пример...
← →
clickmaker © (2005-11-22 14:40) [6]
> Как завершить свою прогу?
эээ... ну много способов есть
MainForm.Close
Application.Terminate
begin
// здесь она завершается
end;
выбирай на вкус
← →
IAMDANIL © (2005-11-22 14:43) [7]
> эээ... ну много способов есть
> MainForm.Close
> Application.Terminate
>
> begin
>
> // здесь она завершается
> end;
>
> выбирай на вкус
Как её завершить при завершении винд?
Она у меня консольная
← →
clickmaker © (2005-11-22 14:50) [8]
> Как её завершить при завершении винд?
SetConsoleCtrlHandler()
← →
Leonid Troyanovsky © (2005-11-22 15:11) [9]
> IAMDANIL © (22.11.05 14:35) [5]
> Там как-то непонятно...
Чего непонятно?
> Как завершить свою прогу?
В обработчике CtrlHandler есть события
CTRL_LOGOFF_EVENT: ;
CTRL_SHUTDOWN_EVENT: ;
etc.
Там могут быть, например, установлены нужное значение для
выхода из цикла repeat (while).
Хотя, консольному приложению приличней реализовать цикл
ожидания ввода (read*) или события (wait*), а не переменной.
--
Regards, LVT.
← →
IAMDANIL © (2005-11-23 11:10) [10]
> В обработчике CtrlHandler есть события
> CTRL_LOGOFF_EVENT: ;
> CTRL_SHUTDOWN_EVENT: ;
>
> etc.
Надо писать CTRL_SHUTDOWN_EVENT: flag:=true;
repeat until flag
так?
← →
Leonid Troyanovsky © (2005-11-23 15:24) [11]
> IAMDANIL © (23.11.05 11:10) [10]
> Надо писать CTRL_SHUTDOWN_EVENT: flag:=true;
> repeat until flag
Скорее даже в CTRL_LOGOFF_EVENT.
А что внутри цикла?
--
Regards, LVT.
← →
IAMDANIL © (2005-11-24 14:00) [12]
> А что внутри цикла?
Внутри цикла ничего, просто мне надо дождатться завершения W. и потом, перед завершением выполнить какие-то действия...
если не трудно, дайте .DPR с примером (именно этим)
← →
umbra © (2005-11-24 14:14) [13]так ее ж винда завершит, когда выключаться будет. зачем мучиться?
← →
Morgoth_ (2005-11-24 14:16) [14]На работе забывал флешку постоянно с нужной инфой и написал, ненужное сам выкинь ))):
program Quitwnd;
uses
windows,
messages;
var wc, wc2 : TWndClassEx;
wndMain, wnd2 : HWND;
Mesg : TMsg;
HDCpaint:hdc;
RECT: Trect ;
ps: PAINTSTRUCT;
function WindowProc(wnd:HWND; Msg : UINT; wParam: WPARAM; lParam: LPARAM):LRESULT;
stdcall;
begin
case msg of
WM_PAINT :
begin
hdcpaint := BeginPaint (wnd2,ps) ;
GetClientRect (wnd2, rect) ;
CreatePen(bs_solid, 3, PaletteRGB(0,0,0));
SelectObject(hdcpaint,CreateSolidBrush(0));
rect.Left:=0;
rect.Top:=0;
rect.Right:=380;
rect.Bottom:=30;
rectangle(hdcpaint,0,0,380,380);
SetTextColor(hdcpaint, RGB(255,255,255));
SetBkColor(hdcpaint, RGB(255,0,0));
DrawText (hdcpaint, "НЕ ЗАБУДЬ ВЫНУТЬ ФЛЭШКУ!!! ПОНЯЛ?", -1, rect,
DT_SINGLELINE or DT_CENTER or DT_VCENTER) ;
EndPaint (wndMain, ps) ;
end;
WM_ENDSESSION:
begin
ShowWindow(wnd2, cmdShow);
end;
WM_COMMAND:
begin
result := 0;
end;
WM_QUERYENDSESSION :
begin
result := 0;
end;
WM_DESTROY :
begin
postquitmessage(0);
Result:=0;
exit;
end;
else Result:=DefWindowProc(wnd,msg,wParam,lParam);
end;
end;
var xPos,yPos,nWidth,nHeight : Integer;
begin
{окно}
with wc do
begin
cbSize:=sizeof(wc);
style:=CS_HREDRAW or CS_VREDRAW;
lpfnWndProc:=@WindowProc;
cbClsExtra:=0;
cbWndExtra:=0;
hInstance:=HInstance;
hIcon:=0;
hCursor:=LoadCursor(0,IDC_ARROW);
hbrBackground:=COLOR_BTNFACE+1;
lpszMenuName:=0;
lpszClassName:="quitwnd : Main";
end;
with wc2 do
begin
cbSize:=sizeof(wc);
style:=CS_HREDRAW or CS_VREDRAW;
lpfnWndProc:=@WindowProc;
cbClsExtra:=0;
cbWndExtra:=0;
hInstance:=HInstance;
hIcon:=0;
hCursor:=LoadCursor(0,IDC_ARROW);
hbrBackground:=COLOR_BTNFACE+1;
lpszMenuName:=0;
lpszClassName:="quitwnd : mess";
end;
RegisterClassEx(wc);
RegisterClassEx(wc2);
nWidth:=380;
nHeight:=60;
xPos:=getsystemmetrics(SM_CXSCREEN) div 2 - NWidth div 2;
yPos:=getsystemmetrics(SM_CYSCREEN) div 2 - NHeight div 2;
wndMain:=CreateWindowEx(WS_EX_CLIENTEDGE,
"quitwnd : Main","Внимание!!!",ws_overlapped or ws_sysmenu,xPos,yPos,nWidth,nHeight,0,0,0,nil);
wnd2 := CreateWindowEx(WS_EX_CLIENTEDGE,
"quitwnd : mess","Внимание!!!",ws_overlapped or ws_sysmenu,xPos,yPos,nWidth,nHeight,0,0,0,nil);
ShowWindow(wndMain,sw_Hide);
while GetMessage(Mesg,0,0,0) do
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
end.
← →
IAMDANIL © (2005-11-24 14:20) [15]
> так ее ж винда завершит, когда выключаться будет. зачем
> мучиться?
Dj gперых мне надо SAVE DATA а во вторых у меня появляется "ПРОГА не огтвечает" нно две минуты назад всё отладил и работает!
*** Всем спасибо ***
Страницы: 1 вся ветка
Текущий архив: 2005.12.11;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.039 c