elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  VB6: ComboBox con "Separador" de texto
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: VB6: ComboBox con "Separador" de texto  (Leído 9,112 veces)
bizco


Desconectado Desconectado

Mensajes: 698


Ver Perfil
Re: VB6: ComboBox con "Separador" de texto
« Respuesta #10 en: 23 Agosto 2010, 04:31 am »

la opcion de leandro seria lo mejor, aparte de eso, implementas un form sin bordes y cuando se hace click en el combo lo muestras como si fuese el dropdown original. de esta forma puedes personalizarlo 100%. incluso si en el segundo form metes un treeview vas a poder tener items con subitems dentro ;).


En línea

ProgramadorVB

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Re: VB6: ComboBox con "Separador" de texto
« Respuesta #11 en: 23 Agosto 2010, 12:50 pm »

hola amigos... muy buenos días a todos...


rob1104,
Sí ya probé tu ejemplo... es bueno... pero no es exactamente lo que me gustaría usar... igualmente te agradezco por tu ayuda, de verdad.


ctlon,
Lo de Leandro es poderoso, sería LA SOLUCIÓN... pero no tengo ni la capacidad... ni el tiempo físico para hacerlo yo mismo... ya que me llevaría varios días, con suerte...

Igualmente, estoy pensando (publiqué pensandolo desde el principio)... en que alguien sepa donde encontrar esa solución, ya resuelta... ya que seguramente eso que quiero hacer... o algo muy similar... ya fue creado por otro programador, en este mismo lenguaje VB6... no creo que esa ocurrencia, sea exclusiva mia... ni que eso no exista publicado en internet al día de hoy... el asunto es... que no lo pude encontrar... puse varios terminos de busqueda alternativos... y nada... nada para este lenguaje.

Desde ya muchas gracias... si acaso, accidentalmente encuentro la solución... la publicaré...

Un saludo!!!!


En línea

Tokes

Desconectado Desconectado

Mensajes: 140


Ver Perfil
Re: VB6: ComboBox con "Separador" de texto
« Respuesta #12 en: 23 Agosto 2010, 16:44 pm »

Buen día, muchacho(a):

Prueba con este sencillo código y si no te sirve (o no te gusta), lo siento, no puedo hacer más por tí.

Para correrlo necesitas un Combo1 y un Text1. En el combo seleccionas la comida o bebida y en el Text te muestra el precio.

Código:
Option Explicit

Dim precios As New Collection

Private Sub Combo1_Click()
    Text1.Text = precios.Item(Combo1.ListIndex + 1)
    If Val(Text1.Text) = 0 Then
        Text1.Text = " - "
    End If
End Sub

Private Sub Form_Load()
    Text1.Text = ""
    Combo1.AddItem ("----comidas----")
    precios.Add ""
    Combo1.AddItem ("pizza")
    precios.Add 110
    Combo1.AddItem ("pollo")
    precios.Add 65
    Combo1.AddItem ("choripan")
    precios.Add 20
    Combo1.AddItem ("----bebidas----")
    precios.Add ""
    Combo1.AddItem ("agua")
    precios.Add 8.5
    Combo1.AddItem ("cerveza")
    precios.Add 15
    Combo1.AddItem ("gaseosa")
    precios.Add 10.5
    Combo1.AddItem ("vino")
    precios.Add 30

    Combo1.ListIndex = 0
End Sub

                  Saludos.
En línea

ProgramadorVB

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Re: VB6: ComboBox con "Separador" de texto
« Respuesta #13 en: 23 Agosto 2010, 19:05 pm »

Tokes,

Excelente aporte, muchas gracias...


Sin más comentarios...


Un saludo
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: VB6: ComboBox con "Separador" de texto
« Respuesta #14 en: 23 Agosto 2010, 19:28 pm »

Es mejor SubClasificar el ComboBox asi evitamos un PArpadeo como el codigo siguente, es algo cutre pero bueno de algo te servira!¡.

En un Modulo de Clase

Cls_CmbBox.cls

