Mettre à l'echelle tous les controles d'une frame [Résolu]

cs_lechti62 161 Messages postés vendredi 8 mars 2002Date d'inscription 8 mars 2012 Dernière intervention - 21 juil. 2007 à 12:44 - Dernière réponse : cs_lechti62 161 Messages postés vendredi 8 mars 2002Date d'inscription 8 mars 2012 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 21 juil. 2007 à 19:31
3
Merci
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 !...

Merci jmfmarques 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de jmfmarques
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 21 juil. 2007 à 13:56
0
Merci
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 ... 
Commenter la réponse de jmfmarques
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 21 juil. 2007 à 14:47
0
Merci
salut,

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

@++

<hr width="100%" size="2" />(
Commenter la réponse de mortalino
cs_lechti62 161 Messages postés vendredi 8 mars 2002Date d'inscription 8 mars 2012 Dernière intervention - 21 juil. 2007 à 15:12
0
Merci
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.
Commenter la réponse de cs_lechti62
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 21 juil. 2007 à 15:19
0
Merci
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" />(
Commenter la réponse de mortalino
cs_lechti62 161 Messages postés vendredi 8 mars 2002Date d'inscription 8 mars 2012 Dernière intervention - 21 juil. 2007 à 19:11
0
Merci
et non ça ne fonctionne pas, j'ai un joli type incompatible (:
Commenter la réponse de cs_lechti62
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 21 juil. 2007 à 19:16
0
Merci
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" />(
Commenter la réponse de mortalino
cs_lechti62 161 Messages postés vendredi 8 mars 2002Date d'inscription 8 mars 2012 Dernière intervention - 21 juil. 2007 à 19:17
0
Merci
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
Commenter la réponse de cs_lechti62
cs_lechti62 161 Messages postés vendredi 8 mars 2002Date d'inscription 8 mars 2012 Dernière intervention - 21 juil. 2007 à 19:21
0
Merci
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
Commenter la réponse de cs_lechti62
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 21 juil. 2007 à 19:35
0
Merci
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 ...
Commenter la réponse de jmfmarques
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 21 juil. 2007 à 19:53
0
Merci
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" />(
Commenter la réponse de mortalino
cs_lechti62 161 Messages postés vendredi 8 mars 2002Date d'inscription 8 mars 2012 Dernière intervention - 21 juil. 2007 à 20:47
0
Merci
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.
Commenter la réponse de cs_lechti62

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.