Chargement dynamique d'objets

Signaler
Messages postés
176
Date d'inscription
vendredi 29 octobre 2004
Statut
Membre
Dernière intervention
7 mars 2005
-
Messages postés
11
Date d'inscription
vendredi 21 juin 2002
Statut
Membre
Dernière intervention
14 octobre 2005
-
Bonjour, j'ai un problème concernant le chargement d'objets avec l'instruction Load...


Explication : j'ai créé un objet PictureBox que j'ai appelé Containeur
avec son Index à 0. Cet objet sert à 'contenir' d'autres éléments (à
savoir, une image, des labels, une progressbar) tous indéxés de la même
façon à 0. Lorsque je charge un nouveau PictureBox comme ceci :


Load Containeur(Index) (avec l'index incrémenté bien sûr), le nouveau
conteneur est vide et ne contient pas les éléments de son original
(l'image, les labels...), donc je les charge également (Load machin...)
avec eux aussi des index incrémentés... Et voici le problème : les
nouveaux éléments du conteneur ne sont pas crées dans celui qui vient
d'être chargé mais dans l'original !!!



Ma question est donc :
quelqu'un connaît t'il un moyen pour charger un nouvel objet dans un
élément pouvant en contenir d'autres (que ce soit une PictureBox ou une
Frame... le principe est le même je suppose) ?


Merci d'avance.

5 réponses

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
1ére solution:

Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long


Private Sub Command2_Click()
Load Picture1(1)
Picture1(1).Move 3840, 540
Picture1(1).Visible = True


Load Command1(1)
Command1(1).Move 0, 0
SetParent Command1(1).hWnd, Picture1(1).hWnd
Command1(1).Visible = True
End Sub

Daniel
0
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
2éme solution:

Private Sub Command2_Click()
Dim n As Integer
Dim Pict(2) As PictureBox
Dim Cmd1(2) As CommandButton

n = 1
Set Pict(n) = Controls.Add("VB.picturebox", "Pict1")
Pict(n).Move 3840, 540, 2835, 3255
Pict(n).Visible = True
Pict(n).SetFocus
Set Cmd1(n) = Controls.Add("VB.CommandButton", "Bouton1")
Set Cmd1(n).Container = Pict(n)
Cmd1(n).Move 0, 0, 1000, 500
Cmd1(n).Caption = "Bouton 1"
Cmd1(n).Visible = True
End Sub

Daniel
0
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
28
Gobillot < pourquoi utilises-tu une api dans la solution 1 et Controls.add dasn la seconde ?
Tu peux faire un Load Command1(1) puis un Set Command1(1).container = picturebidule

Christophe R
0
Messages postés
176
Date d'inscription
vendredi 29 octobre 2004
Statut
Membre
Dernière intervention
7 mars 2005

Merci a vous deux pour ces reponses. Elles me seront bien utiles
@+ et bonne prog !
0
Messages postés
11
Date d'inscription
vendredi 21 juin 2002
Statut
Membre
Dernière intervention
14 octobre 2005

Il me semble qu'il faut plutot passer par un usercontrol pour faire cet action.

Specifier une nouvelle propriete "Type" le type de control conteanant (Label, Bouton...) que tu veux afficher via cet usercontrol et lui envoyer les parametres graphiques du dit usercontrol (Largeur, Hauteur).
Aussi, il faut que tu te sers de TAG du usercontrol pour faire evoluer les données de tes control internes du usercoontrol

Cordialement,
.
0