vinduerne er lukkede

, hvordan processen wm_endsession m.v., bidragyder: hallvard vassbotn, {,, i en tidligere sendt med emnet "[delphi] mener det insekt, når lukning, vinduer??? "bimmer @ ibm. netto (pr. bakkendorff) skriver:,, > når man har en delphi anvendelse, og du lukker vinduerne, > (ikke tæt på din app første), har ingen af dine destructors kaldes!!!.,,, jeg troede, at problemet var programmør er kode, men så indså jeg, at det virkelig er et insekt, eller i det mindste en doven "træk".,,, det problem synes at være, at når du lukker vinduerne, det vil sende et budskab til alle wm_queryendsession løber på vinduer.dette håndteres og behandles korrekt i tform objekt i vcl.,,, så vi antager, at alle ansøgninger angav, at det var okay at lukke vinduer vil sende wm_endsession budskaber til alle vinduer.dette budskab er ikke behandlet i vcl.ansøgningen er bragt ned med et brag.,,, ingen vinduer er lukket, ikke ødelægger ringede og ingen udgang procedurer.,,, løsningen er at klare den wm_endsession besked til dig selv.der er mange måder at håndtere meddelelser i delphi, men den eneste pålidelige måde at håndtere wm_endsession er at anvende hookwindow udbringningsmetode.,,, i meddelelsen kontaktperson, skal de kontrollere, om meddelelsen er en wm_endsession.hvis det er tilfældet, vil vi lukke anvendelse.vi kunne have kaldt det tætte metode for de vigtigste vindue, men windows api - dokumentation, at systemet går måske ned når som helst efter at vende tilbage fra wm_endsession, og en udstationeret wm_quit budskab kan ikke kommer til anvendelse, er løsningen blot at kalde holdt i stedet.dette vil kræve alle registred exit - procedurer, herunder dem i kontrol og db enheder.de vil fri anvendelse og skærm genstande og tage bde ned korrekt.,,, med et simpelt eksempel:,,,,,,,,,,,,,, tst2u enhed; interface, anvender, sysutils, wintypes, winprocs, beskeder, klasser, grafik, kontrol, formularer, dialoger, net, dbgrids, db, dbtables,,,,,,,,, tform1 = klasse (tform), datasource1: tdatasource;,, i figur 1: tabel;,, dbgrid1: tdbgrid;,, procedure formcreate (afsender: tobject), private, (private erklæringer), funktion hookproc (var tmessage besked:): boolean,,, offentlige, {offentlige erklæringer},,,,,, var, form1: tform1;,,, gennemførelse,,, ($r *. dfm},,,, flagfilename = konstant, c: \\ flag. fil ",,,,,,, createflagfile procedure;,, var,, F: System.Text;,, begin,, System.Assign(F, FlagFileName);,, System.Rewrite(F);,, Writeln(F, 'This is a dummy flag file');,, System.Close(F);,, end;,,, procedure KillFlagFile;,, var,, F: File;,, begin,, System.Assign(F, FlagFileName);,, System.Erase(F);,, end;,,, procedure MyExitProc; far;,, begin,, KillFlagFile;,, end;,,, procedure TForm1.FormCreate(Sender: TObject);,, begin,, Application.HookMainWindow(HookProc);,, end;,,, function TForm1.HookProc(var Message: TMessage): boolean;,, begin,, Result := false;,, if Message.Msg = WM_EndSession then,, begin,, if WordBool(Message.wParam) then,, begin,, { Windows is closing down - clean up!!), (dette bør gennemføre alle exitprocs, lukker vinduerne og kalde destructors.), holdt; (det virker!},,, (dette bør lukke tingene ordentligt, men har vi tid nok til at klare enhver lagde beskeder, før vinduer, er allerede nede?dette vil resultere i en postquitmessage som, aldrig kommer!}, {tæt;} {den virker ikke altid - undgå det},,,,,,,,,,,,,,, initialization, createflagfile; addexitproc (myexitproc);,,.,,, denne enhed, viser, at afgangen procedurer kaldes ved lukning af app - normalt når at lukke vinduer og ved hjælp af hookmainwindow.uden hookmainwindow kalder, udgangen proc, vil ikke blive kaldt.dette er specielt vigtigt for db ansøgninger.uden stop, lck filer, ikke vil blive slettet, puffere ikke skylles, ændringer udstationerede osv.,,



Previous:
Next Page: