- Delphi / Pascal : Logisleep : permet de fermer la session, d'éteindre ou de redémarrer
- Visual Basic / VB.NET : Eteindre l'ordinateur, fermer la session automatiquement à une heure
- Eteindre ou fermer une session a une heure précise
- C / C++ / C++.NET : Fermer une session après un délai donné. - CodeS SourceS
- Forcer l'utilisateur à fermer sa session avant de quitter
Je l'ai modifié un peu et je vais pouvoir l'intégrer à mon projet.
sinon perso, j'ai toujours utilisé Application.Terminate c'est que j'ai appris en cours pour fermer l'application.
encore merci, by.
Pierre-Emmanuel
Mais bon c'est resté convivial c'est l'essentiel :).
@+
Allez zou je dois faire la page d'index en html : que halt(0) soit avec vous .... Aie qui a lancé une tomate ? Arrr c'est Qoprek : attention toi lol
// Garantir l'accès aux libérations dans les cas des exceptions sur Finalization (par exemple: http://qc.borland.com/wc/qcmain.aspx?da=179)
Procedure DoneApplication;
Begin
With Application Do Begin
If Handle <> 0 then ShowOwnedPopups(Handle, False);
ShowHint := False;
Destroying;
DestroyComponents;
End;
End;
Begin
// Vérifier que l'on ait déja pas une instance de l'application en mémoire
InstanceApplication := TMaMethodeDetectionMultiInstance.Create(Application);
// Si oui alors on sort a ce moment pour n'en laisser qu'une en mémoire
If InstanceApplication.InstanceDejaExistante Then Exit;
// On encadre le fonctionnement global pour contrôler toutes les libérations
Try
// On encadre le fonctionnement global pour intercepter au plus bas niveau les exceptions afin de les tracer si l'objet de trace est déjà/encore disponible
Try
Application.Initialize;
Application.Title := 'SlideShow';
// Création de l'objet de trace ici et non associé à une fiche afin de n'en pas être tributaire
MaTrace:=TMaMethodeDeTrace.CreerAujourdhui(Application,'SlideShow');
// Créations des fiches de l'application
Application.CreateForm(TfrmMain, frmMain);
// ... autres fiches éventuellement
// Exécution principale
Application.Run;
Except
On E : Exception Do Begin
// Objet trace disponible ? alors on peut tracer ...
If Assigned(MaTrace) Then Begin
MaTrace.Ecrire('Exception occured while running application on "%s": "%s"',[E.ClassName,E.Message],0);
End;
End;
End;
Finally
// Libération des fiches et objets annexes
Try
// Pour toutes les fiches n'étant pas la fiche principale
// ....
// If Assigned(FormAutre) Then Begin FormAutre.Free;FormAutre := Nil; End;
// ...
// On libère le journal en dernier car c'est lui qui a la responsabilité des traces
MaTrace.Free;
// Ce dernier Application.ProcessMEssages est absolument nécessaire pour traiter les derniers messages en suspens
// notament les messages du thread de dialogue inter processus si on gère ce genre de mécanisme dans son application
Application.ProcessMessages;
Except
On E : Exception Do Begin
// Objet trace disponible ? alors on peut tracer ...
If Assigned(MaTrace) Then Begin
MaTrace.Ecrire('Exception occured while ending application: "%s"',[E.Message],0);
End;
End;
End;
// Maintenant on libère l'application. Cette libération est faite manuellement
// car il se peut que des exceptions aient laissé l'objet application dans un
// état instable (pas accès a la finalization de forms.pas).
// On encadre donc cette libération par des try... except vides afin d'éviter les
// runtime error 216
Try
DoneApplication;
// Si DoneApplication génère une exception alors on ne tente même pas le free... tant pis !
Application.Free;
Except
// Une première exception a pu laisser Application dans un état instable.
// On ne tient donc pas compte des exceptions qui peuvent apparaître ici
End;
// Remise à nil afin d'éviter le traitement du free dans le source forms.pas
Application := Nil;
End;
End.
Voyons avec un .dpr classique, par exemple ton programme de SlideShow, la différence de sécurisation est quand même visible, même si tu ne gère qu'une fiche, non ? Bon il est vrai que ce genre de blindage est surtout utile sur des gros applicatifs avec plein d'objets crées dans le dpr ...
begin
Application.Initialize;
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
end.
----->
Procedure DoneApplication;
Begin
With Application Do Begin
If Handle <> 0 then ShowOwnedPopups(Handle, False);
ShowHint := False;
Destroying;
DestroyComponents;
End;
End;
Begin
InstanceApplication := TMaMethodeDetectionMultiInstance.Create(Application);
If InstanceApplication.InstanceDejaExistante Then Exit;
Try
Try
Application.Initialize;
Application.Title := 'SlideShow';
MaTrace := TMaMethodeDeTrace.CreerAujourdhui(Application,'SlideShow');
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
Except
On E : Exception Do
If Assigned(MaTrace) Then MaTrace.Ecrire('Exception durant l''exécution de SlideShow sur "%s": "%s"',[E.ClassName,E.Message],0);
End;
Finally
Try
MaTrace.Free;
DoneApplication;
Application.Free;
Except
End;
Application := Nil;
End;
End.