Comment changer des objets de container dans un UserControl.
pracoupeau
Messages postés10Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention 5 septembre 2005
-
4 sept. 2005 à 14:17
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
5 sept. 2005 à 17:35
Bonjour a tous,
J'ai besoin d'écrire un ActiveX qu'on va appeler "MyX", qui est un
container pour d'autres contrôles. J'ai besoin de déplacer les objets
dessinés par le developpeur dans un container interne qui se trouve
dans MyX et qui peut être une Frame ou un voir même un autre ActiveX
(qui est encapsulé dans MyX) et que l'on peut appeler Ax2.
A part le fait que je doit utiliser le Subclassing pour gérer les
évènements dans l'environement de développement, l' instruction Set
Obj.container Frame1 ou Set Obj.container Ax2, ne fonctionnenent
pas et provoque une erreur.
Je ne peux pas utiliser SetParent non plus, car il y a des contrôles
tracés qui ne contienent pas de Handle et donc ne seront pas déplacés.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 4 sept. 2005 à 17:12
salut.
(si j'ai bien compris...)
ton MyX est un Control. ce n'est pas parce qu'il en contient lui même qu'il peut s'approprier les contrôles aux alentours.
je crois que s'il y a un moyen de procéder, çà serait de mettre ton control en container=true, puis dans ton projet, lorsque tu déplaces qqc sur ce control, ou l'utilisateur par un dragdrop, etc...., envoyer l'info au MyX qui lui va récupérer le hWnd de l'objet déposé pour le rendre enfant d'un des container qu'il contient (Set Parent, GetParent)
pracoupeau
Messages postés10Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention 5 septembre 2005 5 sept. 2005 à 01:01
Salut pcpt,
Oui Myx est un control ActiveX, qui est bien sur déclaré comme
container. Mais ca ne suffit pas. Imaginons que tu veuilles écrire un
control qui gère des onglets par ex. Le controle principal est un
container, soit, mais j'ai besoin d'avoir, à l'intérieur de celui-ci
d'autres container, que je gère moi même pour répartir les contrôles
que l'utilisateur va dessiner, dans une catégorie ou une autre. Comme
je l'ai déjà dit, le SetParent ne peut pas fonctionner ou du moins
fonctionne mais pas pour tout, puisqu'il est impossible de changer de
container les controles n'ayant pas de Handle (Label, control
WindowsLess, etc..).
Sur une form normale, j'utiliserai bien vonlontiers la propriété
Container des objets pour les déplacer, mais cette méthode échoue dans
un ActiveX, même si je mets un controle Frame par ex, dans mon controle
Myx, que cette frame soit visible ou non, l'affectation Set
CtlUtil.container = Frame1 génère une erreur, alors que ça marche dans
une form normale.
J'ai bien essayé de créer, lors de la création de Myx, un autre control
dynamiquement, qui lui aussi est container, mais les objets déssinés
dessus, ne rentre pas dans sa collection controls, ils appartiennent à
la collection controls de MyX.
J'ai essayé également de créer un control "Back" dynamiquement dans la
collection Controls du Parent de MyX (La Form), la méthode .Add échoue,
alors qu'elle marche dans une form normale.
Voilà pour les explications, merci d'avance de vos réponses.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 5 sept. 2005 à 16:35
ok... peut-être le but de ce test n'est pas clair?
dans cette PictureBox, met un Label !
essai AU MOINS UNE FOIS ce que j'ai fait
je n'ai pas mis une PictureBox pour rien. même un composant tel que le TxtBox, qui a un Handle, ne fonctionne pas.
essai de suivre ma logique ; de mettre un composant dans ce conteneur que tu peux "t'approprier" avec le SetParent.
et tiens moi au courant...
c'est une piste, pas LA solution. il me semble que çà t'avance toujours un peu plus qu'au départ. tu vois déjà que le composant peut utiliser son handle mais aussi le handle des objets qui le composent, et celui de certains objets de son propre parent.
(peut-être y arrivais-tu déjà, dans quel cas, désolé et bon courage)
pracoupeau
Messages postés10Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention 5 septembre 2005 5 sept. 2005 à 16:52
PCPT,
Je te remercie pour tes réponses rapide.
En fait la solution que tu me propose, je l'ai déjà mis en ouvre, mais
ca oblige l'utilisateur à tracer en premier mon control, puis pour
chaque catégorie, à tracer un autre activeX que sert de contener
(l'équivalent de ta PictureBox) dans ton test (Que j'ai testé bien
sur). C'est en fait, pour ceux qui connaissait, la démarche
qu'utilisait les SSTAB de Sheridan.
En Fait, j'aimerai pouvoir me passer de cette seconde étape.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 5 sept. 2005 à 17:35
évidemment, je vois bien la différence entre devoir créer 5pictures pour 5onglets de ton MyX, et SSTab existant, c'est donc forcément possible.
mais rien ne dit que le SStab n'aille pas taper dans une dll qui n'est pas un activeX....
l'intérêt de la solution que je t'ai proposé (et que tu connaissais), est que çà ouvre juste une piste de recherche. par là, j'entend que peut-être faut-il créer une Form dans ton contrôle, Form instanciée par onglet, et que çà soit alors ces Form qui capturent les objets correspondants par rapport au moment ou ils sont posés sur ton contrôl et à l'onglet visible.
pas évident tout çà
bonne continuation. n'hésite pas au besoin, à défaut de pouvoir t'aider, je peux toujours essayer
PCPT