OVH Cloud OVH Cloud

énumérer les feuilles - pas si simple que ca peut-etre

4 réponses
Avatar
Bismark Prods
Bonjour,

Peut-être est-ce une question stupide, mais je n'ai aucun problème pour
énumérer les feuilles d'un projet lorsque je le désire dans l'une des
feuilles dudit projet. Par contre hors des feuilles, dans un module de
classe, sans savoir à l'avance le nom des feuilles comment faire pour
effectuer une énumération ?

Merci de votre aide

4 réponses

Avatar
Benoît O'Hare
dim frm as form

foreach frm in form
if typof frm is Form then
msgbox frm.name
endif
next

--
(Hello)
| | | / O
(o) (o) O
(_) / o
o0oo - - - - - - oo0oo
(MrBinaire)

Benoît O'Hare
www.tryskel.com (portail web)
www.tryskel.net (communauté tryskel)
"Bismark Prods" a écrit dans le message de news:

Bonjour,

Peut-être est-ce une question stupide, mais je n'ai aucun problème pour
énumérer les feuilles d'un projet lorsque je le désire dans l'une des
feuilles dudit projet. Par contre hors des feuilles, dans un module de
classe, sans savoir à l'avance le nom des feuilles comment faire pour
effectuer une énumération ?

Merci de votre aide




Avatar
Bismark Prods
ton truc ne fonctionne que si les feuilles sont chargées ! Or j'ai besoin de
connaitre toutes les feuilles meme celles qui sont encore pas chargées ?

stp ?

"Benoît O'Hare" a écrit dans le message de
news:
dim frm as form

foreach frm in form
if typof frm is Form then
msgbox frm.name
endif
next

--
(Hello)
| | | / O
(o) (o) O
(_) / o
o0oo - - - - - - oo0oo
(MrBinaire)

Benoît O'Hare
www.tryskel.com (portail web)
www.tryskel.net (communauté tryskel)
"Bismark Prods" a écrit dans le message de news:

> Bonjour,
>
> Peut-être est-ce une question stupide, mais je n'ai aucun problème pour
> énumérer les feuilles d'un projet lorsque je le désire dans l'une des
> feuilles dudit projet. Par contre hors des feuilles, dans un module de
> classe, sans savoir à l'avance le nom des feuilles comment faire pour
> effectuer une énumération ?
>
> Merci de votre aide
>
>




Avatar
Guy Detienne
Salut ;O)

La question n'est pas si stupide que cela, elle est même
dirons-nous très intéressante.
D'emblée, je dois dire que je n'ai pas la réponse, mais
selon moi, il n'existe peut-être pas de réponse positive.

L'utilisateur d'Access, Excel ou Word te dira qu'il lui
est possible d'énumérer les formulaires existants (même
non chargés) dans son projet. Et c'est vrai ! Mais les
applications conçues à partir de ceux-ci ne sont pas
compilées mais encapsulées, donc le code reste
interprété. Ces applications ont une description interne
des objets existants pour un projet donné, un peu comme
les fichiers VBP en VB, ce qui permet donc d'énumérer
aisément tout le contenu. Les objets d'Access, Excel et
Word n'ont surtout pas à être comparés à VB. Seules les
fenêtres ont un handle, pas les autres objets.

En VB, le code est compilé. Donc pour que Windows puisse
connaître les formulaires utilisés, ils doivent être
instanciés. Car une fenêtre en VB est purement un object
instancié à partir d'une classe. Quand les fenêtres sont
instanciées, Windows leur attribue un handle unique. Ce
handle permettra de les manipuler.
Nous pourrons donc connaître via l'API EnumChildWindows
les objets appartenant à une fenêtre.

Donc posons-nous la question suivante : comment Windows
pourrait-il connaître des objets qui n'existent pas (ou
pas encore instanciés) dans une application ?

Car comme nous le savons, dan un projet VB, nous pouvons
créer de façon statique des formulaires et tout autre
objet, mais nous pouvons aussi les créer dynamiquement via
le code. Donc, impossible de savoir à l'avance ce qui
préexiste dans une application. Ca existe peut-être.
mais je ne connais pas ! J'attends de voir..

Tchao

Guy DETIENNE

-----Message d'origine-----
Bonjour,

Peut-être est-ce une question stupide, mais je n'ai aucun


problème pour
énumérer les feuilles d'un projet lorsque je le désire


dans l'une des
feuilles dudit projet. Par contre hors des feuilles, dans


un module de
classe, sans savoir à l'avance le nom des feuilles


comment faire pour
effectuer une énumération ?

Merci de votre aide


.



Avatar
Bismark Prods
Bonjour,

Voilà enfin une réponse complète et soit dis en passant des plus
intéressantes que j'ai vu ici depuis longtemps !

Mais apres quelques recherche j'ai finalement opté pour les API qui
fournissent effectivement des méthodes certes un peu rebarbatives mais
efficace pour trouver les informations qu'il me fallait ! A savoir :

FindWindow
GetClassName
EnumChildWindows
GetWindowText
GetWindowTextLength

Qui me permette d'avoir toutes les infos utiles dans mon cas. En effet, je
ne suis intéressé que par les MDI child et par la MDI parent, qui je vous le
rappelle est identifiée dans GetClassName par ThunderMDIClient. Fallait le
savoir !

Bonne journée



"Guy Detienne" a écrit dans le message de
news:096701c3574a$eaeb2020$
Salut ;O)

La question n'est pas si stupide que cela, elle est même
dirons-nous très intéressante.
D'emblée, je dois dire que je n'ai pas la réponse, mais
selon moi, il n'existe peut-être pas de réponse positive.

L'utilisateur d'Access, Excel ou Word te dira qu'il lui
est possible d'énumérer les formulaires existants (même
non chargés) dans son projet. Et c'est vrai ! Mais les
applications conçues à partir de ceux-ci ne sont pas
compilées mais encapsulées, donc le code reste
interprété. Ces applications ont une description interne
des objets existants pour un projet donné, un peu comme
les fichiers VBP en VB, ce qui permet donc d'énumérer
aisément tout le contenu. Les objets d'Access, Excel et
Word n'ont surtout pas à être comparés à VB. Seules les
fenêtres ont un handle, pas les autres objets.

En VB, le code est compilé. Donc pour que Windows puisse
connaître les formulaires utilisés, ils doivent être
instanciés. Car une fenêtre en VB est purement un object
instancié à partir d'une classe. Quand les fenêtres sont
instanciées, Windows leur attribue un handle unique. Ce
handle permettra de les manipuler.
Nous pourrons donc connaître via l'API EnumChildWindows
les objets appartenant à une fenêtre.

Donc posons-nous la question suivante : comment Windows
pourrait-il connaître des objets qui n'existent pas (ou
pas encore instanciés) dans une application ?

Car comme nous le savons, dan un projet VB, nous pouvons
créer de façon statique des formulaires et tout autre
objet, mais nous pouvons aussi les créer dynamiquement via
le code. Donc, impossible de savoir à l'avance ce qui
préexiste dans une application. Ca existe peut-être.
mais je ne connais pas ! J'attends de voir..

Tchao

Guy DETIENNE

-----Message d'origine-----
Bonjour,

Peut-être est-ce une question stupide, mais je n'ai aucun


problème pour
énumérer les feuilles d'un projet lorsque je le désire


dans l'une des
feuilles dudit projet. Par contre hors des feuilles, dans


un module de
classe, sans savoir à l'avance le nom des feuilles


comment faire pour
effectuer une énumération ?

Merci de votre aide


.