# Environnements de dveloppement > Delphi > Codes sources  tlcharger >  Dterminer si la form principale d'une application Delphi externe est minimise, maximise ou normale

## KlausGunther

Je sous sous Delphi 6 Personal Edition, et Windows 10 toutes mises  jour installes.

Je me suis heurt au problme suivant:
comment savoir si une de mes applications Delphi, dont je connais le handle de la form principale (comment, ce n'est pas le sujet ici) est actuellement en tat normal, minimis ou maximis ?

Pour l'tat maximis, l'API IsZoomed fonctionne bien. par contre, l'API IsIconic ne marche pas avec ma version de Delphi, car il retourne toujours FALSE, mme si l'application a t minimise.

J'ai fini par trouver une astuce qui semble marcher dans tous les cas. J'aimerais bien que vous puissiez me dire si ma rflexion est bonne ou si j'ai manqu quelque chose.

Voici la fonction quue j'ai cre pour tester cela (fonction intgre dans une DLL):


```

```

La fonction retourne:
-1 si le handle est invalide
0 si la fentre et en tat normal
1 si la fentre est minimise
2 si la fentre est maximise

MEerci d'avance pour votre jugement !

----------


## ShaiLeTroll

Sinon pourquoi ne pas inclure un objet OLE dans l'Exe et depuis la DLL, faire un GetActiveObject pour rcuprer une instance permettant d'ouvrir plusieurs fonctionnalit ?

Il est aussi possible d'utiliser un Message custom entre la DLL et l'Exe pour que via un SendMessage tu puisse rcuprer cet tat depuis la WindowState interne

Enfin, moi j'utiserais GetWindowPlacement, je l'ai utilis pour rcuprer la taille normale d'une fentre lorsque celle-ci est maximized, mon but tant de mmoriser la taille normale + le WindowState pour rtablir la fentre dans le mme tat au prochain lancement (si la rsolution et le nombre d'cran est le mme)

je ne l'utilise pas mais WindowPlacement.showCmd existe




```

```

----------


## Paul TOTH

alors, sans changer la logique, dj la fonction devrait plutt ressembler  cela



```

```

pour ce qui est du IsIconic je pense que c'est en effet li  la VCL...une recherche rapide sur google m'incite  le penser
https://stackoverflow.com/questions/...pen-the-window
https://borland.public.cppbuilder.na...n-is-minimised

----------


## KlausGunther

Merci pour ton code, ShaiLeTroll. Je fais pratiquement la mme chose si je veux mmoriser la position d'une fentre avant sa fermeture pour pouvoir la repositionner au mme endroit, aprs rouverture.

Mais la question n'tait pas celle-l. Je voulais pouvoir dterminer,  partir d'une application X, si une application Y et prsente (facile - par GetWindowEx), et su oui, si elle est dans son tat d'affichage normal, minimis ou maximis, quelque soient d'ailleurs ces dimensions.

Pour l'etat maximis, l'API IsZoomed fonctionne bien. Mais le problme surgit pour l'tat minimis. L'API IsIconic fournit systmatiquement TRUE, que la fentre soit minimise ou non. 

Si la fente cible est minimise, l'API GetWindowRect  retourne tout de mme des coordonnes identiques   celles de l'tat normal de la fentre. C'est peut-tre normal et voulu, mais cela empche d'utiliser ces valeurs pour dtecter l'tat minimis. Je me demande si ce n'est pas li  la prsence de la fentre cache reprsente par Application et qu'il y a un "mlange des genres" entre la gestion VCL et la gestion Windows des fentres...

J'ai bien trouv un moyen via GetWindowRect en utilisant Application.Handle comme paramtre. Si l'application cible est minimise, les proprits Left et Top de ce rectangle sont gales  -32000 alors qu'elles sont positives sinon. Mais je n'ai aucun moyen (en existe-t-il, d'ailleurs ?) pour trouver la valeur de Application.Handle d'une application dont je ne connais que le handle de la form principale.

J'ai donc fait la rflexion suivante:
Si je cherche le handle de la fentre (du contrle) qui se trouve aux coordonnes TopLeft de la form cible, et si ce handle est diffrent du handle de cette form, alors la form n'est pas prsente  cet endroit ce qui signifie qu'elle est minimis. J'ai donc mon critre.

Je sais bien qu'il y a un cas o a ne marche pas, mais le problme de se pose pas dans mes applications. Ce serait le cas d'une fentre plein cran sans bord, avec un contrle plac  (0,0). Mais sinon, cela semble marcher dans tous les cas.

Bien sr, j'aurais aim avoir uen solution plus directe pour discriminer entre tat normal et tat minimis, juste  partir du handle de la form cible. C'tait surtout cela, le sens de ma question, car techniquement, ma solution me donne satisfaction, bien que je ne la trouve pas trs lgante.

----------


## Paul TOTH

priori Application est parent de la MainForm donc  GetWindow(MyHWND, GW_OWNER) comme suggr dans https://stackoverflow.com/questions/...pen-the-window

----------


## KlausGunther

Merci ! J'avais rat celle-l ! C'est ce qui me manquait.

----------

