perathoner
Messages postés90Date d'inscriptiondimanche 5 novembre 2000StatutMembreDernière intervention26 juillet 2006
-
13 sept. 2005 à 12:51
perathoner
Messages postés90Date d'inscriptiondimanche 5 novembre 2000StatutMembreDernière intervention26 juillet 2006
-
13 sept. 2005 à 13:24
Bonjour à toutes et à tous.
Voilà une p'tite question toute simple.
Peux t'on (et dans ce cas, comment fait-on!!!) pour choisir l'alignement du texte dans une ComboBox (vbLeftJustify, vbRightJustify, vbCenter) comme pour une TextBox.
perathoner
Messages postés90Date d'inscriptiondimanche 5 novembre 2000StatutMembreDernière intervention26 juillet 2006 13 sept. 2005 à 13:24
Merci à vous d'avoir répondu...
Salut jpleroisse. encore merci pour ton code la dernière fois!!!
Ba si en fait ça peux être utile dans mon cas!!!
Suite à ton code, j'ai réussi à développer la liste déroulante d'une ComboBox au choix vers la droite (par défaut) ou vers la gauche si pas assez de place sur la droite!!!
La pb c'est que des fois les Items sont tellement long qu'on en voient pas le début !!!
et qu'un p'tit décalage (alignement) du texte vers la droite (dans le cas d'un développement de la liste déroulant du ComboBox vers la gauche) serais le bienvenu...
J'te passe le code pour info
'###### dans le module de la Form
Option Explicit
'Largeur (en PIXEL) du développement du ComboBox
Public MyComboLargeur As Long
Private Sub Form_Load()
With Me.Combo1
.AddItem "aaaaaaa"
.AddItem "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
End With
'Initialisation de la taille du développement du ComboBox
MyComboLargeur = 700
'Dimensionnement de la largeur de la partie déroulate du ComboBox.
LargeurCombo Combo1.hwnd, MyComboLargeur
End Sub
'Déroulement de la liste
Private Sub Combo1_DropDown()
Dim ret As Single
'Initialisation
ret = 0
'Décision
If ret > Screen.Width Then
'Décalage du menu déroulant de la ComboBox vers la gauche
Form1.Timer1.Interval = 5
Form1.Timer1.Enabled = True
End If
End Sub
Private Sub Timer1_Timer()
PosComboList -(((15360 / 1024) * MyComboLargeur - Me.Combo1.Width) * 1024) / 15360
Timer1.Enabled = False
End Sub
'####Dans un Module
Option Explicit
'Declaration
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 Const HWND_TOP = 0
Private Const SWP_NOSIZE = &H1
Private Const SWP_SHOWWINDOW = &H40
Public Const CB_SETDROPPEDWIDTH = &H160
Public Const CB_SHOWDROPDOWN = &H14F
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
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 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
Public Sub LargeurCombo(hwnd As Long, largeur As Long)
'Dimensionnement de la largeur de la partie déroulate du ComboBox.
SendMessage hwnd, CB_SETDROPPEDWIDTH, largeur, ByVal 0
End Sub
Public Function GetComboListHandle(ctl As ComboBox) As Long
Dim CBI As COMBOBOXINFO
CBI.cbSize = Len(CBI)
GetComboBoxInfo ctl.hwnd, CBI
GetComboListHandle = CBI.hWndList
End Function
Public Sub PosComboList(Decalage As Integer)
Dim hList As Long
Dim rc As RECT
hList = GetComboListHandle(Form1.Combo1)
GetWindowRect hList, rc
SetWindowPos hList, HWND_TOP, rc.Left + Decalage, rc.Top, 0&, 0&, SWP_NOSIZE Or SWP_SHOWWINDOW
End Sub
Il te faut juste une ComboBox (ComboBox1) un Timer (Timer1)... et le tour est joué!!!
Tu fais une Form de petite dimension et tu la déplace sur ton écran.
Quand t'es trop près de la droite de l'écran... la ComboBox se développe à gauche... et réciproquement...