Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - seba123neo

#331
pedis algo que parece facil, pero VB6 no lo ofrece, por lo tanto tenes que escribir una chorrada de codigo para hacer eso que queres, aca te dejo igual el codigo para hacer eso, pero te recomiendo que uses un usercontrol como el que te dijeron arriba.

en un modulo (bas)

Código (vb) [Seleccionar]
Option Explicit

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

Private Type DRAWITEMSTRUCT
    CtlType As Long
    CtlID As Long
    itemID As Long
    itemAction As Long
    itemState As Long
    hwndItem As Long
    hdc As Long
    rcItem As RECT
    itemData As Long
End Type

Private Type CWPSTRUCT
    lParam As Long
    wParam As Long
    message As Long
    hWnd As Long
End Type

Private Type CREATESTRUCT
    lpCreateParams As Long
    hInstance As Long
    hMenu As Long
    hWndParent As Long
    cy As Long
    cx As Long
    y As Long
    x As Long
    style As Long
    lpszName As Long
    lpszClass As Long
    ExStyle As Long
End Type

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
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
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 SetBkColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
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
Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
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
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long

Private Const WH_CALLWNDPROC = 4
Private Const CBS_OWNERDRAWVARIABLE = &H20&
Private Const CB_GETLBTEXT = &H148
Private Const COLOR_HIGHLIGHT = 13
Private Const COLOR_HIGHLIGHTTEXT = 14
Private Const COLOR_WINDOW = 5
Private Const COLOR_WINDOWTEXT = 8
Private Const GWL_WNDPROC = (-4)
Private Const GWL_STYLE = (-16)
Private Const ODS_SELECTED = &H1
Private Const ODT_COMBOBOX = 3
Private Const WM_CREATE = &H1
Private Const WM_DRAWITEM = &H2B

Private lPrevWndProc As Long
Private lHook As Long
Private lSubCombo As Long

Sub Main()
    lHook = SetWindowsHookEx(WH_CALLWNDPROC, AddressOf HookApp, App.hInstance, App.ThreadID)
    Form1.Show
    Call UnhookWindowsHookEx(lHook)
End Sub

Public Sub SubClassForm(ByVal hWnd As Long)
    lPrevWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf SubClassedForm)
End Sub

Public Sub RemoveSubClassing(ByVal hWnd As Long)
    Call SetWindowLong(hWnd, GWL_WNDPROC, lPrevWndProc)
End Sub

