UTILISER LES TEMPS MORTS D'UNE APPLICATION (D1..D6)
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 2013
-
24 mai 2002 à 23:13
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDerniè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.
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 21 mai 2005 à 10:12
«Application.OnIdle:=AppIdle» sur un évènement OnActivate est horrible !! OnCreate please !
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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és962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 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és962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 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.
21 mai 2005 à 10:12
24 mai 2002 à 23:13
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;
24 mai 2002 à 22:45
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.
24 mai 2002 à 22:40