Savoir si le form est la fenêtre active [Résolu]

Signaler
Messages postés
157
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
14 avril 2009
-
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
-
Bonjours, je voudrai savoir comment faire pour savoir si la form de mon application est activée ou pas (si c'est la feneitre active ou si elle est en arriere plan)

...

13 réponses

Messages postés
83
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
9 décembre 2010

essaie la propriété de la fiche

if form.Active=true
begin
end else
begin
end;
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
voir onactivate et on desativate

@+

jlen
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
29
@ahmed12 : je ne connais pas de propriété "Active" pour les fiches TForm.
D'autre part, ce n'est pas utile de faire un test d'égalité avec des booléens.
If MonBooleen then ...
Ca suffit largement.

Flo160fr : tu peux aussi utiliser la propriété ActiveForm de l'objet Screen et la comparer à une référence de fiche quelconque de l'application.

La solution proposée par Jlen100 est surement la plus adaptée avec l'utilisation des évènements OnActivate et OnDeactivate de la fiche.

<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
29
Par fiche active, il faut comprendre la fiche active au sein de l'application !
Si tu cliques ailleurs, sur le bureau Windows par exemple, alors ce n'est pas ce qu'il te faut.
Tu dois utiliser l'objet Application.

Dans ce cas, dans ta fiche principale, tu déclares deux méthodes comme ceci :
private
{ D&#233;clarations priv&#233;es }
procedure AppActivate(Sender: TObject);
    procedure AppDeactivate(Sender: TObject);

Dans ces deux méthodes, tu mets le code que tu veux :

procedure TForm1.AppActivate(Sender: TObject);
begin
  Label1.Caption :=  'Application active';
 end ;

procedure TForm1.AppDeactivate(Sender: TObject);
begin
  Label1.Caption : = 'Application d&#233;sactiv&#233;e';
end;

Enfin, lorsque la fiche est créée, tu affectes ces méthodes aux évènements de l'application :

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnActivate :=  AppActivate;
  Application.OnDeactivate := AppDeactivate;
 end ;

Selon ta version de Delphi, tu peux aussi utiliser le composant TApplicationEvents (onglet Supplément, D6+) si cela te semble plus facile et surcharger les méthodes OnActivate et OnDeActivate.


<HR color =#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
157
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
14 avril 2009

Au passage, saurai tu si il y aurai un evenement de la form lor du passage de l'arriere plan à l'avant plan et inversement

...
Messages postés
3819
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
2 novembre 2020
34
Salut,
tu peux aussi utiliser ceci :

procedure TForm1.Button1Click(Sender: TObject); // où tout autre procédure
beginIf Screen.ActiveForm Form1 Then Label1.Caption : 'Ouiiiiiiiiiiiiiii';
end;



@+
Cirec
Messages postés
83
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
9 décembre 2010

[mailto:{@ahmed12 delphiprog] : je ne connais pas de propriété "Active" pour les fiches TForm.
D'autre part, ce n'est pas utile de faire un test d'égalité avec des booléens.
If MonBooleen then ...
Ca suffit largement.}


1-si tu connais pas cette propriété c'est le momon pour la connaître vas faire un tour sur l’aide de delphi il pourrait tu convaincre.


2-[concernant le test d’égaleté], ponce toi sur les débutants.
Messages postés
157
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
14 avril 2009

le seul problème, c'est que avec BorderStyle := bsNone, l'événement OnDesactivate ne fonctionne pas.. .

...
Messages postés
157
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
14 avril 2009

ok... merci beaucoup à tout le monde
Messages postés
3819
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
2 novembre 2020
34
@ DelphiProg
Extrait de l'aide Delphi :

TCustomForm.Active Propriété
<DESCRSHORT id= descrShort xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Indique si la fiche détient la focalisation. </DESCRSHORT>

Classe TCustomForm
Syntaxe

[Delphi] public property Active: Boolean read FActive;

Description <DESCRLONG id =descrLong xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Utilisez la propriété Active

pour déterminer si la fiche détient la focalisation. La fiche active reçoit toutes les entrées clavier. Si elle a une barre de titre, elle est dessinée en utilisant les couleurs actives spécifiées dans le volet Contrôle. Si Active

vaut true, la fiche détient la focalisation ; si Active

vaut false, la fiche n'a pas la focalisation. </DESCRLONG>



@+
Cirec
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
29
Merci beaucoup Cirec
Grâce à vous, j'ai découvert cette propriété au bout de 10 ans de pratique de Delphi. Je me disais aussi qu'il me manquait quelques chose...
Disons que je préfére utiliser ActiveForm car cette propriété est en lecture ET écriture.
A chacun ses préférences.
<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
83
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
9 décembre 2010

et a mois ne oublie pas ahmed12
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
29
Non, Ahmed12, je ne t'oublie pas, rassure-toi lol


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.