OVH Cloud OVH Cloud

Resize ListBox

4 réponses
Avatar
Christophe
Bonjour,

QQun peut-il m'expliquer le comportement d'un listbox lors d'un resize de la
form conteneur.

Je souhaite modifier la hauteur du listbox en fonction de celle de la
fenetre.
Ci-dessous le code qui marche sauf que:
-l'augmentation de hauteur du listbox n'est pas proportionelle elle semble
devoir se fixée automatiquement sur des valeurs arrondies, pourquoi ?

sur load le code calcul l'espace entre le bas du listbox et le bas de la
zone client de la fenetre, à l'affichage cet espace n'est pas constant lors
du resize (nb l'affichage reste tout de même cohérent)

Private Sub Form_Load()
Dim r As Rect
Dim dummy&

<snip>
dummy& = GetClientRect(Me.hwnd, r)
mheight = (r.Bottom - r.Top) - Listappuidissocie.Top /
Screen.TwipsPerPixelY - Listappuidissocie.Height / Screen.TwipsPerPixelY
mwidth = r.Right - r.Left

<snip>

End Sub

Private Sub Form_Resize()
Dim nh&
Dim nw&
Dim r As Rect
Dim dummy&

If mheight <> 0 And mwidth <> 0 Then

dummy& = GetClientRect(Me.hwnd, r)
nh = (r.Bottom - r.Top) - mheight - Listappui.Top / Screen.TwipsPerPixelY

If nh& > 0 Then
Listappuidissocie.Height = nh& * Screen.TwipsPerPixelY
Listexclu.Height = nh& * Screen.TwipsPerPixelY
Listappui.Height = nh& * Screen.TwipsPerPixelY
End If

End If

End Sub


Christophe Vergon

4 réponses

Avatar
Christophe QUEVAL
Bonjour,

La hauteur d'une listbox est calculée par rapport à la police de caractère
de celle-ci.

Christophe

"Christophe" <geo.ch@(wormfuck)tiscali.fr> a écrit dans le message de
news:c62na8$r00$
Bonjour,

QQun peut-il m'expliquer le comportement d'un listbox lors d'un resize de


la
form conteneur.

Je souhaite modifier la hauteur du listbox en fonction de celle de la
fenetre.
Ci-dessous le code qui marche sauf que:
-l'augmentation de hauteur du listbox n'est pas proportionelle elle semble
devoir se fixée automatiquement sur des valeurs arrondies, pourquoi ?

sur load le code calcul l'espace entre le bas du listbox et le bas de la
zone client de la fenetre, à l'affichage cet espace n'est pas constant


lors
du resize (nb l'affichage reste tout de même cohérent)

Private Sub Form_Load()
Dim r As Rect
Dim dummy&

<snip>
dummy& = GetClientRect(Me.hwnd, r)
mheight = (r.Bottom - r.Top) - Listappuidissocie.Top /
Screen.TwipsPerPixelY - Listappuidissocie.Height / Screen.TwipsPerPixelY
mwidth = r.Right - r.Left

<snip>

End Sub

Private Sub Form_Resize()
Dim nh&
Dim nw&
Dim r As Rect
Dim dummy&

If mheight <> 0 And mwidth <> 0 Then

dummy& = GetClientRect(Me.hwnd, r)
nh = (r.Bottom - r.Top) - mheight - Listappui.Top / Screen.TwipsPerPixelY

If nh& > 0 Then
Listappuidissocie.Height = nh& * Screen.TwipsPerPixelY
Listexclu.Height = nh& * Screen.TwipsPerPixelY
Listappui.Height = nh& * Screen.TwipsPerPixelY
End If

End If

End Sub


Christophe Vergon




Avatar
ng
Salut,

Par défaut le contrôle ListBox s'arrange, lors d'un resize, pour afficher
complétement tous les items. Pour éviter cela, il suffit de définir la
propriété IntegralHeight à False.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/

Christophe <geo.ch@(wormfuck)tiscali.fr> a écrit :

Bonjour,

QQun peut-il m'expliquer le comportement d'un listbox lors d'un
resize de la form conteneur.

Je souhaite modifier la hauteur du listbox en fonction de celle de la
fenetre.
Ci-dessous le code qui marche sauf que:
-l'augmentation de hauteur du listbox n'est pas proportionelle elle
semble devoir se fixée automatiquement sur des valeurs arrondies,
pourquoi ?

sur load le code calcul l'espace entre le bas du listbox et le bas de
la zone client de la fenetre, à l'affichage cet espace n'est pas
constant lors du resize (nb l'affichage reste tout de même cohérent)

Private Sub Form_Load()
Dim r As Rect
Dim dummy&

<snip>
dummy& = GetClientRect(Me.hwnd, r)
mheight = (r.Bottom - r.Top) - Listappuidissocie.Top /
Screen.TwipsPerPixelY - Listappuidissocie.Height /
Screen.TwipsPerPixelY mwidth = r.Right - r.Left

<snip>

End Sub

Private Sub Form_Resize()
Dim nh&
Dim nw&
Dim r As Rect
Dim dummy&

If mheight <> 0 And mwidth <> 0 Then

dummy& = GetClientRect(Me.hwnd, r)
nh = (r.Bottom - r.Top) - mheight - Listappui.Top /
Screen.TwipsPerPixelY

If nh& > 0 Then
Listappuidissocie.Height = nh& * Screen.TwipsPerPixelY
Listexclu.Height = nh& * Screen.TwipsPerPixelY
Listappui.Height = nh& * Screen.TwipsPerPixelY
End If

End If

End Sub


Christophe Vergon


Avatar
Pascal B.
Bonjour Christophe,

Pour donner n'importe quelle hauteur à une ListBox, il faut mettre:

ListBox1.IntegralHeight = False


Pascal B.

"Christophe" <geo.ch@(wormfuck)tiscali.fr> wrote in message news:c62na8$r00$
| Bonjour,
|
| QQun peut-il m'expliquer le comportement d'un listbox lors d'un resize de la
| form conteneur.
|
| Je souhaite modifier la hauteur du listbox en fonction de celle de la
| fenetre.
| Ci-dessous le code qui marche sauf que:
| -l'augmentation de hauteur du listbox n'est pas proportionelle elle semble
| devoir se fixée automatiquement sur des valeurs arrondies, pourquoi ?
|
| sur load le code calcul l'espace entre le bas du listbox et le bas de la
| zone client de la fenetre, à l'affichage cet espace n'est pas constant lors
| du resize (nb l'affichage reste tout de même cohérent)
|
| Private Sub Form_Load()
| Dim r As Rect
| Dim dummy&
|
| <snip>
| dummy& = GetClientRect(Me.hwnd, r)
| mheight = (r.Bottom - r.Top) - Listappuidissocie.Top /
| Screen.TwipsPerPixelY - Listappuidissocie.Height / Screen.TwipsPerPixelY
| mwidth = r.Right - r.Left
|
| <snip>
|
| End Sub
|
| Private Sub Form_Resize()
| Dim nh&
| Dim nw&
| Dim r As Rect
| Dim dummy&
|
| If mheight <> 0 And mwidth <> 0 Then
|
| dummy& = GetClientRect(Me.hwnd, r)
| nh = (r.Bottom - r.Top) - mheight - Listappui.Top / Screen.TwipsPerPixelY
|
| If nh& > 0 Then
| Listappuidissocie.Height = nh& * Screen.TwipsPerPixelY
| Listexclu.Height = nh& * Screen.TwipsPerPixelY
| Listappui.Height = nh& * Screen.TwipsPerPixelY
| End If
|
| End If
|
| End Sub
|
|
| Christophe Vergon
|
|
Avatar
Christophe
Merci à tous les trois !

Christophe Vergon

"Christophe" <geo.ch@(wormfuck)tiscali.fr> a écrit dans le message de news:
c62na8$r00$
Bonjour,

QQun peut-il m'expliquer le comportement d'un listbox lors d'un resize de


la
form conteneur.

Je souhaite modifier la hauteur du listbox en fonction de celle de la
fenetre.
Ci-dessous le code qui marche sauf que:
-l'augmentation de hauteur du listbox n'est pas proportionelle elle semble
devoir se fixée automatiquement sur des valeurs arrondies, pourquoi ?

sur load le code calcul l'espace entre le bas du listbox et le bas de la
zone client de la fenetre, à l'affichage cet espace n'est pas constant


lors
du resize (nb l'affichage reste tout de même cohérent)

Private Sub Form_Load()
Dim r As Rect
Dim dummy&

<snip>
dummy& = GetClientRect(Me.hwnd, r)
mheight = (r.Bottom - r.Top) - Listappuidissocie.Top /
Screen.TwipsPerPixelY - Listappuidissocie.Height / Screen.TwipsPerPixelY
mwidth = r.Right - r.Left

<snip>

End Sub

Private Sub Form_Resize()
Dim nh&
Dim nw&
Dim r As Rect
Dim dummy&

If mheight <> 0 And mwidth <> 0 Then

dummy& = GetClientRect(Me.hwnd, r)
nh = (r.Bottom - r.Top) - mheight - Listappui.Top / Screen.TwipsPerPixelY

If nh& > 0 Then
Listappuidissocie.Height = nh& * Screen.TwipsPerPixelY
Listexclu.Height = nh& * Screen.TwipsPerPixelY
Listappui.Height = nh& * Screen.TwipsPerPixelY
End If

End If

End Sub


Christophe Vergon