Comment tester si une fenêtre existe? [Résolu]

jlmcom 57 Messages postés mercredi 4 août 2004Date d'inscription 3 décembre 2004 Dernière intervention - 1 déc. 2004 à 09:57 - Dernière réponse : cs_grandvizir 1237 Messages postés samedi 8 novembre 2003Date d'inscription 3 septembre 2006 Dernière intervention
- 3 déc. 2004 à 18:53
Bonjour,

Je ne sais plus comment on fait enchaîner des fenêtres différentes mais qui ne doivent se voir que lorsque les opérations sur la fenêtre précédente sont terminées, donc en principe à sa fermeture...

Je pense que cela revient à tester l'existence d'un handle de fenêtre.

Qu'elqu'un peut-il me rappeler un boiut de code permettant de gérer cela?

remarque : Les opérations de création des fenêtres se font depuis la méthode activate de la fenêtre principale.

procedure mainform.Onactivate
begin
Si test_OK => création forme fenêtre 1
puis création forme fenêtre 2
end;

Merci d'avance!

jlmcom :)
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 1 déc. 2004 à 12:12
3
Merci
Tu peux effectivement tester par le Handle...

Si la fenêtre existe, son handle sera différent de 0, donc :
procedure TestFenetreExiste;
var
H : THandle;
begin
H := FindWindow(nil,'Nom de la fenêtre');
if H = 0 then ShowMessage('Existe pas')
else ShowMessage('Existe');
end;


@+
Bonne Prog'
Nico

N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient ! :)

Merci ni69 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de ni69
cs_grandvizir 1237 Messages postés samedi 8 novembre 2003Date d'inscription 3 septembre 2006 Dernière intervention - 1 déc. 2004 à 17:53
0
Merci
Dote-toi de Spy++... c'est très utile. Ou de WinSpector, mais chez moi, il rame terriblement.

Je suis pas sûr. Essayons ça, tu me diras:
if LaTFormATester=nil then ShowMessage('Non active')
else ShowMessage('En mémoire');

Pour créer les fenêtres, ouvre le fichier DPR.

===========
Validez les réponses si ok...

ViewVite : HTML - ZIP
Commenter la réponse de cs_grandvizir
0
Merci
merci ni69

Après test rapide de ta solution, quelque chose m'échappe. en effet, si je teste H en pas à pas, la valeur est nulle alors que la fenêtre est créee.
Par contre, lorsque sur l'instruction suivante (création de la deuxième fenêtre) je teste H, elle n'est plus nulle, alors que je souhaiterai qu'elle soit nulle pour la création de la deuxième fenêtre.

H := FindWindow(nil,'Nom fiche 1');
If H = 0 then Création fiche 1 else MemH :=True;
H := FindWindow(nil,'Nom fiche 2');
If MemH and H = 0 then Création fiche 2

J'inclut cela dans une boucle repeat until fin traitement, qui teste la fin des opérations sur les fiches. peut-être faut-il que je déclare des variables booléennes globales qui seront mises à 1 lors de la fermeture de chaque fenêtre! car MemH=true alors que le traitement de la fiche n'est pas commencé.

Qu'en pensez-vous? Qu'elles sont les règles de l'art en la matière, je n'avais jamais à gérer ce problème...

Delphi, delphi quand je te tiens! Merci d'avance, si vous avez une solution.

jlmcom :)
Commenter la réponse de
jlmcom 57 Messages postés mercredi 4 août 2004Date d'inscription 3 décembre 2004 Dernière intervention - 2 déc. 2004 à 15:15
0
Merci
Bonjour grandVisir

Excuse moi, il y a des bizareries dans ma cambrousse en ce moment et ton message n'apparazissait pas à l'écran.

Je viens d'en prendre connaissance.

1. Bon, pour Winspector et spy++, je ne sais pas ce que c'est. Peux-tu m'en dire plus! Il me semble que winspetor permet de suivre à la trace tout ce que gère windows à la trace, c'est cela?
Où le trouve t-on?

2. Oui, l'instruction fonctionne, mais il semble que j'ai un autre problème, car la fiche est déjà créée avant même que j'en donne l'ordre. Pourtant, elle n'est pas en autocrée dans le projet.

Il faut donc que je réétudie la procédure de création de la fiche principale qui est assez complexe. Il y a peut-être un ordre de création qui trazine dans une procédure.


Merci pour vos lumières! Dès que j'ai une idée qui marche je vous en fait part.

jlmcom :)
Commenter la réponse de jlmcom
jlmcom 57 Messages postés mercredi 4 août 2004Date d'inscription 3 décembre 2004 Dernière intervention - 3 déc. 2004 à 12:28
0
Merci
Bonjour,

Voici la solution que j'ai retenu pour l'instant. Je ne la trouve pas satisfaisante, j'aurai préférer me passer de Flag à gérer, mais c'est ce que j'ai trouvé. Si vous avez mieux n'hésitez pas !

Deux booléens de vérification des opérations ayant eu lieu sur les fiches sont mis à false dans Create de la Fiche principale et mis à true dans la fermeture des fiches en question..

If not Traitefiche1 and (Tform1<>nil) 
then (Tform1.Create(Application).show 
else if not Traitefiche2 and (Tform2<>nil) then (Tform2.Create(Application).show 


jlmcom :)
Commenter la réponse de jlmcom
cs_grandvizir 1237 Messages postés samedi 8 novembre 2003Date d'inscription 3 septembre 2006 Dernière intervention - 3 déc. 2004 à 18:53
0
Merci
Si tu n'as pas vraiment la réponse, décoche Ni69. Ca remettra en blanc la question. Une question verte non résolue n'a pas d'avenir.

Je fais comme si tu n'avais pas posté le message précédent:
==============

J'ai eu Spy++ avec le pack VisualC++ 6 IE. WinSpector se trouve sur le site .com du même nom. Ca permet de trouver les handles et les classes, de suivre des messages, trouver des styles, d'avoir une idée sur le langage qui a programmé l'application que l'on scrute... etc. Mon choix est Spy++, mais il y aura tjs des avis contraires. De toute façon, les deux sont très utiles et suffisants.

Sinon, essaye encore un truc. Si ça marche pas, essaye avec 0, mais ça m'étonnerait.

[code]if LaTFormeATester.Handle=-1 then PasCréée else Créée;[code]
Essaye de nous donner le code entier de ton prog, épurés des codes inutiles sans se tromper. Car c'est vraiment étrange. Une fenêtre ne se crée pas par miracle.

Un .Hide ne détruit pas une fenêtre. Tjs bon à préciser :)

===========
Validez les réponses si ok...

ViewVite : HTML - ZIP
Commenter la réponse de cs_grandvizir

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.