|
| Information om at det er Windows, som ønsk~ Fra : P.L. |
Dato : 03-01-01 14:40 |
|
Hej NG
Jeg vil gerne kunne aflæse om det er Windows f.eks. ved "Luk Computeren" ,
som forsøger at lukke mit program. Det har jo betydning, da dr måske skal
gemmes nogle filer før lukningen.
Hvordan huuulan gør man det.
Peter
| |
Jesper Krog Andersen (03-01-2001)
| Kommentar Fra : Jesper Krog Andersen |
Dato : 03-01-01 15:10 |
|
jessie-peter@get2net.dk (P.L.) wrote in <VZF46.115$g37.4400
@news.get2net.dk>:
>Hej NG
>Jeg vil gerne kunne aflæse om det er Windows f.eks. ved "Luk Computeren" ,
>som forsøger at lukke mit program. Det har jo betydning, da dr måske skal
>gemmes nogle filer før lukningen.
>Hvordan huuulan gør man det.
>
Når Windows vil lukke sendes der en WM_QUERYENDSESSION til alle kørende
programmer. Hvis du fanger denne message, kan du sætte result=0, og
nedlkning vil blive afbrudt. Ellers skal result sættes til 1. Når alle
programmer har svaret bliver der sendt en WM_ENDSESSION. Hvis wparam=true
har alle sagt OK til nedlukning, og Windows bliver lukket. Ellers er WParam
false. Så vidt jeg husker skal man sætte result=0 på WM_ENDSESSION.
/Data
| |
N/A (04-01-2001)
| Kommentar Fra : N/A |
Dato : 04-01-01 17:31 |
|
| |
Jesper Andersen (04-01-2001)
| Kommentar Fra : Jesper Andersen |
Dato : 04-01-01 17:31 |
|
jessie-peter@get2net.dk (P.L.) wrote in
<Vx%46.339$ZH.5223@news.get2net.dk>:
>Hej Jesper
>Tak for dit fine svar.
>Nu har jeg læst om og afprøvet WM_QUERYENDSESSION og WM_ENDSESSION, men
>jeg kan ikke få det til at virke.
>
>Jeg har lavet det på følgende måde:
>
>AppMessage(var Msg: TMsg; var Handled: Boolean); // TMainform1
>Private-delen
>
>Procedure TMainform1.OnCreate(Sender:TObject);
>begin
> Application.onMessage:=AppMessage;
>end;
>
>Procedure TMainform1.AppMessage(var Msg: TMsg; var Handled: Boolean);
>begin
> if Msg=WM_QUERYENDSESSION then Handled:=True;
> // tilsyneladende kommer hverken WM_QUERYENDSESSION eller
> WM_ENDSESSION i det område, men alle mulige andre Msg-værdier.
>end;
>
>Har du nogen ide til, hvad jeg gør af fejl ???
>
Jeg tror det. Prøv med:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
private
procedure cmES(var Msg: TMessage); message WM_ENDSESSION;
procedure cmQES(var Msg: TMessage); message WM_QUERYENDSESSION;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
Procedure TForm1.cmQES(var Msg: TMessage);
begin
//Her sætter du så Msg.Result til 0 eller 1
msg.result := 0;
end;
Procedure TForm1.cmES(var Msg: TMessage);
begin
//Det her bliver kaldt når alle har svaret på WM_QUERYENDSESSION
end;
end.
/Data
| |
N/A (08-01-2001)
| Kommentar Fra : N/A |
Dato : 08-01-01 16:35 |
|
| |
Jesper Krog Andersen (08-01-2001)
| Kommentar Fra : Jesper Krog Andersen |
Dato : 08-01-01 16:35 |
|
jessie-peter@get2net.dk (P.L.) wrote in <ZNk66.146$LD5.6060
@news.get2net.dk>:
>Hej Jesper !!!
>Jeg har nu prøvet dit forslag og det virker fint.
>Til din orientering er Result:=1 det rigtige i cmQES.
>
Ja, hvis man ønsker at Windows skal lukke, jeg testede det ved at se, at
windows ikke lukkede når mit program kørte.
/Data
| |
|
|