LOGISLEEP : PERMET DE FERMER LA SESSION, D'ÉTEINDRE OU DE REDÉMARRER VOTRE ORDIN

Signaler
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
-
Messages postés
17
Date d'inscription
mercredi 28 juillet 2004
Statut
Membre
Dernière intervention
6 février 2014
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39572-logisleep-permet-de-fermer-la-session-d-eteindre-ou-de-redemarrer-votre-ordinateur-dans-un-temps-ou-une-heure-donnee

Messages postés
17
Date d'inscription
mercredi 28 juillet 2004
Statut
Membre
Dernière intervention
6 février 2014

Merci pour cette source.

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
Messages postés
400
Date d'inscription
samedi 6 août 2005
Statut
Membre
Dernière intervention
11 février 2016
1
@Cirec : j'étais persuadé que l'integer pour halt était un interval de temps ^^. En traduction j'ai dis plein de boulettes sur ce thread. Comme quoi j'ai encore plein de chose à apprendre ce qui me rassure.

Mais bon c'est resté convivial c'est l'essentiel :).

@+
Messages postés
400
Date d'inscription
samedi 6 août 2005
Statut
Membre
Dernière intervention
11 février 2016
1
@Julio : Le FranckyForum n'a rien avoir avec le developpement donc promis je ne parle pas de Close, Application.terminate ou halt : promis ^^. C'est juste un site de recherche d'emplois dans le dommaine scientifique voili voilou.

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
Messages postés
10
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
26 mars 2007

Var InstanceApplication : TMaMethodeDetectionMultiInstance;

// 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.
Afficher les 24 commentaires