OVH Cloud OVH Cloud

Objet Ambient

2 réponses
Avatar
Christophe QUEVAL
Bonsoir,

J'ai créé pour m'entraîner à l'objet Ambient, un UserControl avec un textbox
dont je voudrais changer la couleur de fond en fonction du container.
Pour ce faire, j'utilise l'objet Ambient dans mon contrôle activex. Cet
objet est censé me renvoyer (entre autres), la propriété BackColor de mon
container lorsque je place mon usercontrol dans une appli.
Tout fonctionne parfaitement si je place mon contrôle activex sur une
feuille bleue par exemple, alors mon contrôle prend lui aussi la couleur
bleue. Mais si sur cette feuille je dispose un Frame par exemple, avec un
fond gris et que je lui colle mon ocx dessus pour qu'il devienne le
container de mon contrôle, alors ce dernier est bleu comme le fond de la
feuille et non pas gris comme le container !!?? Et cela est systématique dès
lors que ce n'est plus la feuille le container direct de mon contrôle.

J'ai du râter quelque chose.
J'espère avoir été assez clair pour que quelqu'un me vienne en aide :-)

Merci.

Christophe

2 réponses

Avatar
Fabrice MALAINGRE
Bonsoir Christophe,

Si ma mémoire est bonne, le problème vient du fait qu'il n'y a qu'un seul
objet "Ambient" pour l'ensemble des contrôles situés sur le "Form" VB (alors
qu'il y bien a un "Extender" par contrôle).

Tous les contrôles récupèrent donc les changements du "Form" et non ceux
d'un éventuel conteneur (comme un "Frame", "PictureBox" ou tout autre
"UserControl").

Il existe bien un moyen de récupérer la couleur de ton vrai conteneur grâce
à une ligne de code suivante :
"UserControl.BackColor = UserControl.Extender.Container.BackColor"

Mais, tu ne possèdes a priori aucun moyen automatique d'être averti quant à
ce changement de couleur.

Cordialement

____________________________
Fabrice MALAINGRE
Architecte Logiciel - Chef de Projet
THEORIS - www.theoris.fr
Avatar
Christophe QUEVAL
Je te remercie pour ta réponse.
C'est en effet la seule méthode que j'avais trouvé pour solutionner mon
problème. Dans l'évènement Paint de mon contrôle, j'ai mis la ligne de code
que tu cites. Et lorsque je change mon user control de container, je fais un
refresh de celui-ci.
C'est dommage que l'objet ambient soit si limité, d'autant que la doc en
ligne est assez pauvre à ce sujet.
Encore merci.
Christophe

"Fabrice MALAINGRE" a écrit dans le message de
news:
Bonsoir Christophe,

Si ma mémoire est bonne, le problème vient du fait qu'il n'y a qu'un seul
objet "Ambient" pour l'ensemble des contrôles situés sur le "Form" VB


(alors
qu'il y bien a un "Extender" par contrôle).

Tous les contrôles récupèrent donc les changements du "Form" et non ceux
d'un éventuel conteneur (comme un "Frame", "PictureBox" ou tout autre
"UserControl").

Il existe bien un moyen de récupérer la couleur de ton vrai conteneur


grâce
à une ligne de code suivante :
"UserControl.BackColor = UserControl.Extender.Container.BackColor"

Mais, tu ne possèdes a priori aucun moyen automatique d'être averti quant


à
ce changement de couleur.

Cordialement

____________________________
Fabrice MALAINGRE
Architecte Logiciel - Chef de Projet
THEORIS - www.theoris.fr