In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

TDbComboBox

Foro público de Xailer en español
Responder
jrcsistemas
Mensajes: 180
Registrado: Lun Sep 15, 2008 2:53 pm

TDbComboBox

Mensaje por jrcsistemas »

Hola.
Como puedo forzar a que se habra la lista de opciones de un ComboBox si al
salir el usuario no eligio nada. Aclaro que lExtendedUI esta el .F.
Ya probé en OnKeyDown
METHOD TeclaEnterCombos( oSender, nKey, nFlags ) CLASS TFormEditAfiliados
If nKey == VK_RETURN
If Empty(::oComboCalles:cText)
HB_KeyPut( VK_F4 )
// KEYBOARD CHR( VK_F4 )
Else
oSender:GoNextControl()
EndIf
EndIf
RETURN Nil
y no pasa nada. No tiene efecto el HB_KeyPut() o KeyBoard . Pero si pulsando
F4 sobre el control.
Gracias
Juan Castañeda
jrcsistemas
Mensajes: 180
Registrado: Lun Sep 15, 2008 2:53 pm

TDbComboBox

Mensaje por jrcsistemas »

Hola. No se si me explique bien.
En un formulario con muchos TEdit y TComboBox quiero que sea obligatorio
seleccionar algo en los ComboBox. Si pulso enter paso al siguiente control,
pero si no seleccionó nada, quiero que se despliegue la lista de opciones
del Combo para elegir una obligatoriamente. He intentado simular la
pulsación de la tecla F4 pero no lo he logrado.
Gracias
Juan Castañeda
"Juan Castañeda" <jrcsistemas@speedy.com.ar> escribió en el mensaje
news:4cae9582$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Hola.
>
> Como puedo forzar a que se habra la lista de opciones de un ComboBox si al
> salir el usuario no eligio nada. Aclaro que lExtendedUI esta el .F.
>
> Ya probé en OnKeyDown
>
> METHOD TeclaEnterCombos( oSender, nKey, nFlags ) CLASS TFormEditAfiliados
> If nKey == VK_RETURN
> If Empty(::oComboCalles:cText)
> HB_KeyPut( VK_F4 )
> // KEYBOARD CHR( VK_F4 )
> Else
> oSender:GoNextControl()
> EndIf
> EndIf
> RETURN Nil
>
> y no pasa nada. No tiene efecto el HB_KeyPut() o KeyBoard . Pero si
> pulsando F4 sobre el control.
>
> Gracias
>
> Juan Castañeda
>
>
>
>
> __________ Información de ESET NOD32 Antivirus, versión de la base de
> firmas de virus 5515 (20101008) __________
>
> ESET NOD32 Antivirus ha comprobado este mensaje.
>
> http://www.eset.com
>
>
>
__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 5543 (20101018) __________
ESET NOD32 Antivirus ha comprobado este mensaje.
http://www.eset.com
Avatar de Usuario
Carlos Ortiz
Mensajes: 873
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

TDbComboBox

Mensaje por Carlos Ortiz »

Los componentes combobox tienen una propiedad que te indica que elemento
esta seleccionado, TComboBox:nIndex, además cuentas con un par de array
conteniendo los elementos aItems y aItemsBound. Con ambos valores podes ir
analizando que tiene seleccionado y cual es su valor segun las matrices
mencionadas.
Espero te sirva de ayuda.
Atte. Carlos Ortiz.
jrcsistemas
Mensajes: 180
Registrado: Lun Sep 15, 2008 2:53 pm

TDbComboBox

Mensaje por jrcsistemas »

Carlos. Gracias por tu respuesta.
Pero mi problema es el siguiente.
Al dar un alta de un cliente, muestro un combo con las posibles calles del
domicilio (cargado de la tabla calles), pero al usuario me puede pasar de
largo el Combo con la tecla enter y saltar al siguiente control porque yo
tengo sobrecargado el metodo KeyDown para que salte al proximo control. Mi
problema es si el usuario no eligio nada y simplemente paso al siguiente....
quiero desplazar la lista de opciones y obligarlo a que elija una opcion. La
simulacion de la pulsacion de la tecla F4 para que se muestre la lista, no
me funciona.
Gracias
"Carlos Ortiz" <cortizassist@hotmail.com> escribió en el mensaje
news:4cbce2f3$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Los componentes combobox tienen una propiedad que te indica que elemento
> esta seleccionado, TComboBox:nIndex, además cuentas con un par de array
> conteniendo los elementos aItems y aItemsBound. Con ambos valores podes ir
> analizando que tiene seleccionado y cual es su valor segun las matrices
> mencionadas.
>
> Espero te sirva de ayuda.
> Atte. Carlos Ortiz.
>
>
> __________ Información de ESET NOD32 Antivirus, versión de la base de
> firmas de virus 5543 (20101018) __________
>
> ESET NOD32 Antivirus ha comprobado este mensaje.
>
> http://www.eset.com
>
>
>
__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 5543 (20101018) __________
ESET NOD32 Antivirus ha comprobado este mensaje.
http://www.eset.com
Avatar de Usuario
Carlos Ortiz
Mensajes: 873
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

TDbComboBox

Mensaje por Carlos Ortiz »

