Les frames

Résolu
cs_bentic Messages postés 63 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 11 janvier 2013 - 27 nov. 2005 à 23:29
cs_bentic Messages postés 63 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 11 janvier 2013 - 28 nov. 2005 à 22:36
Bonsoir

Avec le SelStart je peux ouvrir un TextBox a ligne que je souhaite.

En modifiant cette routine



Public dec As Long

Private Sub Form_Load()

Me.VScroll1.Max = 1500

Me.VScroll1.Min = 1

Me.VScroll1.Value = 1

dec = CLng((Me.Frame1.Height - Me.Height) / Me.VScroll1.Max)

End Sub





Private Sub VScroll1_Scroll()

Me.Frame1.Top = -Me.VScroll1.Value * dec

End Sub



je souhaiterai ouvrir ma frame et le scroll sur un label précis se trouvant au milieu de le frame

Merci pour votre aide

6 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
28 nov. 2005 à 21:32
si je prends la différence:

Diff = Frame1.Height - Me.ScaleHeight


et ton rapport précédent:

dec = Diff / (VScroll1.Max - VScroll1.Min)

qui chez moi est égal à 1: dec = Diff / (Diff - 0)

mais pas chez toi: dec = Diff / (1500 - 1)



la position de la Frame doit être:

Min --> Top = -0

Max --> Top = -Diff

Value --> Top = -(Value - Min) * rapport



il y a 2 façons de calculer le rapport soit par division soit par multiplication

les deux se valent



donc pour une position de la Frame:

Vscroll1.Value = Min - Frame1.Top / dec



pour un objet situé à 1800 twips de la Frame donc à 120 pixels

x = Me.ScaleHeight / 2 - Objet.Top / 15

VScroll1.Value = (Min - x / dec)

c'est pas toujours possible , si inférieur à Min ça va entrainer une erreur.



Dim Min As Integer

Dim Max As Integer

Dim Diff As Integer

Dim dec As Single



Private Sub Form_Load()

Diff = Frame1.Height - Me.ScaleHeight

' avec des valeurs non arbitraires les calculs sont plus simples

' Min 0: Max Diff

Min 1: Max 1500



' les deux façons de calculer le rapport:

' dec = (Max - Min) / Diff

dec = Diff / (Max - Min)



VScroll1.Min = Min

VScroll1.Max = Max



VScroll1.Value = (Max + Min) / 2

End Sub



Private Sub VScroll1_Change()

' Frame1.Top = (Min - VScroll1.Value) / dec

Frame1.Top = (Min - VScroll1.Value) * dec

End Sub


Daniel
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
28 nov. 2005 à 01:12
en toute logique à la moitié:

Me.VScroll1.Value = ( Me.VScroll1.Max + Me.VScroll1.Min) /2


Daniel
0
cs_bentic Messages postés 63 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 11 janvier 2013
28 nov. 2005 à 06:53
Le VScroll se positionne bien a la moitié de sa hauteur mais la frame
ne suit pas, hors il faudrait que la frame avançée en meme temps

Merci
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
28 nov. 2005 à 11:18
le fait de modifier VScroll1.Value provoque l'évênement Change donc la position de le Frame.

pourquoi choisir une valeur arbitraire 1500 ?







Dim Dec As Long



Private Sub Form_Load()

Dec = Frame1.Height - Me.ScaleHeight

VScroll1.Min = 0

VScroll1.Max = Dec

VScroll1.Value = Dec / 2

End Sub



Private Sub VScroll1_Change()

Frame1.Top = -VScroll1.Value

End Sub


Daniel
0

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

Posez votre question
cs_bentic Messages postés 63 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 11 janvier 2013
28 nov. 2005 à 20:17
La valeur de 1500 est totalement arbitraire cest tout simplement que j'ai plusieurs form et donc du copier coller c bien.

Je me permet d'aller un peux plus loin dans ma question, si dans ma
valeur arbitraire je souhaite me positionner a un point precis par
exemple 587. As tu la formule qui va bien.

merci pour ta premiere reponse
0
cs_bentic Messages postés 63 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 11 janvier 2013
28 nov. 2005 à 22:36
OK merci

Je ne suis pas programmeur donc je vais me plonger sur ta routine et surtout un grand
merci
pour ton aide.
0
Rejoignez-nous