Mettre à l'echelle tous les controles d'une frame

Résolu
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012 - 21 juil. 2007 à 12:44
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012 - 21 juil. 2007 à 20:47
Bonjour, j'ai plusieurs controles images contenus dans une frame, j'aimerai que tous ces controles soient mis à l'echelle de la frame, dans le cadre de la création d'un zoom. Là il me faudrait définir toutes les propriétés height et width pour chacun des controles et vu le nombre que j'ai à faire j'aime savoir si il n'y a pas autre chose. Genre de façon automatique ou toutes les images se réduisent à la meme echelle proportionnellement à la taille height et width de la frame, comme ça je n'ai à m'occuper de zoomer et dezoomer la frame, et tous les controles d'image s'ajustent.

Est ce possible ? si oui, comment ?

Merci à vous.

12 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 juil. 2007 à 19:31
1)

Il ne te viendrait pas à l'idée de mettre la condition suivante dans ta boucle Fort  Each :

If ctrl.Container Is Frame1 Then

Non ?

2) Il ne te viendrait pas à l'idée d'utiliser TypeOf (voir ton aide en ligne) pour connaître le type du contrôle, non Plus ?

3) Il ne te viendrait pas non plus à l'idée d'utiliser tout bêtement un groupe d^'images indexées nommées machinchouette(0), machinchouette(1),....... machinchouette(n),

et de faire un test élémentaire sur ctrl.Name (puisque ce ne serait alors forcément une de tes images ?)

Bref...
Réveille-toi un peu.

Reviens si tu as encore une difficulté, mais là, vraiment...
Je ne vois pas ce qui te manque !...
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 juil. 2007 à 13:56
Bonjour,

Le mieux est sans aucun doute :
1) de créer un groupe de contrôles indexés
2) d'utiliser un redimentionnement de tous les contrôles du groupe en fonction du redimensionnement du Frame.
 Il suffit pour celà :
   a) de relever les dimensions originelles du Frame au chargement
   b) de déterminer le coefficient k de redimensionnement du Frame
   c) d'appliquer ce coefficient à chacune des propriétés (left, top, width et heught) de tes contrôles images
   encore faut-il avoir pensé àmettre à True la propriété Stetch de tes contrôles images, bien évidemment.


  Voilà ! tu as là tous les éléments qu'il te faut connaître. Le reste relève maintenant de ta seule volonté à développer ... 
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 juil. 2007 à 14:47
salut,

j'ai une source pour ça :
http://www.vbfrance.com/codes/METHODE-ZOOM-SUR-FORM-CONTROLES_40519.aspx

@++

<hr width="100%" size="2" />(
0
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012
21 juil. 2007 à 15:12
Merci Mortalino, je vais essayer ce code mais il ressemble à ceux que j'ai déjà testé. Ce qui se passe dans ceux que j'ai testé c'est que tous les controles d'une feuillent se redimensionnent bien en fonction de la taille de la feulle. Moi ce que je veux c'est la même chose mais uniquement pour les controles contenus dans une frame.

J'ai donc essayé dans les codes similaires au tien de changer tout ce qui etait relatif à FORM1 par FRAME1, mais ça ne fonctionnais pas, mais je vais voir avec le code que tu donne si il se passe autre chose.
0

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

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 juil. 2007 à 15:19
Oui, t'auras quelques modifs à faire pour pointer vers les dimensions de ta Frame;, mais ça devrait pas être trop long à faire !

t'as essayé juste avec :

Call .MyControls.AddAll(<strike>Me</strike> Frame1)
Vu que le Frame est un objet Container, peut-être que ça fonctionnera (jamais essazyé)

@++

<hr width="100%" size="2" />(
0
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012
21 juil. 2007 à 19:11
et non ça ne fonctionne pas, j'ai un joli type incompatible (:
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 juil. 2007 à 19:16
Test en Pas à pas... ma classe n'est pas difficile à manipuler
Si j'ai le temps, je jette un oeil (voir les deux) 

@++

<hr width="100%" size="2" />(
0
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012
21 juil. 2007 à 19:17
quant aux modifs c'est la jungle et la croix et la baniere, je pense qu'il y'a moyen de faire plus simple si seulement ça fonctionnait.

Moi j'ai ça qui fonctionne mais uniquement en redimensionnant tous les controles d'une feuille et non d'une frame. En le modifant avec deux boutons + et - incrémentant la frame.width ou la décrémentant, ça ne donne rien. ce code ne marche qu'avec une form. Qui a une idée ?

Public Sub RedimForm()
    Dim Form1 As Form
    Set Form1 = Screen.ActiveForm
    If (Form1.WindowState = vbMinimized) Then
       Exit Sub
   End If
    Static Longueur As Long
    Static Hauteur As Long
    Dim PropLongueur As Single
    Dim PropHauteur As Single
    If ((Longueur > 0) And (Hauteur > 0)) Then
        PropLongueur = Frame1.Width / Longueur
        PropHauteur = Frame1.Height / Hauteur
        Dim Ctrl As Control
        On Error Resume Next
        For Each Ctrl In Form1.Controls
            Ctrl.Left = CInt(Ctrl.Left * PropLongueur)
            Ctrl.Top = CInt(Ctrl.Top * PropHauteur)
            Ctrl.Width = CInt(Ctrl.Width * PropLongueur)
            Ctrl.Height = CInt(Ctrl.Height * PropHauteur)
        Next
        On Error GoTo 0
    End If
    Longueur = Frame1.Width
    Hauteur = Frame1.Height
End Sub
0
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012
21 juil. 2007 à 19:21
Pour répondre à jmfmarques bien sur c'est ce qui fonctionnerai mais je n'ai pas que des images, j'ai d'autres controles comme des boutons, et là pas de strech pour ceux là. J'aurai préféré un redim automatique selon la frame.

rien
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 juil. 2007 à 19:35
Quant à la propriété strtech de tes images : je ne vois pas pourquoi tu attends de zoomer pour la décider !!!
Décide-là d'emblée pour touites les images de ce cadre, directement au stade de développement ...
Pardi ...
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 juil. 2007 à 19:53
Bah ma classe t'as pas dut chercher... ça m'a pris 3 minutes (le plus long étant de tout recopié, car appli sur pc non connecté Web) :

      Classe FormZoomed :
dans la Sub Zoomed --> For Each ctl In oForm.Container

dans la Sub Ini_Classe, paramètre --> oForm As Frame
puis ... ctl In oForm.Container

      Classe MyControls :
dans la Function AddAll, paramètre --> oForm As Frame

      Dans la Form :
Call .MyControlsAddAll(Frame1)
PropertyZoom.Ini_Classe(Frame1)

@++

<hr width="100%" size="2" />(
0
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012
21 juil. 2007 à 20:47
Oups ma réponse n'es pas passée, je disais que cette fois cela fonctionne, il sufisait bien comme le disait jmfmarques, que j'ajoute

  For Each Ctrl In Form1.Controls
-> ajout ici        If (Ctrl.Container Is Frame2) Then ' redimensionne la frame 2 contenant la MAP et les comtés
            Ctrl.Left = CInt(Ctrl.Left * PropLongueur)
            Ctrl.Top = CInt(Ctrl.Top * PropHauteur)
            Ctrl.Width = CInt(Ctrl.Width * PropLongueur)
            Ctrl.Height = CInt(Ctrl.Height * PropHauteur)
        End If
        Next

Je n'y avais en effet pas pensé. Merci aussi à toi mortalino. Je pense que ce post servira aussi à d'autres.
0
Rejoignez-nous