Public Function SubClassedForm(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim tItem As DRAWITEMSTRUCT
    Dim sItem As String
    Dim lBackBrush As Long

    If Msg = WM_DRAWITEM Then
        Call CopyMemory(tItem, ByVal lParam, Len(tItem))
        If tItem.CtlType = ODT_COMBOBOX Then
            sItem = Space(255)
            Call SendMessage(tItem.hwndItem, CB_GETLBTEXT, tItem.itemID, ByVal sItem)
            sItem = Left(sItem, InStr(sItem, Chr(0)) - 1)
            If (tItem.itemState And ODS_SELECTED) Then
                lBackBrush = CreateSolidBrush(GetSysColor(COLOR_HIGHLIGHT))
                Call SetBkColor(tItem.hdc, GetSysColor(COLOR_HIGHLIGHT))
                Call SetTextColor(tItem.hdc, GetSysColor(COLOR_HIGHLIGHTTEXT))
            Else
                lBackBrush = CreateSolidBrush(GetSysColor(COLOR_WINDOW))
                Call SetBkColor(tItem.hdc, GetSysColor(COLOR_WINDOW))
                Call SetTextColor(tItem.hdc, tItem.itemData)
            End If
            FillRect tItem.hdc, tItem.rcItem, lBackBrush
            TextOut tItem.hdc, tItem.rcItem.Left, tItem.rcItem.Top, ByVal sItem, Len(sItem)
            SubClassedForm = 0
            Exit Function
        End If
    End If
    SubClassedForm = CallWindowProc(lPrevWndProc, hWnd, Msg, wParam, lParam)
End Function

Private Function HookApp(ByVal lHookID As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim tCWP As CWPSTRUCT
    Dim sClass As String

    Call CopyMemory(tCWP, ByVal lParam, Len(tCWP))
    If tCWP.message = WM_CREATE Then
        sClass = Space(128)
        Call GetClassName(tCWP.hWnd, ByVal sClass, 128)
        sClass = Left(sClass, InStr(sClass, Chr(0)) - 1)
        If sClass = "ComboLBox" Then
            lSubCombo = SetWindowLong(tCWP.hWnd, GWL_WNDPROC, AddressOf SubComboCreate)
        End If
    End If
    HookApp = CallNextHookEx(lHook, lHookID, wParam, ByVal lParam)
End Function

Private Function SubComboCreate(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim tCreate As CREATESTRUCT

    If Msg = WM_CREATE Then
        Call CopyMemory(tCreate, ByVal lParam, Len(tCreate))
        tCreate.style = tCreate.style Or CBS_OWNERDRAWVARIABLE
        Call CopyMemory(ByVal lParam, tCreate, Len(tCreate))
        Call SetWindowLong(hWnd, GWL_STYLE, tCreate.style)
        Call SetWindowLong(hWnd, GWL_WNDPROC, lSubCombo)
    End If
    SubComboCreate = CallWindowProc(lSubCombo, hWnd, Msg, wParam, lParam)
End Function



en el formulario:

Código (vb) [Seleccionar]
Option Explicit
 
Private Sub Form_Load()

    With Combo1
        .AddItem ("Item 1")
        .itemData(.NewIndex) = vbBlue
        .AddItem ("Item 2")
        .itemData(.NewIndex) = vbRed
        .AddItem ("Item 3")
        .itemData(.NewIndex) = vbGreen
        .AddItem ("Item 4")
        .itemData(.NewIndex) = vbYellow
        .AddItem ("Item 5")
        .itemData(.NewIndex) = vbRed
    End With

    Call SubClassForm(Me.hWnd)
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Call RemoveSubClassing(Me.hWnd)
End Sub


y tenes que hacer que el proyecto comienze desde el Sub_Main (en las propiedades del proyecto)
#332
WTF ? que es eso ?  :xD

en el arbol del proyecto hay un iconito que dice "mostrar archivos ocultos" ahi te va a aparecer en el arbol del proyecto uno que dice "references" o "referenicas" ahi abrilo y te fijas que referencias esta usando tu proyecto, si ves alguna de esas dll borralas de ahi y listo, volve a compilar.

en teoria si es el programa que anteriormente estabas haciendo, eso no usa mas que las librerias estandar del framework, asi que no se si las agregaste vos manulmente o de donde salieron.
#333
fijate este ejemplo, lo pasas facil desde C#

Registry settings immediate effect using C#

lo que hace es con la api SendMessage justamente envia un mensaje de windows, en este caso la constante WM_SETTINGCHANGE y las aplicaciones son notificadas del cambio, en teoria deberia funcionar, probalo.
#334
solucionar este tipo de errores que solo salen cuando esta compilado, y no salen en el IDE es facil, tenes varias posibilidades:

1 - comentar una parte del codigo, por ejemplo todo el codigo del evento form_load lo comentas y luego compilas y probas el programa, si no salta error el error esta ahi, mira que facil.

2 - vas poniendo msgbox por cada linea, te fijas hasta que msgbox llego antes de que salte el erorr y listo ahi tenes la linea del error.

me imagino que estas ejecutando el .exe que esta en bin/release y no el de debug.

saludos.
#335
me lei todo y todavia no entendi :xD, en realidad entendi, pero no cual es el problema, es simplemente guardar el estado de los checkbox y la ultima ruta que seleccionaste. pero como tenes 2 rutas se te borran las anteriores, pues simplemente guardas para cada path determinado tanta cantidad de checkboxes y de esa forma cada ves que cambias de ruta tenes lo ultimo que seleccionaste.

por ejemplo la carpeta c:\prueba genera 2 checkbox, tildas los 2 por ejemplo:

- check 1
- check 2

despues vas y seleccionas la carpeta c:\prueba2 que genera 3 checkboxes mas (aca ya tenes que guardar los checkboxes anteriores, y guardar la ruta tambien).

- check 1
- check 2
- check 3

supongamos que tildas los 3.

entonces si ahora vas y seleccionas otra ves la carpeta anterior c:\prueba debes cargar los primeros 2 check.

o sea el path es lo que importa aca, despues segun el path cargas los checkbox que se crearon.

pero antes tendrias que hacer una validacion tambien de si existe la carpeta, porque si yo voy y borro un subdirectorio y despues cargas los valores guardados ese directorio no existe mas, por lo tanto el checkbox tampoco deberia aparecer.

#336
CitarEn el entorno empresarial todavía XP tiene mucho peso y Windows 7 no lleva tanto tiempo como para que una corporación, y no digamos una Pyme, se planteen el cambio

es lo que yo siempre dije aca, todavia hay muchisima gente que usa XP y de suerte algunos tienen windows 7 (la otra ves vi una pc con windows 98 todavia), o sea el 100% de la gente que usa XP, todavia no se cambio a windows 7, y estos ya sacaron el windows 8...me parece muy rapido.

y la gente que de suerte recien ahora se paso a windows 7, ahora ven que sacaron el 8, la gente queda loca y no sabe que hacer.
#337
solucion: nacer en otro mes y listo el pollo.  :xD
#338
.NET (C#, VB.NET, ASP) / Re: Winsock en vb.net
16 Noviembre 2012, 13:18 PM
winsock no existe mas en vb .net, para eso esta a clase que maneja puertos, System.Net.Sockets, con eso podes hacerlo.

saludos.
#339
6 palabras

estos estudios siempre son cualquier cosa.
#340
¿ 15 años por eso ? y bue los yankis ya tienen tanta guerra encima que los años de als condenas son cualquier cosa, da risa que den 15 años por eso, puedo dar miles de ejemplos donde un tipo mato varias personas y le dieron menos años y salio en la mitad del tiempo, pero algo queda claro, en ee.uu conviene matar que robar una gallina.

igual es un tonto, si ya lo habian condenado antes. ¿ pero 15 años ? ¿ cuanto le tenemos que dar a bush por lo que hizo ? 1 millon de años ?.