Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RECHERCHER UNE FENETRE PAR SA CLASSE ET UNE PARTIE DE SON TITRE


Information sur la source

Description

Cliquez pour voir la capture en taille normale
Cette source vient en réponse au message
http://www.delphifr.com/infomsg_HANDLE-FENETRE-PRECISE_1081910.aspx

Il est possible que la recherche d'une instance de fenêtre par sa classe ne fonctionne pas si plusieurs fenêtres ont la même classe, ou si il y a plusieurs instances de lancées.

Les intérêts de cette source sont:
- l'utilisation de FindWindowEx
- la lecture du titre d'une fenêtre par GetWindowText
- l'envoi/réception de message (par PostMessage)


Remarque : Si on lance l'exécution depuis Delphi, on retrouve aussi l'instance en design dans l'IDE !
 

Conclusion

Voici une source assez simpliste mais qui permet de comprendre facilement (je l'espère) le principe d'une recherche de fenêtre (au TopLevel).
Si vous voulez que je pousse plus la source, dites le moi (rechercher dans les fenêtres enfants, ...)
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Delphiprog le 28/02/2008 23:37:17 administrateur CS 7/10

"Si on lance l'exécution depuis Delphi, on retrouve aussi l'instance en design dans l'IDE !"
Pour contourner cela, il suffit de lui affecter un titre au moment du démarrage de l'application, dans le OnCreate de la fiche principale, par exemple. Evidemment, si tu démarres une autre instance de l'exécutable, ça ne va pas résoudre le problème.

NB : pas besoin de mettre des Self un peu partout pour désigner l'instance actuelle de la fiche (Self.Handle, Self.Caption, etc).

J'ai bien aimé l'utilisation de IfThen pas souvent rencontrée sur ce site. Mais je crois me souvenir qu'elle n'est disponible que depuis delphi 6. Pauvre Japee, il va devoir adapter le code... :)

signaler à un administrateur
Commentaire de Guillemouze le 29/02/2008 09:50:27

merci pour le commentaire.

2 remarques :
- "Pour contourner cela, il suffit de lui affecter un titre au moment du démarrage de l'application": c'est fait, mais la recherche par classe me retourne obligatoirement l'instance de l'IDE
- J'ai peut être abusé de self, mais je trouve ca plus confortable quand on utilise des propriétés d'objets dont on ne sait pas si elles appartiennent a self ou si c'est une variable locale

Désolé Japee, je te ferai une version en assembleur prochainement ;)
peut-on savoir dans quelles versions de Delphi on été ajoutées les fonctions?

signaler à un administrateur
Commentaire de yannfrance le 04/03/2008 16:23:28 10/10

Merci beaucoup, cette source est une mine d'or.
Beaucoup disaient qu'il était impossible de rechercher un handle avec une seul partie de text de la barre de titre.
Tres content, merci beaucoup...
Ou peut t'on trouver les informations necessaires pour réaliser des sources comme celui-ci ?

signaler à un administrateur
Commentaire de Guillemouze le 04/03/2008 19:21:46

merci yannfrance
toutes les infos propres a la manipulation de windows se trouvent dans ... l'aide de la sdk de windows (dans le menu "aide->windows SDK" sur mon D7).
mais une partie est déjà encapsulée dans des fonctions delphi ... donc dans l'aide de delphi.

sinon, MSDN reste une valeur sure, mais un peu galère pour y faire des recherches des fois.

signaler à un administrateur
Commentaire de hfr11 le 30/04/2008 11:00:57

Bonjour, suites à tes propos dans la rubrique "Conclusions" :
Oui, il serait intéressant d'approfondir tout cela... Je suis actuellement confronté à ce genre de problématique dans le développement d'utilitaires orientés "gestion des machines sur le réseau".
J'ai, dans mon application, une petite fenêtre que nous appellerons "tableau de contrôle" où sont créés, dynamiquement, des boutons permettant d'activer, de fermer, d'actualiser, etc..., des fenêtres dynamiques correspondant chacune à une machine différente... Comment faire de manière simple, pour que chaque bouton soit facilement référençable vers sa fenêtre correspondante. Plus compliqué encore si l'on sait qu'à partir de chacune des machines, donc des fenêtres dynamiques, on peut encore lancer des tâches spécifiques créant chacune sa fenêtre de gestion et d'affichage, tout cela en multi-threading pour simplifier encore, bien entendu.
Actuellement je fais tout cela à partir de tableaux dynamiques, des "handle" et des "tag" mais c'est assez compliqué et je pense en avoir encore pour un petit moment avant d'avoir réussi à résoudre tous les difficultés rencontrées.
Au plaisir donc de pouvoir te lire prochainement sur ce thème si tu as de bonnes idées, merci d'avance, cordialement, Patrice

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Erreur [ par delphi ] elle est ou l erreur svp ici :ShowWindow(FindWindowEx(FindWindowEx(FindWindowEx(FindWindowEx(FindWindow('AOL Frame25','AOL'),0, 'MDI Client',nil),0,'A Sous Class [ par delphi ] Salut je voudrais savoir comment passer une sous class avec delphi ??par exemple avec vb ça se fait comme ça :Public Declare Function ShowWindow Lib " Erreur svp aide!!!! [ par Shadow ] varAol, Mdi, Toolbar, tool, aoledit, combo:string;beginAol:= FindWindow('AOL Frame25',nil);Toolbar:= FindWindowEx(Aol,0,'AOL Toolbar', nil);tool:= Fin Comment envoyer un fichier sql par courrier electronique ? [ par Zangdar ] On m'a donné ceci sur le forum de "developpez" et on m'a dit d'utiliser le composant "SNMTMTP" et le code ci-dessous, mais ca ne fonctionne pas chez m PostMessage et compagnie.... please [ par wixiz ] salut tout le monde, en fait je voudrais pouvoir controler l'ordi avec un prog, comme si c'est l'utilisateur qui le faisait. Concretement : par ex, je ptit prob avé Delphi :( [ par slywuyl ] Voila.... j'aimerais que quand je cliques sur un bouton 1 ca execute le contenu du bouton 2 qu'en gros ca simule l'appui sur le bouton 2.... J'ai déja PostMessage / SendMessage [ par phoenyx ] Salut,j'ai besoin d'intéroger une fonction d'un objet (dont je n'ai pas les sources) d'une form et j'ai besoin de son résultat. J'utilise donc SendMes instanciation ou cast a partir du classname [ par Guillemouze ] salutalors voila ce que je voudrai faire:j'ai une classe Tancetre, et 2 classes Tfils1, Tfils2et 3 proceduremafonction(val:Tancetre) mafonction(val:Tf DLL freeze avec GetWindowText....pitié...ca me rend dingue.. [ par davidfdm2002 ] J'ai une DLL Delphi faite pour JAVA ,initialement conçu avec Delphi 6.Une fonction de la DLL permet de denombrer le nombre de fenetres portant un cert PostMessage [ par la_gavorade ] Bonjour à tous, J'ai un soucis avec PostMessage (ça va être un peu long, je vous préviens) : Voilà, j'ai fait une appli qui entre autres lance un pr


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.