UTILISER LES TEMPS MORTS D'UNE APPLICATION (D1..D6)

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 24 mai 2002 à 23:13
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 - 21 mai 2005 à 10:12
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/11937-utiliser-les-temps-morts-d-une-application-d1-d6

cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
21 mai 2005 à 10:12
«Application.OnIdle:=AppIdle» sur un évènement OnActivate est horrible !! OnCreate please !
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
24 mai 2002 à 23:13
Merci de ces précisions, Nono40.
Cet exempe se voulait purement démonstratif et je n'ai pas voulu le surcharger de façon à ne pas créer de confusions.
En utilisant la technique de Nono40, on peut facilement interrompre les traitements en positionnant à False une variable booléenne qui serait globale au niveau de l'unité.
var
Stop : boolean;

procedure TForm1.Checkbox1click(Sender: TObject);
begin
Stop := CheckBox1.Checked;
end;

procedure TForm1.AppIdle(Sender: TObject; var Done: Boolean);
begin
Done := Stop;
if not done then
//traitement
end;
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
24 mai 2002 à 22:45
Ah si, j'oubliais : si dans le OnIdle ( quel que soit la méthode ) vous affichez un message, alors le OnIdle est appelé de nouveau au début car l'appli est de nouveau inactive. Si vous ne prenez pas garde, alors l'application va planter très vite. Vous devez vérifier vous-même la non réentrance de l'évènement :

Var IdleEnCours:Boolean;
procedure TForm1.AppIdle(Sender: TObject; var Done: Boolean);
begin
If IdleEnCours then Exit;
IdleEnCours:=True;
Try
// Ici votre prog...
Finally
IdleEnCours:=False;
End;
Done :=False;
end;

Nono.
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
24 mai 2002 à 22:40
Pour les possesseurs de Delphi 5 ou 6, vous pouvez aussi utilisez le composant TApplicationEvents avec son évènement OnIdle. Pour les autres : suivez la bonne méthode de DelphiProg... elle fonctionne depuis Delphi 1.
Rejoignez-nous