Autor Tema: Backcolor en DTPicker  (Leído 10218 veces)

0 Usuarios y 1 Visitante están viendo este tema.

antonio castro

  • Bit
  • Mensajes: 3
  • Reputación: +0/-0
    • Ver Perfil
Backcolor en DTPicker
« en: Julio 10, 2011, 07:00:11 pm »
Buen día...

Que tal amigos, les saludo desde Venezuela y aprovecho la oportunidad para realizar mi primera pregunta:

Como le puedo colocar un backcolor X a un control DTPicker, en sus propiedades no lo veo como para cambiarlo como en un TextBox!!!. Estuve buscando a ver si consigo un API para utilizarlo con SendMessage o algo así, pero de verdad no consigo nada.

La idea es colocar un color de fondo cuando tiene el foco y restaurar el color original al perder el foco.

Nota: Yo hago esto con los TextBox, ComboBox, etc.

Saludos y muchas gracias por su ayuda,

Antonio Castro
Maracaibo - Venezuela
Utilizo VB6 SP6
Responder Con Cita

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Backcolor en DTPicker
« Respuesta #1 en: Julio 10, 2011, 08:08:08 pm »

Código: [Seleccionar]
Option Explicit

Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function GetClassLong Lib "user32" Alias "GetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GCL_HBRBACKGROUND = (-10)

Private vLienzo As Long
Private vLienzoTemp As Long

Private Sub DTPicker1_GotFocus()
    Dim i As Long

    vLienzo = CreateSolidBrush(&HFFC0C0)
    vLienzoTemp = GetClassLong(DTPicker1.hwnd, GCL_HBRBACKGROUND)

    i = SetClassLong(DTPicker1.hwnd, GCL_HBRBACKGROUND, vLienzo)
    DTPicker1.Refresh
End Sub

Private Sub DTPicker1_LostFocus()
    Dim i As Long
    i = SetClassLong(DTPicker1.hwnd, GCL_HBRBACKGROUND, vLienzoTemp)
    DeleteObject vLienzo
    DTPicker1.Refresh
End Sub

Fuente: http://www.foro.vb-mundo.com/f24/backcolor-dtpicker-20500/
Creditos a: seba123neo
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

Lolabyte

  • Bytes
  • *
  • Mensajes: 35
  • Reputación: +15/-0
    • Ver Perfil