Código
  1.  
  2. Option Explicit
  3.  
  4. Public WithEvents CmbBox                    As ComboBox
  5. Public StrToVerific                         As String
  6. Public StrExplicit                          As Boolean
  7. Private SwitchErr                           As Boolean
  8. Event ErrorSel()
  9.  
  10. Private Sub CmbBox_click()
  11. Dim CmbBox_Index            As Long
  12. Dim LenV                    As Long
  13.    If SwitchErr = False Then SwitchErr = Not SwitchErr: Exit Sub
  14.    With CmbBox
  15.        LenV = Len(StrToVerific)
  16.        If LenV <= 0 Then Exit Sub
  17.        For CmbBox_Index = .ListIndex To 1 Step -1
  18.            If Len(.List(CmbBox_Index)) >= LenV Then
  19.                If StrComp(Left$(.List(CmbBox_Index), Len(StrToVerific)), StrToVerific, Abs(Not StrExplicit)) = 0 Then
  20. '                    CmbBox.Text = .List(CmbBox_Index)
  21.                    .ListIndex = CmbBox_Index ' // "es lo mismo que la linea de arriba" solo que rehubica el item seleccionado
  22.                    Exit For
  23.                End If
  24.            End If
  25.        Next CmbBox_Index
  26.        If CmbBox_Index <= 0 Then RaiseEvent ErrorSel
  27.    End With
  28. End Sub
  29.  
  30.  

Codigo prueba en un Form.

Agrega run ComboBox con nombre Combo1

Código
  1.  
  2. Option Explicit
  3.  
  4. Private WithEvents ClsCmbBox            As Cls_CmbBox
  5.  
  6. Private Sub ClsCmbBox_ErrorSel()
  7.    Caption = "Error"
  8. End Sub
  9.  
  10. Private Sub Combo1_Click()
  11.    Caption = Combo1.Text
  12. End Sub
  13.  
  14. Private Sub Form_Load()
  15.    Set ClsCmbBox = New Cls_CmbBox
  16.    With ClsCmbBox
  17.        Set .CmbBox = Combo1
  18.        .StrExplicit = True
  19.        .StrToVerific = "----"
  20.    End With
  21.    Combo1.AddItem ("Miguel")
  22.    Combo1.AddItem ("Angel")
  23.    Combo1.AddItem ("Ortega")
  24.    Combo1.AddItem ("Avila")
  25.    Combo1.AddItem ("----comidas----")
  26.    Combo1.AddItem ("pizza")
  27.    Combo1.AddItem ("pollo")
  28.    Combo1.AddItem ("choripan")
  29.    Combo1.AddItem ("----bebidas----")
  30.    Combo1.AddItem ("agua")
  31.    Combo1.AddItem ("cerveza")
  32.    Combo1.AddItem ("gaseosa")
  33.    Combo1.AddItem ("vino")
  34.    Combo1.ListIndex = 0
  35. End Sub
  36.  
  37.  

Dulces Lunas!¡.
« Última modificación: 23 Agosto 2010, 19:42 pm por BlackZeroX » En línea

The Dark Shadow is my passion.
seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: VB6: ComboBox con "Separador" de texto
« Respuesta #15 en: 24 Agosto 2010, 06:47 am »

o tambien guardar en algun lado los items que no podes seleccionar y cuando el usuario los seleccione simplemente no haces nada...

aca te paso un ejemplo que se me ocurrio, el ejemplo principal pinta los items de diferentes colores, en este ejemplo pinte los deshabilitados de color gris...probalo y me contas.


En un Modulo (bas)


