Combobox con flash

21/09/2007 - 11:36 por BADDOG | Informe spam
Hola a todos:
Como no soy muy bueno os explico mi "problema".

Estoy entrando datos a partir de que el combobox se cambia. una vez que el
evento change del combobox2 se ejecuta se hace visible el 3 para poder
editarlo y así posteriormente, por lo que el formulario se va haciendo
visible a partir de que se introducen datos.

El fallo es que quiero que si el dato que hay en 2 es igual al del 3 (podría
hacer que esos datos se filtrasen y si el dos tiene por ejemplo casa, en el 3
el dato casa no apareciese, pero ese es otro caso), me haga un tipo FLASH,
(que tiempos aquellos del BASIC), pero al ejecutar un bucle a
combobox.forecolor, no me hace nada, solo se queda esperando.

no soy muy bueno por lo que espero sepais perdonar mi poca experiencia:
For B = 1 To 255
For A = 255 To 0 Step -1
ComboBox2.ForeColor = RGB(255 - A, 255 - A, 255 - A)
ComboBox3.ForeColor = RGB(255 - A, 255 - A, 255 - A)

For j = 1 To 1000
Next j
ComboBox2.BackColor = RGB(A, A, A)
ComboBox3.BackColor = RGB(A, A, A)
For j = 1 To 1000 ' para hacer menos rápido el parpadeo
Next j
ComboBox2.ForeColor = RGB(0, 0, 0)' datos originales combobox
ComboBox3.ForeColor = RGB(0, 0, 0)
For j = 1 To 1000
Next j
ComboBox2.BackColor = RGB(255, 255, 255)' datos originales combobox
ComboBox3.BackColor = RGB(255, 255, 255)
Next A
Next B

Esto es una especie de aquella instrucción del basic print flash1 "Hola" en
la que en pantalla quedaba el texto realizando flash todo el rato.

Gracias de antemano. Juan Carlos

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
22/09/2007 - 05:05 | Informe spam
hola, Juan Carlos !

Estoy entrando datos a partir de que el combobox se cambia. una vez que el evento change del combobox2 se ejecuta
se hace visible el 3 para poder editarlo y asi posteriormente, por lo que el formulario se va haciendo visible a partir de que se introducen datos.
El fallo es que quiero que si el dato que hay en 2 es igual al del 3 (podria hacer que esos datos se filtrasen y si el dos tiene por ejemplo casa
en el 3 el dato casa no apareciese, pero ese es otro caso), me haga un tipo FLASH, (que tiempos aquellos del BASIC)
pero al ejecutar un bucle a combobox.forecolor, no me hace nada, solo se queda esperando...



no estoy muy seguro de que los tiempos *aquellos* del Basic/QBasic sean tan... *de anhelar* -?-
[es como si teniendo un tractor de ultima tecnologia, quisieras volver a labrar la tierra con una yunta] :))

[bromas aparte]... no comentas si tus combos estan incrustados en alguna hoja o estas usando algun formulario -?-
[probablemente]... los cambios en la *tonalidad* del color de fuente son tan... *tenues*, que no son *apreciables* a simple vista -?-
o... que necesites alguna instruccion del tipo DoEvents o Repaint [si estamos hablando de algun formulario] -?-

