OVH Cloud OVH Cloud

Un p'tit de ComboBox !!!???

13 réponses
Avatar
hken
Bonjour à tous et à toutes.
Alors voilà une petite question.
J'utilise un bout de code qui permet de développer la largeur de la ComboBox
(dropBox), ça fonctionne parfaitement. Mais comment faire pour choisir
soit un développement à gauche sous à droite de cette dropbox ???
Comme le fait Windows sur un click droit trop proche de la bordure de
l'écran. Si pas assez de place à droite... il le fait à gauche !!!
Merci d'avance à ceux et/ou celles qui me répondront...

--
Merci d''avance pour vos réponses !!

10 réponses

1 2
Avatar
scraper
Bonjour hken, dans le message
news:
tu disais :


Bonjour à tous et à toutes.
Alors voilà une petite question.
J'utilise un bout de code qui permet de développer la largeur de la
ComboBox (dropBox), ça fonctionne parfaitement. Mais comment faire
pour choisir
soit un développement à gauche sous à droite de cette dropbox ???
Comme le fait Windows sur un click droit trop proche de la bordure de
l'écran. Si pas assez de place à droite... il le fait à gauche !!!
Merci d'avance à ceux et/ou celles qui me répondront...



peut être en testant la valeur de Combo1.Left + Combo1.Width ?

si cette valeur est > Form1.Width, alors tu développes à gauche ....


--

Adresse invalide
Merci de répondre sur le forum ...
http://scraper.chez.tiscali.fr

scraper
Avatar
hken
Merci à toi d'avoir répondu..!!

C'est justement cela que je ne sais pas faire..!!!
Faire le développement sur la gauche !!!
Même si je place ma ComboBox à fond sur la droite... ba mon développement se
fait quand même sur la droite !!!

Après je pense que je ferais comme tu dis pour savoir vers quel côtè je vais
développer...

Je cherche partout et nobody pour me répondre...!!!
P't'être que c'est pas possible finalement ????
J'espère que si !!!
Avatar
hken
Voici le bout de code : (trouvé sur la FAQ)

'Celui-ci dans le module de la Form.
Private Sub Form_Load()
Combo1.AddItem "Jean"
Combo1.AddItem "Pierre"
'Combo1.AddItem "La largeur est de 350, pour diminuer ou augmenter, changer
ce chiffre." '70 caractères
LargeurCombo Combo1.hwnd, 700
End Sub

'Celui-ci dans un module
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As
Long, _
ByVal wParam As Long, lParam As Any)
As Long
Public Const CB_SETDROPPEDWIDTH = &H160

Public Sub LargeurCombo(hwnd As Long, largeur As Long)
SendMessage hwnd, CB_SETDROPPEDWIDTH, largeur, ByVal 0
End Sub


Il fonctionne à la perfection...

Je sais qu'il y a plein d'autres constantes pour les ComboBox...
Et je les ais toutes essayées !!! (sauf erreur de ma part)
Et aucunes ne fonctionnent pour que le développement s'effectue sur la
gauche !!!

Voili voilou... ci quelqu'un connait une astuce !!

Merci d'avance...
Avatar
scraper
Bonjour hken, dans le message
news:
tu disais :


Merci à toi d'avoir répondu..!!

C'est justement cela que je ne sais pas faire..!!!
Faire le développement sur la gauche !!!
Même si je place ma ComboBox à fond sur la droite... ba mon
développement se fait quand même sur la droite !!!

Après je pense que je ferais comme tu dis pour savoir vers quel côtè
je vais développer...

Je cherche partout et nobody pour me répondre...!!!
P't'être que c'est pas possible finalement ????
J'espère que si !!!



je sais pas si c'est possible ....
mais sinon, il te reste à déplacer toi même ton combo en jouant sur
Combo1.Left
(et à le redimensionner toi même avec Combo1.Width,éventuellement ?)



--

Adresse invalide
Merci de répondre sur le forum ...
http://scraper.chez.tiscali.fr

scraper
Avatar
hken
Comment ça en jouant sur Combo1.Left ??