Código
  1. Option Explicit
  2.  
  3. Private Type RECT
  4.    Left As Long
  5.    Top As Long
  6.    Right As Long
  7.    Bottom As Long
  8. End Type
  9.  
  10. Private Type DRAWITEMSTRUCT
  11.    CtlType As Long
  12.    CtlID As Long
  13.    itemID As Long
  14.    itemAction As Long
  15.    itemState As Long
  16.    hwndItem As Long
  17.    hdc As Long
  18.    rcItem As RECT
  19.    itemData As Long
  20. End Type
  21.  
  22. Private Type CWPSTRUCT
  23.    lParam As Long
  24.    wParam As Long
  25.    message As Long
  26.    hWnd As Long
  27. End Type
  28.  
  29. Private Type CREATESTRUCT
  30.    lpCreateParams As Long
  31.    hInstance As Long
  32.    hMenu As Long
  33.    hWndParent As Long
  34.    cy As Long
  35.    cx As Long
  36.    y As Long
  37.    x As Long
  38.    style As Long
  39.    lpszName As Long
  40.    lpszClass As Long
  41.    ExStyle As Long
  42. End Type
  43.  
  44. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
  45. Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  46. Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  47. 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
  48. Private Declare Function SetBkColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
  49. Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
  50. Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
  51. Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
  52. Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
  53. Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
  54. Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
  55. Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
  56. Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
  57. Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
  58.  
  59. Private Const WH_CALLWNDPROC = 4
  60. Private Const CBS_OWNERDRAWVARIABLE = &H20&
  61. Private Const CB_GETLBTEXT = &H148
  62. Private Const COLOR_HIGHLIGHT = 13
  63. Private Const COLOR_HIGHLIGHTTEXT = 14
  64. Private Const COLOR_WINDOW = 5
  65. Private Const COLOR_WINDOWTEXT = 8
  66. Private Const GWL_WNDPROC = (-4)
  67. Private Const GWL_STYLE = (-16)
  68. Private Const ODS_SELECTED = &H1
  69. Private Const ODT_COMBOBOX = 3
  70. Private Const WM_CREATE = &H1
  71. Private Const WM_DRAWITEM = &H2B
  72.  
  73. Private lPrevWndProc As Long
  74. Private lHook As Long
  75. Private lSubCombo As Long
  76.  
  77. Sub Main()
  78.    lHook = SetWindowsHookEx(WH_CALLWNDPROC, AddressOf HookApp, App.hInstance, App.ThreadID)
  79.    Form1.Show
  80.    Call UnhookWindowsHookEx(lHook)
  81. End Sub
  82.  
  83. Public Sub SubClassForm(ByVal hWnd As Long)
  84.    lPrevWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf SubClassedForm)
  85. End Sub
  86.  
  87. Public Sub RemoveSubClassing(ByVal hWnd As Long)
  88.    Call SetWindowLong(hWnd, GWL_WNDPROC, lPrevWndProc)
  89. End Sub
  90.  
  91. Public Function SubClassedForm(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  92.    Dim tItem As DRAWITEMSTRUCT
  93.    Dim sItem As String
  94.    Dim lBackBrush As Long
  95.  
  96.    If Msg = WM_DRAWITEM Then
  97.        Call CopyMemory(tItem, ByVal lParam, Len(tItem))
  98.        If tItem.CtlType = ODT_COMBOBOX Then
  99.            sItem = Space(255)
  100.            Call SendMessage(tItem.hwndItem, CB_GETLBTEXT, tItem.itemID, ByVal sItem)
  101.            sItem = Left(sItem, InStr(sItem, Chr(0)) - 1)
  102.            If (tItem.itemState And ODS_SELECTED) Then
  103.                lBackBrush = CreateSolidBrush(GetSysColor(COLOR_HIGHLIGHT))
  104.                Call SetBkColor(tItem.hdc, GetSysColor(COLOR_HIGHLIGHT))
  105.                Call SetTextColor(tItem.hdc, GetSysColor(COLOR_HIGHLIGHTTEXT))
  106.            Else
  107.                lBackBrush = CreateSolidBrush(GetSysColor(COLOR_WINDOW))
  108.                Call SetBkColor(tItem.hdc, GetSysColor(COLOR_WINDOW))
  109.                Call SetTextColor(tItem.hdc, tItem.itemData)
  110.            End If
  111.            FillRect tItem.hdc, tItem.rcItem, lBackBrush
  112.            TextOut tItem.hdc, tItem.rcItem.Left, tItem.rcItem.Top, ByVal sItem, Len(sItem)
  113.            SubClassedForm = 0
  114.            Exit Function
  115.        End If
  116.    End If
  117.    SubClassedForm = CallWindowProc(lPrevWndProc, hWnd, Msg, wParam, lParam)
  118. End Function
  119.  
  120. Private Function HookApp(ByVal lHookID As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  121.    Dim tCWP As CWPSTRUCT
  122.    Dim sClass As String
  123.  
  124.    Call CopyMemory(tCWP, ByVal lParam, Len(tCWP))
  125.    If tCWP.message = WM_CREATE Then
  126.        sClass = Space(128)
  127.        Call GetClassName(tCWP.hWnd, ByVal sClass, 128)
  128.        sClass = Left(sClass, InStr(sClass, Chr(0)) - 1)
  129.        If sClass = "ComboLBox" Then
  130.            lSubCombo = SetWindowLong(tCWP.hWnd, GWL_WNDPROC, AddressOf SubComboCreate)
  131.        End If
  132.    End If
  133.    HookApp = CallNextHookEx(lHook, lHookID, wParam, ByVal lParam)
  134. End Function
  135.  
  136. Private Function SubComboCreate(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  137.    Dim tCreate As CREATESTRUCT
  138.  
  139.    If Msg = WM_CREATE Then
  140.        Call CopyMemory(tCreate, ByVal lParam, Len(tCreate))
  141.        tCreate.style = tCreate.style Or CBS_OWNERDRAWVARIABLE
  142.        Call CopyMemory(ByVal lParam, tCreate, Len(tCreate))
  143.        Call SetWindowLong(hWnd, GWL_STYLE, tCreate.style)
  144.        Call SetWindowLong(hWnd, GWL_WNDPROC, lSubCombo)
  145.    End If
  146.    SubComboCreate = CallWindowProc(lSubCombo, hWnd, Msg, wParam, lParam)
  147. End Function
  148.  

En el Formulario, con un combobox llamado Combo1

Código
  1. Option Explicit
  2.  
  3. Dim vIndiceAnterior As Long
  4.  
  5. Private Sub Combo1_Change()
  6.    Call Combo1_Click
  7. End Sub
  8.  
  9. Private Sub Combo1_Click()
  10.    Select Case Combo1.ListIndex
  11.        Case 2, 4, 6
  12.            MsgBox "Item Deshabilitado"
  13.            Combo1.ListIndex = vIndiceAnterior
  14.        Case Else
  15.            Me.Caption = "Item Seleccionado"
  16.            vIndiceAnterior = Combo1.ListIndex
  17.    End Select
  18. End Sub
  19.  
  20. Private Sub Form_Load()
  21.  
  22.    With Combo1
  23.        .AddItem ("Item Normal 1")
  24.        .itemData(.NewIndex) = vbBlack
  25.        .AddItem ("Item Normal 2")
  26.        .itemData(.NewIndex) = vbBlack
  27.        .AddItem ("Item Deshabilitado 1")
  28.        .itemData(.NewIndex) = &HE0E0E0
  29.        .AddItem ("Item Normal 3")
  30.        .itemData(.NewIndex) = vbBlack
  31.        .AddItem ("Item Deshabilitado 3")
  32.        .itemData(.NewIndex) = &HE0E0E0
  33.        .AddItem ("Item Normal 4")
  34.        .itemData(.NewIndex) = vbBlack
  35.        .AddItem ("Item Deshabilitado 3")
  36.        .itemData(.NewIndex) = &HE0E0E0
  37.        .ListIndex = 0
  38.  
  39.        vIndiceAnterior = .ListIndex
  40.    End With
  41.  
  42.    Call SubClassForm(Me.hWnd)
  43. End Sub
  44.  
  45. Private Sub Form_Unload(Cancel As Integer)
  46.    Call RemoveSubClassing(Me.hWnd)
  47. End Sub

saludos.
En línea

rob1104


Desconectado Desconectado

Mensajes: 340


Usuario común


Ver Perfil WWW
Re: VB6: ComboBox con "Separador" de texto
« Respuesta #16 en: 24 Agosto 2010, 07:52 am »

Jaja, me parece mucho esfuerzo y la verdad perdida de tiempo para una cosa de estetica y diseño. Pero bueno, cada quien tiene su forma de trabajar.

Suerte..
En línea

Sin análisis de requisitos o sin diseño, programar es el arte de crear errores en un documento de texto vacío.
ProgramadorVB

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Re: VB6: ComboBox con "Separador" de texto
« Respuesta #17 en: 26 Agosto 2010, 21:23 pm »

seba123neo,

 ;-) Impresionante... te felicito y agradezco mucho por tu esfuerzo...


Chicos, gracias por todo, doy por terminado este tema...

 ;D  Un saludo y suerte!!!
En línea

ProgramadorVB

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Re: VB6: ComboBox con "Separador" de texto
« Respuesta #18 en: 26 Agosto 2010, 21:29 pm »

Jaja, me parece mucho esfuerzo y la verdad perdida de tiempo para una cosa de estetica y diseño. Pero bueno, cada quien tiene su forma de trabajar.

Suerte..


He... gracias por el comentario, pero la verdad que no tiene valor de uso...
« Última modificación: 26 Agosto 2010, 21:32 pm por ProgramadorVB » En línea

rob1104


Desconectado Desconectado

Mensajes: 340


Usuario común


Ver Perfil WWW
Re: VB6: ComboBox con "Separador" de texto
« Respuesta #19 en: 27 Agosto 2010, 04:16 am »

Jaja, me parece mucho esfuerzo y la verdad perdida de tiempo para una cosa de estetica y diseño. Pero bueno, cada quien tiene su forma de trabajar.

Suerte..


He... gracias por el comentario, pero la verdad que no tiene valor de uso...
Eso dices ahora, pero espero nunca te encuentres en una situación contrareloj donde la funcionalidad sea más importante que el diseño. Mientras tanto puedes perder días en mejorar las situaciones secundarias de los programas.

Saludos
En línea

Sin análisis de requisitos o sin diseño, programar es el arte de crear errores en un documento de texto vacío.
Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
COGER TEXTO DE UN COMBOBOX
Java
YanOner 1 2,703 Último mensaje 6 Febrero 2012, 02:04 am
por YanOner
Cambiar separador de campo
Scripting
morsas 6 2,526 Último mensaje 20 Septiembre 2013, 11:27 am
por Almapa
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines