cs_lechti62
Messages postés161Date d'inscriptionvendredi 8 mars 2002StatutMembreDernière intervention 8 mars 2012
-
21 juil. 2007 à 12:44
cs_lechti62
Messages postés161Date d'inscriptionvendredi 8 mars 2002StatutMembreDerniè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.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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 !...
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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 ...
cs_lechti62
Messages postés161Date d'inscriptionvendredi 8 mars 2002StatutMembreDerniè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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_lechti62
Messages postés161Date d'inscriptionvendredi 8 mars 2002StatutMembreDerniè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
cs_lechti62
Messages postés161Date d'inscriptionvendredi 8 mars 2002StatutMembreDerniè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.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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 ...
cs_lechti62
Messages postés161Date d'inscriptionvendredi 8 mars 2002StatutMembreDerniè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.