Re:Backcolor en DTPicker
« Respuesta #2 en: Julio 10, 2011, 08:38:08 pm »
Que Rapido eres ENTER, yo habia encontrado este codigo, pero no funcionaba, asi que tuve que corregirlo  >:(

http://www.vbforums.com/showthread.php?t=58657

aqui el codigo corregido, pero es mas sencillo el codigo que encontraste  ;D

http://www.4shared.com/file/n1yR6swK/dtpicker.html


E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Backcolor en DTPicker
« Respuesta #3 en: Julio 10, 2011, 09:22:52 pm »
Si yo encontré también ese no me anduvo y probé buscando otro lado, pero igual funciona muy bien el que vos posteaste. yo no hice nada solo busque por que ya había visto una ves por ahí todo los crédito es para seba123neo
« última modificación: Julio 10, 2011, 09:26:13 pm por E N T E R »
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Backcolor en DTPicker
« Respuesta #4 en: Julio 10, 2011, 10:05:14 pm »
@ antonio castro

me hubiera gustado por una cuestion de "etica de foros", que me hubieras respondido en el post original de vb.mundo

creo que con el control de Leandro lo podes solucionar, ya que tiene para cambiarle el fondo de color.

antonio castro

  • Bit
  • Mensajes: 3
  • Reputación: +0/-0
    • Ver Perfil
Re:Backcolor en DTPicker
« Respuesta #5 en: Julio 10, 2011, 11:07:14 pm »
Buen día...

    Muchas gracias a los 3, yo habia posteado este mismo mensaje en otro foro y seba123neo me ayudó un mundo, pero el en verdad el codigo si tenia un detalle. Acabo de correr el codigo enviado por Lolabyte, y hasta ahora esta super bien.

Nota: Voy seguir realizando pruebas y les comentaré.

Saludos y muchas gracias de nuevo a todos,

AC

antonio castro

  • Bit
  • Mensajes: 3
  • Reputación: +0/-0
    • Ver Perfil
Re:Backcolor en DTPicker
« Respuesta #6 en: Julio 12, 2011, 09:09:54 pm »
Buen día...

     Bueno amigos, les comento que logre realizar una clase con el codigo que me enviaron y me esta funcionando bien el GotFocus y el LostFocus que es en pricipio lo que quería. Ahora queria preguntarles si es posible asignar desde la clase que hice las siguientes propiedades:

    ForeColor
    BackColor
    ForeFocusColor
    BackFocusColor

    La idea es eliminar una funcion externa a la clase, la cual me asigna el solo color del fondo :'(., y poder colocar estas propiedades a mi antojo desde cualquier formulario de VB. OJo el color de fondo se establece bien con la función, pero el culminar la ejecución del codigo, los DTPicker quedan con el color de fondo colocado, o sea es como si quedara en memoria el Brush utilizado.

Nota: Anexo clase y codigo de ejemplo comentado de la mencionado.

http://www.mediafire.com/?rzhhl3njht6lg2q

Saludos y muchas gracias por su valiosa ayuda,

AC
« última modificación: Julio 12, 2011, 09:11:29 pm por antonio castro »

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Backcolor en DTPicker
« Respuesta #7 en: Julio 12, 2011, 11:37:42 pm »
Yo pregunto, probaste el ucDateTime de Leandro? Que le hizo una modificacion para el backcolor (que solo anda en XP, o al menos nunca lo logre hacer andar en win7 :P)

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Backcolor en DTPicker
« Respuesta #8 en: Julio 12, 2011, 11:56:35 pm »
ya le dije que use el de Leandro.

Backcolor en DTPicker

lo unico que veo es que el ucDateTime no tiene los eventos gotfocus y setfocus implementados en el control, pero agregarselos es facil.

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Backcolor en DTPicker
« Respuesta #9 en: Julio 13, 2011, 12:21:59 am »
lo unico que veo es que el ucDateTime no tiene los eventos gotfocus y setfocus implementados en el control, pero agregarselos es facil.
No creas, no siempre funciona bien. Funciona de 10 si le pones el IOleInPlaceActive object, que me costo un poquito hacerlo que no dependa de ningun modulo ^^ (esta puesto en el ucTabStrip)

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Backcolor en DTPicker
« Respuesta #10 en: Julio 13, 2011, 02:25:56 am »
No creas, no siempre funciona bien. Funciona de 10 si le pones el IOleInPlaceActive object, que me costo un poquito hacerlo que no dependa de ningun modulo ^^ (esta puesto en el ucTabStrip)

Hola Raul338 me explicas un poco que hace IOleInPlaceActive  porque lo estoy viendo en un par de modulos pero no entendi bien cual es su función.

Saludos.

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Backcolor en DTPicker
« Respuesta #11 en: Julio 13, 2011, 10:12:09 am »
Hola Raul338 me explicas un poco que hace IOleInPlaceActive  porque lo estoy viendo en un par de modulos pero no entendi bien cual es su función.
Como no, las ventanas en vb tienen una Implementacion esa Interfaz IOLEInPlaceActiveObject que es con la que manejan el foco. Si intentas crear un UserControl con un textbox creado por API, no te dectetará las teclas de las flechas para manejarse entre los caracteres, sino que ira pasando el foco entre otros controles (un CommandButton por ejemplo) y es posible que nunca mas obtenga el foco mediante el teclado (no importa cuantas veces presiones tab xD)

Entonces, lo que hay que hacer es pisar y poner nuestra implementacion de IOLEInPlaceActiveObject, que no es mas que un conjunto de punteros a funciones (fijate en el sub pvInitIPAO creo la interfaz y le seteo un Me para obtener la Interfaz, de ahi en mas es simplemente manejo de punteros). Para "pisarlo" hay que hacerlo cuando se recibe el WM_SETFOCUS y de ahi decimos "mira, usa este IOLEInPlaceActiveObject" que es el TranslateAccelerator el que deberia hacer el trabajo (fijate el pvTranslateAccel) de ahi lo que se devuelva es como un "Cancel", si lo manejamos nosotros o no. En el caso del textbox mediante api pondriamos para que no tome las felchitas y asi no pierda el foco. Lo mismo cuando se presiona Tab le pondriamos foco al control creado por api :D

Es una explicacion rapida. Hay mas info en ingles en vbAccelerator y un par de paginas mas que ahora no encuentro el link :P