Génération de cadre (shape) aléatoirement

Résolu
mekhanik Messages postés 33 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 20 mai 2007 - 1 août 2006 à 16:55
mekhanik Messages postés 33 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 20 mai 2007 - 4 août 2006 à 09:10
Bonjour,
Je voudrais visualiser graphiquement des projets auquels sont affectés plusieurs phases. J'ai prévu de dessiner dans un cadre de taille fixe symbolisant le projet, plusieurs cadres représentant chacun une phase. Ces cadres sont plus au moins grands en fonction de la durée de la phase. Mon problème est que le nombre de phase n'est pas connu au dépard (l'utilisateur peut en rajouter) et donc je ne sais pas combien de cadre (shape) dessiner. J'aimerais en générer le nombre voulu à la création de la forme puis les placer au bon endroit. Est-ce possible de générer des cadres à la volé ?
Merci beaucoup

6 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
1 août 2006 à 23:59
C'est possible, si je comprend bien (...), mais ce n'est pas simple.

Il faut vérifier les débordements d'écran entre autres.

Ensuite, tu devras, si nécessaire, vérifier les index de chaque contrôle pour savoir quoi faire selon le cas.


En fait, je ne suis pas certain de ce que tu entends par cadre. Si
c'est un Frame comme je pense, et qui sert de conteneur à certains
contrôles, tu dois mettre un index à 0 au Frame de départ ainsi qu'à tous ses contrôles.


Ensuite, tu peux utiliser un code comme celui qui suit.

Dans l'exemple, j'utilise un Frame contenant 2 textbox et un bouton... assez simple...


Private Sub Command1_Click()


'Création d'un nouveau Frame à Index 1 et positionnement

'On pourrait changer le 1 pour un compteur quelconque dans une boucle

    Load Frame1(1)

    Frame1(1).Left = Frame1(0).Left + Frame1(0).Width + 50

    Frame1(1).Top = Frame1(0).Top

    Frame1(1).Caption = "2e Frame"

    Frame1(1).Visible = True


'Création des nouveaux contrôles et affectés au 2e Frame  

    Load Text1(1)

    Set Text1(1).Container = Frame1(1)

    'Text1.Text = "ce que tu veux"

    Text1(1).Visible = True

   

    Load Text2(1)

    Set Text2(1).Container = Frame1(1)

    Text2(1).Visible = True

   

    Load Command2(1)

    Set Command2(1).Container = Frame1(1)

    Command2(1).Visible = True


End Sub

Si ce n'est pas ce que tu cherchais, désolé, mais ça pourra peut-être servir à d'autres... ¦¬)

MPi
3
mekhanik Messages postés 33 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 20 mai 2007
2 août 2006 à 12:57
Salut merci de ta réponse MPI,


Je pense que ça peut m'aider mais ce que je voudais c'est, si on sort de ce contexte, avoir par exemple une form vierge de tout élément sauf un bouton qui quand on clique dessus ajoute un objet shape à la forme et le rende visible. En fait j'arrive à faire tout ça par la techique du Shape.visible = false et true mais je ne sais pas combien de shape je vais avoir sur ma forme donc je voudrais qu'il soit crée dynamiquement c'est possible ? genre Dim sh as new Shape ou quelque chose comme ça
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
2 août 2006 à 23:12
Tu es en VB ou en VBA ?

Et est-ce important d'utiliser un contrôle Shape ?

MPi
0
mekhanik Messages postés 33 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 20 mai 2007
3 août 2006 à 09:16
Je suis en VB6.0 et non ce n'est pas important d'utiliser l'objet shape du moment que je puisse dessiner plusieurs cadres sur ma form
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
3 août 2006 à 12:02
Voici une autre méthode utilisant Controls.Add


À partir d'un bouton, ça crée et positionne un objet Shape à chaque Click

Si tu veux pouvoir assigner des procédures aux contrôles que tu places,
il est plus simple d'utiliser l'autre méthode avec les Index.  Tu
pourrais utiliser des Labels si tu veux pouvoir y mettre du texte ou
autre contrôle selon tes besoins


Private Sub Command1_Click()

    Static Idx As Integer

    Dim Nom As String

    Dim Shp As Shape

   

    Idx = Idx + 1

    Nom = "Shape" & Idx

    Set Shp = Me.Controls.Add("VB.Shape", Nom)

   

    Shp.Width = 900

    Shp.Left = 1000 + (Idx * 1000)

    Shp.Top = 1000

    Shp.FillStyle = 0

    Shp.FillColor = vbBlue

    Shp.Visible = True

End Sub


Autre piste qui pourra peut-être t'aider ...

MPi
0
mekhanik Messages postés 33 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 20 mai 2007
4 août 2006 à 09:10
Je te remercie MPi pour ton aide précieuse, je n'avais pas pu tester ton code mais c'est exactement ce que je cherche à faire Merci beaucoup.


P.S. : Je vais aussi tester ta deuxième proposition, elle peut m'intéresser !
0
Rejoignez-nous