J'ai déjà déplacé la ComboBox et ça ne fait rien !!!!
Une partie de la dropBox disparait de l'écran... c'est tout ce que ça fait
malheureusement !!! :(
Avatar
msnews.microsoft.com
Salut,

Bien qu'on t'ai passé un bout de code qui manifestement fonctionne mais
ne tient pas compte de l'emplacement, un combo a une liste, il doit en
permanence avoir la largeur de la plus grande des ses lignes, il ne change
pas de taille en fonction de la ligne présenté, ça pourrait même faire
bizarre...
Et pour avoir la plus grande taille, suffit dans les propriétés de l'écrire
à la main pour le régler (avec la police voulue)...
-----------------
Sinon, sur le principe, je n'ai pas testé, tu peux plus simplement (si ça
marche lors de l'exécution), noter la taille d'un caractère
dim taille as long
taille = ???

Puis tu calcule la longueur de la chaîne avec
X = Len(combo1.list(i))

Puis tu fais combo1.width = (X * taille) + les bords en largeur

Ensuite pour le positionner, tu modifies son Left suivant les marges de la
feuille, soit en gros:
dim leftMini
leftMini = form1.Widht - longueur maximum du combo
et
if combo1.left > leftMini then combo1.left = leftMini

NB, j'ai fait tout de tête, sans rien tester, il y a peut être des mises au
point à faire (pas le temps, désolé), et voir si c'est accepté en cours
d'interprétation (je ne sais pas), ça te sera dit par l'interprétateur
(teste juste combo1.left = 200, si ça plante tu sauras que ce n'est pas
possible rapidement)...
------------------------

"hken" a écrit dans le message de news:

Bonjour à tous et à toutes.
Alors voilà une petite question.
J'utilise un bout de code qui permet de développer la largeur de la
ComboBox
(dropBox), ça fonctionne parfaitement. Mais comment faire pour choisir
soit un développement à gauche sous à droite de cette dropbox ???
Comme le fait Windows sur un click droit trop proche de la bordure de
l'écran. Si pas assez de place à droite... il le fait à gauche !!!
Merci d'avance à ceux et/ou celles qui me répondront...

--
Merci d''avance pour vos réponses !!




Avatar
Salut,

Bien qu'on t'ai passé un bout de code qui manifestement fonctionne mais
ne tient pas compte de l'emplacement, un combo a une liste, il doit en
permanence avoir la largeur de la plus grande des ses lignes, il ne change
pas de taille en fonction de la ligne présenté, ça pourrait même faire
bizarre...
Et pour avoir la plus grande taille, suffit dans les propriétés de l'écrire
à la main pour le régler (avec la police voulue)...
-----------------
Sinon, sur le principe, je n'ai pas testé, tu peux plus simplement (si ça
marche lors de l'exécution), noter la taille d'un caractère
dim taille as long
taille = ???

Puis tu calcule la longueur de la chaîne avec
X = Len(combo1.list(i))

Puis tu fais combo1.width = (X * taille) + les bords en largeur

Ensuite pour le positionner, tu modifies son Left suivant les marges de la
feuille, soit en gros:
dim leftMini
leftMini = form1.Widht - longueur maximum du combo
et
if combo1.left > leftMini then combo1.left = leftMini

NB, j'ai fait tout de tête, sans rien tester, il y a peut être des mises au
point à faire (pas le temps, désolé), et voir si c'est accepté en cours
d'interprétation (je ne sais pas), ça te sera dit par l'interprétateur
(teste juste combo1.left = 200, si ça plante tu sauras que ce n'est pas
possible rapidement)...
------------------------


"hken" a écrit dans le message de news:

Bonjour à tous et à toutes.
Alors voilà une petite question.
J'utilise un bout de code qui permet de développer la largeur de la
ComboBox
(dropBox), ça fonctionne parfaitement. Mais comment faire pour choisir
soit un développement à gauche sous à droite de cette dropbox ???
Comme le fait Windows sur un click droit trop proche de la bordure de
l'écran. Si pas assez de place à droite... il le fait à gauche !!!
Merci d'avance à ceux et/ou celles qui me répondront...

--
Merci d''avance pour vos réponses !!




Avatar
hken
Merci à toi Cyprine...

Tout ça je sais déjà le faire, aucun pb.
Je dois mal poser ma question, alors je recommence.

J'ai un bout de code. Ce dernier me permet de modifier la largeur de la list
d'une ComboBox. Ce code n'a pas pour but de modifier la largeur du ComboBox
lui même (au sens Combo1.Width = xxx).

Imaginons que mon Combo est une largeur de X. (Combo1.Width = X)
Que le plus grand des Items contenue dans ce Combo soit de Y (LargeurItemMax
= Len(Combo1.list(i)) )
En partant de l'hypothèse que Y > X alors en cliquant sur mon Combo, je ne
verrais pas la totalité de mon Item le plus large. Normal.

Le but de ce petit bout de code
(http://vb.developpez.com/faq/?page=Controles#combo_larg) et de me pemet de
modifier la largeur de la zone de déroulement. Ainsi, si je connais Y, je
peux adapter cette longueur !!!
Et tous ça fonctionne parfaitement bien.....!!! Prend le code, test le, et
tu verras que la largeur de la zone déroulant et bien modifiée... bien
modifié vers la droite !!!
Toujours vers la droite...!! et c'est la mon pb !!!!

Le pb, c'est que si ma ComboBox se trouve très proche de l'extrémité droite
de mon écran... alors il se peut, avec ce bout de code, qu'une partie de la
zone déroulante ne soit plus visible...j'ai ralonger la largeur de la zone
déroulante et je ne vois plus tout !!!!
Ce que j'aimerais bien faire, c'est que au lieu que l'élargissement de la
zone déroulante se fasse forcément vers la droite, je puisse choisir de le
faire vers la gauche !!!???

C'est ça ma question !!!

Pour être encore plus simple, c'est comme quand tu fais un click droite
alors que ton curseur se trouve à proximité du bord droit de l'écran... et
ben au lien de faire apparaitre le MenuPopUp vers la droite de ton curseur
(fonctionnement classique) et bien il le fait apparaitre sur la gauche!!! il
le fait apparaitre vers la gauche de ton curseur parce que vers la droite tu
ne pourrais ps tout voir !!!

Donc si quelqu'un connais une constante de ComboBox ou quoi que ce soit qui
pourrais me permettre de faire ce que je désire... je l'en remercie pas
avance.

Merci.
Avatar
Jacques93
hken a écrit :
Bonjour à tous et à toutes.
Alors voilà une petite question.
J'utilise un bout de code qui permet de développer la largeur de la ComboBox
(dropBox), ça fonctionne parfaitement. Mais comment faire pour choisir
soit un développement à gauche sous à droite de cette dropbox ???
Comme le fait Windows sur un click droit trop proche de la bordure de
l'écran. Si pas assez de place à droite... il le fait à gauche !!!
Merci d'avance à ceux et/ou celles qui me répondront...




Tu peux essayer ceci :
(Nécessite Windows 98, 2000 ou XP)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/comboboxes/comboboxreference/comboboxfunctions/getcomboboxinfo.asp

Option Explicit

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Type COMBOBOXINFO
cbSize As Long
rcItem As RECT
rcButton As RECT
stateButton As Long
hwndCombo As Long
hwndEdit As Long
hWndList As Long
End Type

Private Declare Function GetComboBoxInfo Lib "user32" (ByVal hwndCombo
As Long, CBInfo As COMBOBOXINFO) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long,
lpRect As RECT) As Long

Private Const HWND_TOP = 0
Private Const SWP_NOSIZE = &H1
Private Const SWP_SHOWWINDOW = &H40
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long,
ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal
Cx As Long, ByVal Cy As Long, ByVal wFlags As Long) As Long


