/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
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

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste