Toon posts:

[Delphi] save file -> als er wordt uitgelogd

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb een programmatje gemaakt met delphi, deze registreerd alle applicaties die er geRunt worden.

het programma start op via 'Opstarten',
en als het programma beëindigd wordt bewaart hij de data in een TEXTFILE.

dit werkt allemaal zoals het moet... maar:

als ik het programma heb draaien, en ik log uit (of sluit af) dan wordt het programma beëindigd zonder te saven...
en dat is niet de bedoeling. Weet iemand een stukje code (of een link) waar ik wat aan heb?

omschrijving: 't is net zoals bij Word (ofzo) dat als je uitlogt komt er een 'save changes'-dialog en daar wacht windows (XP) nog 10 seconden op... voordat hij echt afgesloten wordt.

  • The_Sentinel
  • Registratie: December 2000
  • Niet online
Kan je je Save procedure niet koppelen aan de 'OnClose' Event?

WTF! Hebben we nu alweer koffiepauze!?


Verwijderd

onclose en onclosequery van je form

Verwijderd

Topicstarter
als ik de Save procedure aan de Onclose hang dan doet hij het dus niet.
en ook als ik hem aan de FormDestroy hang, doet hij het ook neit.

Wat is OnCloseQuery ?? die kan ik nergens vinden...

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:14
Op woensdag 30 januari 2002 20:27 schreef MPdave het volgende:

Wat is OnCloseQuery ?? die kan ik nergens vinden...
OnCloseQuery is een event van uw form. Die event wordt getriggerd vlak voordat de OnClose optreedt.

Hoe heb je die Save - code aan uw OnClose gelinked?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Op woensdag 30 januari 2002 20:29 schreef whoami het volgende:

[..]

OnCloseQuery is een event van uw form. Die event wordt getriggerd vlak voordat de OnClose optreedt.

Hoe heb je die Save - code aan uw OnClose gelinked?
ja OnCloseQuery heb ik nu gevonden (form1.onclosequery) ...

Die Save heb ik zo gekoppeld:

bij de Events van m'n form staat: OnClose | oncloseproc
en dan dus wordt "oncloseproc" getriggert als de form wordt "geClosed" (en in "oncloseproc" staat de save routine)

... ik heb in help gekeken en daar stond dat OnCloseQuery de eigenschapen van de form kan veranderen (sluiten of niet) ik denk dat dat is wat ik zoek, maar hoe gebruik ik de OnCloseQuery (ik zie hem niet in de eventlist van m'n form staan)

ps: je hoeft geen u te zeggen hoor :P

Verwijderd

Topicstarter
ik denk dat ik er uit ben, hier heb ik denk ik gevonden wat ik nodig heb.

ik had op die site ook al eerder gezocht, maar toen wist ik niet dat ik op 'OnCloseQuery' moest zoeken .

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:14
Op woensdag 30 januari 2002 20:35 schreef MPdave het volgende:

[..]


... ik heb in help gekeken en daar stond dat OnCloseQuery de eigenschapen van de form kan veranderen (sluiten of niet) ik denk dat dat is wat ik zoek, maar hoe gebruik ik de OnCloseQuery (ik zie hem niet in de eventlist van m'n form staan)
'k denk dat je dan niet goed gekeken hebt...

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:14
Op woensdag 30 januari 2002 20:35 schreef MPdave het volgende:

[..]

ja OnCloseQuery heb ik nu gevonden (form1.onclosequery) ...

Die Save heb ik zo gekoppeld:

bij de Events van m'n form staat: OnClose | oncloseproc
en dan dus wordt "oncloseproc" getriggert als de form wordt "geClosed" (en in "oncloseproc" staat de save routine)
Hmm, het moet dan zijn dat die OnClose event niet getriggerd wordt ofzo bij het afsluiten van Windows? Nochtans gaat Windows toch alle open applicaties gaan afsluiten?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Op woensdag 30 januari 2002 20:47 schreef whoami het volgende:

[..]

'k denk dat je dan niet goed gekeken hebt...
ja idd, ik had niet goed gekeken, ik heb hem nu gevonden, en de save in de onCloseQuery gezet, en hij doet het nu wel :P

bedankt :)

Verwijderd

Topicstarter
Op woensdag 30 januari 2002 20:48 schreef whoami het volgende:

[..]

Hmm, het moet dan zijn dat die OnClose event niet getriggerd wordt ofzo bij het afsluiten van Windows? Nochtans gaat Windows toch alle open applicaties gaan afsluiten?
ja... ehm: "Don't ask me" .. ik zou zelf ook denken dat hij het 'zou moeten doen' met OnClose, maar hij deed het niet. Met OnCloseQuery nu wel :)

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 00:04