Private Sub Form_Load()
With Me.Combo1
.AddItem "aaaaaaa"
.AddItem "bbbbbbb"
.AddItem "ccccccc"
.AddItem "ddddddd"
.AddItem "eeeeeee"
.AddItem "fffffff"
End With

End Sub

Private Sub Combo1_DropDown()
Timer1.Interval = 5
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
PosComboList -20 ' à ajuster
Timer1.Enabled = False
End Sub

Private Sub PosComboList(Decalage As Integer)
Dim hList As Long
Dim rc As RECT

hList = GetComboListHandle(Combo1)
GetWindowRect hList, rc
SetWindowPos hList, HWND_TOP, rc.Left + Decalage, rc.Top, 0&, 0&,
SWP_NOSIZE Or SWP_SHOWWINDOW
End Sub

Private Function GetComboListHandle(ctl As ComboBox) As Long
Dim CBI As COMBOBOXINFO

CBI.cbSize = Len(CBI)
GetComboBoxInfo ctl.hwnd, CBI
GetComboListHandle = CBI.hWndList
End Function


--
Cordialement,

Jacques.
Avatar
hken
Yes... c'est un truc comme ça qu'il me faut !!!!

Un grand merci à toi Jacques93... c'est vraiment cool !!!

J'vais creuser dans ce sens...
Il faut pas qu'j'utilise de Timer par contre

Encore merci... si j'ai des pbs de toute façon je poserais des questions !!
1 2