Si no selecciono nada en el combo nIndex vale Nil o 0, podrí­as controlarlo contra eso. Me supongo con en la matriz aItemsBound tenés los ID de la tabla (valor que también estará vacio) cuando inspecciones el array.
Nosotros lo manejamos de otra forma y nos resulta más cómodo, por ejemplo hemos agregado una propiedad a los controles nativos de Xailer (lObligatorio) tanto en los Edit, Combos y demás. Y un color especí­fico para los controles obligatorios así­ el usuario puede ver mejor que es obligatorio y que no. En diseño pego el control en el form y nada más.
Como quedo la clase TEdit nuestra;
//---------------------------------------------------------- --------------------
CLASS TEdit FROM XEdit
PUBLISHED:
PROPERTY lObligatorio INIT .F. WRITE METHOD SetOblig
PUBLIC:
METHOD SetOblig
ENDCLASS
//---------------------------------------------------------- --------------------
METHOD SetOblig( Value ) CLASS TEdit
::FlObligatorio := Value
::nClrPane := IIf( Value, clRed, clWindow )
IF Value
// Variable pública con el color para los obligatorios
::nClrPane:=AppData:nColorObligatorios
::nClrPaneFocus:=AppData:nColorObligatorios
ELSE
::nClrPane := clWindow
::nClrPaneFocus:=clWindow
ENDIF
RETURN Nil
//---------------------------------------------------------- --------------------
Entonces al presionar Aceptar en un diálogo lo unico que resta es evaluar que los controles son obligatorios y están sin datos para decirle al usuario te falta tal o cual cosa de cargar. Además a esto lo haces una vez y lo reultilizas en todos los forms que te haga falta. Como verás soy medio vago para programar y no me agrada andar repitiendo código por todos lados.
Con esta función controlo los campos obligatorios de cada form que hacemos:
//---------------------------------------------------------- --------------------
func HayDatosFaltantes( Self, cMensaje )
//---------------------------------------------------------- --------------------
local oControl, ret:=.f.
DEFAULT cMensaje to "S"
FOR each oControl IN ::aControls
IF oControl:IsKindOf( "TEdit" )
IF oControl:lObligatorio
IF valtype(oControl:Value)="D".and.empty(alltrim(dtos(oControl:Value)))
ret:=.t.
ELSEIF valtype(oControl:Value)="C"
IF empty(alltrim(oControl:Value))
ret:=.t.
ENDIF
ELSEIF valtype(oControl:Value)="N"
IF oControl:Value=0
ret:=.t.
ENDIF
ENDIF
IF ret
exit
ENDIF
ENDIF
ENDIF
END
IF ret.and.cMensaje="S"
MSGSTOP("Falta cargar algún dato importante, revise el formulario por favor.","Atención")
ENDIF
RETURN ret

Espero te sirva, avise cualquier cosa.
Atte. Carlos Ortiz.
--
jrcsistemas
Mensajes: 180
Registrado: Lun Sep 15, 2008 2:53 pm

TDbComboBox

Mensaje por jrcsistemas »

Carlos.
Gracias por tu respuesta.
Voy a usar tu metodo. Pero me queda la duda porque Xailer no me acepta el uso de HB_KeyPut( VK_F4 )
__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 5546 (20101019) __________
ESET NOD32 Antivirus ha comprobado este mensaje.
http://www.eset.com
--
Avatar de Usuario
Carlos Ortiz
Mensajes: 873
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

TDbComboBox

Mensaje por Carlos Ortiz »

Esto también te puede servir para enviar un F4 a un combo.
::oDBComboTipo:PostMsg( WM_KEYDOWN, VK_F4 )
Atte. CO.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

TDbComboBox

Mensaje por jfgimenez »

Juan,
Voy a usar tu metodo. Pero me queda la duda porque Xailer no me acepta el uso de HB_KeyPut( VK_F4 )
El uso del teclado en modo GUI es distinto al modo consola, y por eso no funciona hb_keyput() ni el comando KEYBOARD. Por otro lado, para desplegar el combo desde código puedes usar la propiedad lDropped, p.ej.:
::oComboBox1:lDropped := .T.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
--
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jrcsistemas
Mensajes: 180
Registrado: Lun Sep 15, 2008 2:53 pm

TDbComboBox

Mensaje por jrcsistemas »

José.
Probé lDropped, pero no logro que se quede abierta la lista. Simplemente abre y cierra sin posibilidad de elejir nada, en un instante.
Gracias
METHOD TeclaEnterCombos( oSender, nKey, nFlags ) CLASS TFormEditAfiliados
If nKey == VK_RETURN
If Empty(::oComboCalles:cText)
::oComboCalles:lDropped := .T.
Else
oSender:GoNextControl()
EndIf
EndIf
RETURN Nil
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje news:[email=4cbea1da@svctag-j7w3v3j....]4cbea1da@svctag-j7w3v3j....[/email]
Juan,
Voy a usar tu metodo. Pero me queda la duda porque Xailer no me acepta el uso de HB_KeyPut( VK_F4 )
El uso del teclado en modo GUI es distinto al modo consola, y por eso no funciona hb_keyput() ni el comando KEYBOARD. Por otro lado, para desplegar el combo desde código puedes usar la propiedad lDropped, p.ej.:
::oComboBox1:lDropped := .T.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
--
jrcsistemas
Mensajes: 180
Registrado: Lun Sep 15, 2008 2:53 pm

TDbComboBox

Mensaje por jrcsistemas »

Carlos.
Eso era lo que queria hacer. Funciona perfecto
Gracias
"Carlos Ortiz" <cortizassist@hotmail.com> escribió en el mensaje
news:[email=4cbe1db7@svctag-j7w3v3j....]4cbe1db7@svctag-j7w3v3j....[/email]
> Esto también te puede servir para enviar un F4 a un combo.
> ::oDBComboTipo:PostMsg( WM_KEYDOWN, VK_F4 )
>
> Atte. CO.
>
Responder