Tomatoman

Fulltime prutser

Was het maar zo simpel... :'(

Zodra je met OnCloseQuery het sluiten van je applicatie afbreekt, hangt het van je platform af wat er gebeurt.

1) Windows 9x/ME: Jouw applicatie wordt niet gesloten, alle andere apps wel. Het systeem sluit niet af (want jouw app weigerde af te sluiten).

2) Windows 2000: Alle applicaties worden op rij afgesloten. Zodra een app weigert af te sluiten, wordt het afsluiten van het systeem afgebroken. Alle applicaties die nog niet zijn afgesloten, draaien gewoon door.

Bij uitloggen van de huidige gebruiker zonder het systeem af te sluiten/ te rebooten, worden alle applicaties afgesloten, behalve services. Services draaien altijd door en onderbreken het afsluiten niet.

Een goede grap mag vrienden kosten.


Verwijderd

De juiste manier om dit te doen is m.b.v. een Windows Message handler:

Probeer onderstaande code maar eens en je zult zien wat er gebeurd:
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
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
  private
    procedure QueryEndSession(var Message: TWMQueryEndSession); message WM_QUERYENDSESSION;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{ TForm1 }

procedure TForm1.QueryEndSession(var Message: TWMQueryEndSession);
begin
  Self.Caption:='Windows wilde afsluiten, gaat niet door';
  Message.Result := 0;
end;

end.

Compileer deze app. en sluit Delphi af. Start de zojuist gebuilde app. en sluit Windows af. Je zult zien dat Windows niet afsluit (andere openstaande programma's wel).
Zodra je de Message.Result := 0; vervangt door Message.Result := 1; wordt Windows (en je applicatie) wel afgesloten.

Afhankelijk van het resultaat van bewaren kun je dus besluiten om Windows wel of niet af te sluiten!

Verwijderd

TCustomForm vuurt na ontvangst van een WM_QUERYENDSESSION automatisch het OnCloseQuery event af.

Verwijderd

Topicstarter
ik heb em getest op windows 98SE en Windows XP, en op allebij doet hij 't nu goed. zo ongeveer:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Const 
  Max = 1024;

Var
  Lijst : Array [0..max] of String;

Procedure Tform1.OnCloseQuery(Sender: Tobject; CanClose: Boolean);
Var
  S: String;
  F: Textfile;
  I: Integer;
begin
  S:='C:\file.txt';
  AssignFile(F,S);
  Rewrite(S);
  for I:=0 to max do
    Writeln(F,Lijst[I]);
  CloseFile(F);
end;

  • RickN
  • Registratie: December 2001
  • Laatst online: 14-06-2025
10-tje wedden dat ie crashed? >:)

He who knows only his own side of the case knows little of that.


Verwijderd

Topicstarter
Op vrijdag 01 februari 2002 18:46 schreef RickN het volgende:
10-tje wedden dat ie crashed? >:)
waar heb je het over?

Verwijderd

Op donderdag 31 januari 2002 15:01 schreef DiFool het volgende:
TCustomForm vuurt na ontvangst van een WM_QUERYENDSESSION automatisch het OnCloseQuery event af.
Ik heb dit geprobeerd maar gaat niet altijd goed. Zelf de boodschap ontvangen/verwerken wel.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Zelfde probleem had ik met HotTopic, de oplossing was toen OnCloseQuery

"The shell stopped unexpectedly and Explorer.exe was restarted."

Pagina: 1