[Delphi 5] Programma blokkeert sluiten van windows XP

Pagina: 1
Acties:

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 20-08 20:59
Ik ben even bezig geweest die nieuws van een site moet afhalen, dat werkt wel lekker
Maar na een aantal testritten blijkt dat mijn programma het afsluiten van windows blokkeert. Windows gaat stap voor stap alle programma's afsluiten (ook die in de system-tray) maar bij m'n programma stopt hij en kan ik doorcomputeren.

Ik heb het component CoolTrayIcon gebruikt wat te downloaden is van Torry.net
Ik heb geprobeerd de CanClose variable bij the onCloseQuery van het form op True te zetten maar na wat debuggen blijkt deze gewoon al op True te staan.

Bij geen enkele property zou ik eruit kunnen halen dat iets geblokkeerd moet worden. Heeft iemand dit soort probleem eerder eens gehad? of wat kan ik tegen dit gevalletje doen?

Wat source code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
procedure TForm1.CoolTrayIcon1Startup(Sender: TObject; var ShowMainForm: Boolean);
var
  Registry: TRegistry;
begin
  ShowMainForm := not true;
  Form1.Height := 180;
  CoolTrayIcon1.IconList := ImageList1;
  CoolTrayIcon1.CycleIcons := False;
  Registry := TRegistry.Create;
  if Registry.KeyExists(RegKey) then
  begin
    Registry.OpenKey(RegKey, False);
    minutesnews := Registry.ReadString('Minutes');
    if (minutesnews < '1') then minutesnews := '1';
    if (minutesnews > '99') then minutesnews := '99';
    check := Registry.ReadBool('Checkafterstart');
    Timer2.Interval := strtoint(minutesnews) *60000;
    Timer2.Enabled := True;
    eerstekeer := false;
    Registry.CloseKey;

    Updown1.Position := strtoint(minutesnews);
    Checkbox1.checked := check;
    Timer1.Enabled := True;
  end else
  begin
    Checkbox1.checked := true;
    Edit1.Text := '2';
    Timer2.Enabled := False;
    Timer1.Enabled := True;
    eerstekeer := true;
  end;
  Registry.Free;
end;


Er is een splashscreen aanwezig, deze is zonder externe componenten gebruikt te hebben.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Zoek eens bij MSDN op de WM_POWER en WM_POWERBROADCAST messages.

Ik zwets, die gaan over suspend en hibernate 8)7

Ik zocht dus WM_ENDSESSION en WM_QUERYENDSESSION.

[ Voor 50% gewijzigd door curry684 op 04-11-2003 01:42 ]

Professionele website nodig?


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 20-08 20:59
Als men properties of stukken code wil zien, roep maar even

Het programma sluit gewoon netjes af als ik application.terminate of close doe

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Ik denk dat het aan cooltray ligt, want ik heb ook een programma die cooltray gebruikt en die blokkeert ook het afsluiten van windows. Dus het ligt denk ik aan cooltray.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Cheater schreef op 04 november 2003 @ 13:52:
Als men properties of stukken code wil zien, roep maar even

Het programma sluit gewoon netjes af als ik application.terminate of close doe
Of je lees m'n post: [rml]curry684 in "[ Delphi 5] Programma blokkeert sluiten v..."[/rml] :/

Professionele website nodig?


  • martijn_brinkers
  • Registratie: November 2001
  • Laatst online: 31-10-2025
probeer in je main form (snippet uit mn code)

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    procedure WMQueryEndSession( var Msg : TMessage ); message WM_QUERYENDSESSION;
    procedure WMEndSession( var Msg : TWMEndSession ); message WM_ENDSESSION;

    procedure FormCloseQuery( Sender : TObject; var CanClose : Boolean );


(* called by windows when Windows is shutting down *)
procedure TIzemailMainFrm.WMQueryEndSession( var Msg : TMessage );
begin
  (* Tell CloseQuery it's a shutdown operation *)
  FCanClose := True;
  inherited;
end;

(*
 * It is possible for the shutdown to be aborted by another application.
 * So you need to watch for the WM_ENDSESSION message that gets sent telling
 * you if you really are going to shut down
*)
procedure TIzemailMainFrm.WMEndSession( var Msg : TWMEndSession );
begin
  (* Clear the flag if the shutdown was aborted *)
  FCanClose := Msg.EndSession;
  inherited;
end;

{**
  Called by the VCL asking if the main form can be closed. If not ie FCanClose
  is false, Izemail will be minimized
}
procedure TIzemailMainFrm.FormCloseQuery(
        Sender       : TObject;
        var CanClose : Boolean );
begin
  CanClose := FCanClose;

  if not CanClose then Application.Minimize;
end;


Ik denk dat je het CloseQuery event afvangt maar je moet dan wel zorgen dat het goed gaat als windows afsluit.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 14:22

Tomatoman

Fulltime prutser

WM_QUERYENDSESSION werkt een beetje verschillend op Windows NT/2000/XP en Windows 9x/Me.
  • In Win9x ontvangt iedere applicatie een WM_QUERYENDSESSION message. Als tenminste één applicatie False retourneert, wordt het afsluiten van de pc afgebroken en draait Windows vrolijk door. Zo niet, dan ontvangt iedere applicatie een WM_ENDSESSION message en sluit Windows vervolgens af.
  • In WinNT ontvangt de laatst geopende app als eerste een WM_QUERYENDSESSION message. Als de applicatie True retourneert, krijgt die applicatie een WM_ENDSESSION message en vervolgt Windows de shutdownproceduredoor de volgende applicatie een WM_QUERYENDSESSION message te sturen, net zolang totdat ze allemaal True hebben geretourneerd of de shutdownprocedure wordt onderbroken doordat een applicatie False retourneert in reactie op WM_QUERYENDSESSION.

Een goede grap mag vrienden kosten.


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 20-08 20:59
OK , dat is netjes gezegd maar mijn programma is niks anders dan een andere, ik doe niets raars met de WM_ messages ik vang ze niet op, ik blokkeer niets dus ik verwacht dat het aan het component ligt, dat er toch wel heel verzorgd uit ziet...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Cheater schreef op 05 november 2003 @ 00:23:
[...]


OK , dat is netjes gezegd maar mijn programma is niks anders dan een andere, ik doe niets raars met de WM_ messages ik vang ze niet op, ik blokkeer niets dus ik verwacht dat het aan het component ligt, dat er toch wel heel verzorgd uit ziet...
Zoals we dus zeggen doet Cooltray dat :z

Professionele website nodig?

Pagina: 1