Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: antonio castro 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
-
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/ (http://www.foro.vb-mundo.com/f24/backcolor-dtpicker-20500/)
Creditos a: seba123neo
-
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 (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
(http://www.4shared.com/file/n1yR6swK/dtpicker.html)
-
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
-
@ 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.
-
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
-
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 (http://www.mediafire.com/?rzhhl3njht6lg2q)
Saludos y muchas gracias por su valiosa ayuda,
AC
-
Yo pregunto, probaste el ucDateTime (http://www.leandroascierto.com.ar/categoria/Controles%20de%20Usuario/articulo/ucDateTime.php) 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)
-
ya le dije que use el de Leandro.
Backcolor en DTPicker (http://www.foro.vb-mundo.com/f24/backcolor-dtpicker-20500/#post78070)
lo unico que veo es que el ucDateTime no tiene los eventos gotfocus y setfocus implementados en el control, pero agregarselos es facil.
-
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)
-
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.
-
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 (http://www.vbaccelerator.com/home/vb/code/techniques/Trapping_The_Tab_Key_in_a_UserControl_with_IOLEInPlaceActiveObject/article.asp) y un par de paginas mas que ahora no encuentro el link :P