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

mostrar el contenido completo de un texto en un combo box

Estas en el tema de mostrar el contenido completo de un texto en un combo box en el foro de Visual Basic clásico en Foros del Web. Hola que tal amigos! Mi duda es la siguiente; tengo varias lineas de texto que a su vez son una lista de opciones dentro de ...
  #1 (permalink)  
Antiguo 27/08/2007, 12:50
Avatar de vhpc  
Fecha de Ingreso: mayo-2005
Mensajes: 66
Antigüedad: 19 años
Puntos: 0
mostrar el contenido completo de un texto en un combo box

Hola que tal amigos!
Mi duda es la siguiente; tengo varias lineas de texto que a su vez son una lista de opciones dentro de un combo box y lo que deseo es que al momento de desplegar el combo este me muestre toda la información contenida en dicho control y no entrecortada, es decir por ejemplo: yo tengo una línea que tiene este tamaño de puras "AAAAAAAA AAA AAA AAAAAAAAAAAAAAAA AAAAAAAAAAAA AAAAAAAAA AAAAAAAA"
yo deseo que al momento de expandir el combo me muestre toda la cadena y no solo una parte, espero poderme hacer entender, no se si alguna propeidad del mismo objeto me da esta posibilidad o tengo que programar algo.
Como siempre cualquier ayuda de ustedes es y será siempre valioza...
Gracias
  #2 (permalink)  
Antiguo 28/08/2007, 00:45
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Re: mostrar el contenido completo de un texto en un combo box

Hola

El combo no tiene una propiedad para ello, pero con las siguientes API s puedes realizarlo. Añade todo este código a un módulo en tu proyecto (tal cual esta, copiar y pegar en el módulo)

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
Como puedes ver el código no es mio, lo pongo tal cual como yo lo baje de internet, conservando el nombre del autor. Para utilizar el código solo tienes que poner en el Form_Activate del Formulario que contiene el combo la siguiente llamada:

Código:
ComboAutoSize NombreForm, NombreCombo
--Saludos--
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 15:09.