[personalmente, y asumiendo que es de vital importancia hacer que los controles *flasheen*]... te sugeriria:
a) NO usar cambios de tonalidad tan... *poco notorios*, quizas solo alternar entre dos colores [rojo/amarillo] entre fondo/fuente -?-
b) probar otros metodos en lugar de bucles tan *costosos* como For X = 1 To 255 [aunque en realidad todo tiene *algun costo*] :-((

[p.e.] si suponemos que tus combos estan en algun formulario de usuario
y que solo pretendes *flashear* al usuario cuando la seleccion del combo3 coincida con la del combo2
[OJO: si cambias el combo2 y ya no coincide con el combo3, el evento 'change' del combo3 seguira *creyendo* en la coincidencia]
[y de pasadita, usas la *escala* de colores del QBasic] :D

pon las siguientes instrucciones en el modulo de codigo del formulario [afectando cambios en el combo3]

Private Sub ComboBox3_Change()
If ComboBox3 <> ComboBox2 Then GoTo Salida
Dim Inicio As Single: Inicio = Timer
Do: DoEvents
Select Case (Timer - Inicio) Mod 2
Case 0
ComboBox3.BackColor = QBColor(4)
ComboBox3.ForeColor = QBColor(14)
Case Else
ComboBox3.BackColor = QBColor(14)
ComboBox3.ForeColor = QBColor(4)
End Select
Loop While ComboBox3 = ComboBox2
Salida:
ComboBox3.BackColor = QBColor(15)
ComboBox3.ForeColor = QBColor(0)
End Sub

existen otros *costos*, como que el procedimiento anterior hace dificil *recuperar el control* del control :-((
hay mas imponderables, pero... si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ [fraccion de] codigo expuesto __
For B = 1 To 255
For A = 255 To 0 Step -1
ComboBox2.ForeColor = RGB(255 - A, 255 - A, 255 - A)
ComboBox3.ForeColor = RGB(255 - A, 255 - A, 255 - A)
For j = 1 To 1000
Next j
ComboBox2.BackColor = RGB(A, A, A)
ComboBox3.BackColor = RGB(A, A, A)
For j = 1 To 1000 ' para hacer menos rapido el parpadeo
Next j
ComboBox2.ForeColor = RGB(0, 0, 0)' datos originales combobox
ComboBox3.ForeColor = RGB(0, 0, 0)
For j = 1 To 1000
Next j
ComboBox2.BackColor = RGB(255, 255, 255)' datos originales combobox
ComboBox3.BackColor = RGB(255, 255, 255)
Next A
Next B
Esto es una especie de aquella instruccion del basic print flash1 "Hola"
en la que en pantalla quedaba el texto realizando flash todo el rato.

Gracias de antemano. Juan Carlos
Respuesta Responder a este mensaje
#2 BADDOG
01/10/2007 - 11:38 | Informe spam
Hola Héctor.

Gracias por responder y os pido disculpas por la tardanza en este mensaje,
pero los imponderables de internet me lo han hecho imposible hasta hoy.

Si, los combos están en un formulario, el cual se va "exponiendo" en base a
eventos change.
Si el valor del combobox1 cambia, aparte de otras cosas
combobox2.visible=true.
como hay varios combobox, la idea era que al coincidir un valor igual los
dos combobox flasearan en un intento visual para el que rellena el formulario
y sin necesidad de dar un mensaje, entendiera que esa opcion no es posible.
por eso lo del flash que es la idea más "entendible" visualmente.


[OJO: si cambias el combo2 y ya no coincide con el combo3, el evento
'change' del combo3 seguira *creyendo* en la coincidencia]
[y de pasadita, usas la *escala* de colores del QBasic] :D

La verdad es que este imponderable del cambio en el evento ya me ha pasado y
estoy con dolor de cabeza :S. de momento lo soluciono dando la orden en el
evento enter del combobox2 borrando el resto de controles, pero es muy
tedioso ya que tienes que hacerlo con cada combobox.

Por cierto, mi focus es chulo pero no dejo de admirar los Hispano Suiza de
1900 y pico :D
Respuesta Responder a este mensaje
#3 Héctor Miguel
02/10/2007 - 14:12 | Informe spam
hola, (...) ?

... de momento lo soluciono dando la orden en el evento enter del combobox2 borrando el resto de controles
pero es muy tedioso ya que tienes que hacerlo con cada combobox...



si los combox mantienen sus nombres *originales* [combobox1, combobox2, etc.]
podrias *armar* n bucle For...Next para borrarlos [p.e.] suponiendo que borras los combos 1 a 7:

Dim n As Byte
For n = 1 To 7
Me.Controls("combobox" & n) = ""
Next

en el peor de los casos, podrias armar un Array con los nombres de los combos y otro bucle For...Next -?-

si prefieres continuar con el cambio de colores... podrias exponer algunos detalles adicionales ?
[p.e. cuantos y cuales combos serian *inter-dependientes*, cuales serian las condiciones, etc.]

saludos,
hector.
Respuesta Responder a este mensaje
#4 BADDOG
07/10/2007 - 10:21 | Informe spam
Hola de Nuevo. Siento contestar con tanto retraso, pero el trabajo manda.

> pero es muy tedioso ya que tienes que hacerlo con cada combobox...


Se que ponerle estas intrucciones en cada combobox es muy tedioso, pero me
gustaría saber más. He intentado realizar algo más evolucionado pero hasta
que llegue, me conformo haciendolo mas "casero".


si los combox mantienen sus nombres *originales* [combobox1, combobox2, etc.]
podrias *armar* n bucle For...Next para borrarlos [p.e.] suponiendo que borras los combos 1 a 7:

Dim n As Byte
For n = 1 To 7
Me.Controls("combobox" & n) = ""
Next

en el peor de los casos, podrias armar un Array con los nombres de los combos y otro bucle For...Next -?-

si prefieres continuar con el cambio de colores... podrias exponer algunos detalles adicionales ?



El formulario se abre con solamente varios checkbox en la parte superior.
uno por cada "Registro". Este registro está formado por orden de aparición
por un checkbox, combobox1, combobox2,combobox3,combobox4 y otro exactamente
igual iniciado por un checkbox2.

Al pulsar checkbox1 y cambiar su estado abre el siguiente que es combobox1.
(aqui he insertado una modificación haciendo que por defecto los combobox
Visible=false para que en caso de cambiar otra vez el estado del checkbox en
cualquier momento, pierda todos sus valores).

Combobox1 y combobox2 recogen los datos de un rango fijo que está oculto en
la hoja. No rehago el rango por lo que ambos tienen los mismos valores para
escoger. He aquí lo de los colores, si escogen ambos el mismo, visualmente
pretendo que hagan una variación tonal de colores "VISIBLE" para el que
rellena el formulario y que sepa que no puede escoger ese valor.

lo mismo con la segunda parte del registro que coge los datos del mismo
rango en combobox5 y combobox6, con la salvedad de que tampoco pueden escoger
los datos que YA tienen combobox1 y 2.

Errores que una vez comfeccionada el formulario no se como si los 4 combobox
tienen los valores correctos y cambio (por ejemplo combobox1 y pongo el valor
de combobox4 debería saltar "los colores" y borrarme de Combobox1 hacia abajo)

Combobox3 y 4 así como 7 y 8 son tramos horarios y se visualizan si se
rellena el anterior.

Espero que veais (aparte de mi poca visión) el problema

Gracias y perdonar la extensión.
Juan Carlos
Respuesta Responder a este mensaje
#5 Héctor Miguel
07/10/2007 - 21:17 | Informe spam
hola, Juan Carlos !

1) [segun se entiende] los combos 1, 2, 5 y 6 *comparten* el mismo origen para listar sus elementos
y en ningun caso se permite que dos o mas de ellos muestren el mismo elemento seleccionado -?-

2) la parte *medular* del como quisieras *corregir* [en su caso] este tipo de seleccion es donde dices:
"... deberia saltar "los colores" y borrarme de Combobox1 hacia abajo ..."

-> es decir, si los colores *saltan* cuando existen selecciones repetidas, PERO *borras* los combos...
la condicion de repetidos *deja de existir*, por lo tanto, los colores no tienen *razon para saltar* :D

3) una -posible- solucion es un procedimiento comun de verificacion de lo seleccionado en los 4 combos
que deberas *llamar* desde el evento '_change' de cada combo [1,2,5,6] y en caso de seleccion repetida...
haga *saltar* lo de los colores <= O => borre la seleccion de los combos [no ambas cosas] ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
El formulario se abre con solamente varios checkbox en la parte superior. uno por cada "Registro".
Este registro esta formado por orden de aparicion por
un checkbox, combobox1, combobox2, combobox3, combobox4 y otro... igual iniciado por un checkbox2.
Al pulsar checkbox1 y cambiar su estado abre el siguiente que es combobox1.
(aqui he insertado una modificacion haciendo que por defecto los combobox Visible=false
para que en caso de cambiar otra vez el estado del checkbox en cualquier momento, pierda todos sus valores).
Combobox1 y combobox2 recogen los datos de un rango fijo que esta oculto en la hoja.
No rehago el rango por lo que ambos tienen los mismos valores para escoger.
He aqui lo de los colores, si escogen ambos el mismo... pretendo que hagan una variacion tonal de colores
"VISIBLE" para el que rellena el formulario y que sepa que no puede escoger ese valor.
lo mismo con la segunda parte del registro que coge los datos del mismo rango en combobox5 y combobox6
con la salvedad de que tampoco pueden escoger los datos que YA tienen combobox1 y 2.
Errores que una vez comfeccionada el formulario no se como si los 4 combobox tienen los valores correctos y cambio
(por ejemplo combobox1 y pongo el valor de combobox4 deberia saltar "los colores" y borrarme de Combobox1 hacia abajo)
Combobox3 y 4 asi como 7 y 8 son tramos horarios y se visualizan si se rellena el anterior...
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida