Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Usar Tooltiptext en Combobox

Estas en el tema de Usar Tooltiptext en Combobox en el foro de Visual Basic clásico en Foros del Web. hola tengo una aplicación y por motivos de estética debe tener cierto tamaño pero en ocasiones el tamño del texto es mayor que el del ...
  #1 (permalink)  
Antiguo 25/08/2006, 14:47
 
Fecha de Ingreso: septiembre-2005
Mensajes: 99
Antigüedad: 19 años, 7 meses
Puntos: 0
Usar Tooltiptext en Combobox

hola tengo una aplicación y por motivos de estética debe tener cierto tamaño
pero en ocasiones el tamño del texto es mayor que el del combobox

entonces me gustaria que ala hora de desplegar el combobox ; al ir pasando entre cada opción se muestr el valor que tengo seleccionado en el tooltiptext

para de esta forma poder ver el valor



saludos y espero puedan ayudarme

Gracias
  #2 (permalink)  
Antiguo 29/08/2006, 18:48
 
Fecha de Ingreso: septiembre-2005
Mensajes: 99
Antigüedad: 19 años, 7 meses
Puntos: 0
alguna pista??
  #3 (permalink)  
Antiguo 30/08/2006, 05:40
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 19 años, 6 meses
Puntos: 13
Hola

No se como puedes hacer los que pides, yo lo que hago es utilizar una función, que al desplegar el combo el listado que aparece abajo se ajusta a la línea mas ancha.

Te dejo el código por si lo quieres probar (El código no es mio, lo baje de algún sitio que no recuerdo y lo pego tal y como esta)

Código:
'Code
'Written by JANO     [email protected]

'==========PARA AJUSTAR EL ANCHO DE LA SELECCIÓN DEL COMBO AL TEXTO==========

Option Explicit


Public Declare Function SendMessageLong Lib _
   "user32" Alias "SendMessageA" _
   (ByVal hwnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As Long) As Long

Public Const CB_GETLBTEXTLEN = &H149
Public Const CB_SETDROPPEDWIDTH = &H160
Public Const ANSI_VAR_FONT = 12

Type SIZE
  cx As Long
  cy As Long
End Type

Declare Function SelectObject Lib "gdi32" _
    (ByVal hDc As Long, ByVal hObject As Long) As Long

Declare Function GetTextExtentPoint32 Lib "gdi32" _
    Alias "GetTextExtentPoint32A" _
   (ByVal hDc As Long, _
    ByVal lpsz As String, _
    ByVal cbString As Long, _
    lpSize As SIZE) As Long

Declare Function GetStockObject Lib "gdi32" (ByVal nIndex As Long) As Long

Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDc As Long) As Long

Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

' Esta función calcula el ancho promedio de los caracteres,
' de acuerdo al tipo de letra del formulario
Public Function GetFontDialogUnits(frm As Form) As Long

   Dim hFont As Long
   Dim hFontOld As Long
   Dim r As Long
   Dim avgWidth As Long
   Dim hDc As Long
   Dim tmp As String
   Dim sz As SIZE
   
  'guardamos el hdc del formulario
   hDc = GetDC(frm.hwnd)
   
  'recibimos los atributos del tipo de letra actual
   hFont = GetStockObject(ANSI_VAR_FONT)
   hFontOld = SelectObject(hDc, hFont&)
   
  'calculamos su longitud y calculamos el ancho promedio de cada caráter
   tmp = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
   r = GetTextExtentPoint32(hDc, tmp, 52, sz)
   avgWidth = (sz.cx \ 52)
   
  'seleccionamos otra vez el anterior tipo de letra y eliminamos/liberamos el hdc anterior
   r = SelectObject(hDc, hFontOld)
   r = DeleteObject(hFont)
   r = ReleaseDC(frm.hwnd, hDc)
   
  'retornamos el valor obtenido
   GetFontDialogUnits = avgWidth

End Function

' Procedimiento que ajusta el ancho del Dropdown de un Combobox de acuerdo a su contenido
' Uselo cuando esté seguro de que el contenido va ser más ancho que el combobox
Public Sub ComboAutoSize(frm As Form, cbo As ComboBox)
    Dim r As Long
    Dim i As Long
    Dim NumOfChars As Long
    Dim LongestComboItem As Long
    Dim avgCharWidth As Long
    Dim NewDropDownWidth As Long
    
    'evaluamos cada entrada del Comoboentries, y usando SendMessageLong
    'con CB_GETLBTEXTLEN determinamos la longitud del elemento
    'en la porción dropdown del combo
    For i = 0 To cbo.ListCount - 1
        NumOfChars = SendMessageLong(cbo.hwnd, CB_GETLBTEXTLEN, i, 0)
        If NumOfChars > LongestComboItem Then LongestComboItem = NumOfChars
    Next
   
  'calculamos la longitud promedio de los carateres usando
  'la función GetFontDialogUnits. Como el tipo de letra usado en
  'GetFontDialogUnits es ficticio (es otro), el valor de avgCharWidth es sólo
  'una aproximación basada en la cadena utilizada
   avgCharWidth = GetFontDialogUnits(frm)
   
  'El tamaño del dropdown es acomodado a la cadena más larga.
   NewDropDownWidth = (LongestComboItem - 6) * avgCharWidth
   
  'ahora cambiamos el tamaño de porción DropDown del combobox
   r = SendMessageLong(cbo.hwnd, CB_SETDROPPEDWIDTH, NewDropDownWidth, 0)
 
End Sub
--Saludos--
  #4 (permalink)  
Antiguo 11/09/2006, 18:10
 
Fecha de Ingreso: septiembre-2005
Mensajes: 99
Antigüedad: 19 años, 7 meses
Puntos: 0
saludos y gracias por tu ayuda

vieras que lo probé y si bien aumenta un poco el tamaño, puse la palabra
"esta es la segunda prueba" y al mostrarlo loo hace hasta "esta es la segun"
y la primer palabra es "prueba1"

alguna sugerencia
  #5 (permalink)  
Antiguo 11/09/2006, 19:47
 
Fecha de Ingreso: abril-2005
Mensajes: 351
Antigüedad: 20 años
Puntos: 3
y porque no haces algo asi con espacios

Combo1.AddItem "prueba1"
Combo1.AddItem "esta es la segunda pruebaespacio"

luego los espacios se los puedes sacar

Private Sub Combo1_Click()
MsgBox Trim(Combo1.Text) & "!!!"
End Sub
__________________
www.leandroascierto.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:59.