FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#41
|
||||
|
||||
No, hombre, no eres pesado, al contrario, se agradece la idea, aunque no creo que me lo acepten de esa forma, pero por probar que no quede
|
#42
|
||||
|
||||
Casimiro, puedes adaptar el mismo código, para 5 colores o para 2, cambiado solamente lo siguiente en el case
........................................C..O..L..O..R.......A......U..S..A..R Color............terminación......Para 10.......Para 5...........Para 2 0------------------0-----------0----------0-------------0 1------------------1-----------1----------1-------------1 2------------------2-----------2----------2-------------0 3------------------3-----------3----------3-------------1 4------------------4-----------4----------4-------------0 5------------------5-----------5----------0-------------1 6------------------6-----------6----------1-------------0 7------------------7-----------7----------2-------------1 8------------------8-----------8----------3-------------0 9------------------9-----------9----------4-------------1 Ventajas de este sistema, permite un mayor control, ya que no descuadra el color, ya que el color es según el termino del Lote (asiento en tu caso y al subir o bajar no pierde el color.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" Última edición por José Luis Garcí fecha: 06-01-2011 a las 17:59:59. |
#43
|
||||
|
||||
Creo que no termino de entenderlo, ¿te refieres a cambiar el color según el número de asiento?
|
#44
|
||||
|
||||
Cita:
Por otra parte, la opción de un campo calculado que determina el coor con el que debe pintarse, pues me suena extraña. El valor de un campo calculado, normalmente, debe determinarse en términos de otros valores en el mismo registro, y si podemos usar valores en el mismo registro para saber de qué color hay que pintar, entonces no necesitamos el campo calculado sino simplemente hacer el cálculo en el evento DrawColumnCell. // Saludos |
#45
|
||||
|
||||
Entonces, ¿qué sugieres?
Que llevo tres días con esta tontería y no termina de ir bien, algo tan "simple" :S |
#46
|
||||
|
||||
No se que dirán ustedes pero creo que acabamos de encontrar el nuevo reto delphi
Yo digo que el gran maestros de maestros de centésimo dan Román nos ilustre Yo no tener más neuronas. Saludos, |
#47
|
||||
|
||||
Ja, ja. Yo no dije que tuviera la solución, simplemente comenté mi renuencia a creer en las ya existentes
Yo opino que el switch no funciona porque el pintado de celdas no necesariamente es secuencial. Sin embargo, esta técnica del switch podría usarse desde la consulta sql. Por ejemplo, en MySQL puedo hacer algo parecido a esto:
La columna "colorear" alterna entre 1 y 0 según cambia el valor del campo asiento, de manera que la condición en el evento DrawColumnCell se reduce a:
Supongo que en Firebird también existen las variables de usuario así que podría hacerse algo similar. // Saludos |
#48
|
||||
|
||||
¿Y que me dices de mi propuesta? Llevar una estructura que registre la distribución de pintado.
Yo para ahorrar espacio decía algo como: HastaRegistro - Color 1 - Blanco 6 - Negro 8 - Blanco ... Alterando esa idea se puede concebir una estructura de igual tamaño que la cantidad de registros: RegistroNro - Color 1 - Blanco 2 - Negro 3 - Negro ... 6 - Negro 7 - Blanco 8 - Blanco La idea es armar esta estructura analizando los registros. Cuando tenemos esta estructura ya podemos pintar el DBGrid, fila a fila en base a la evaluación del RecNo y comparandolo con RegistroNro de la estructura. Si el evento DrawColumnCell se levanta a sus ganas, entonces forzemosle a decir, mira... tu correspondes al registro x, por tanto tu color es z. Me dirán que es un desperdicio de memoria pero no veo otra manera. Saludos, |
#49
|
||||
|
||||
Sí, la que yo he puesto
Es que con tu idea hay que traerse todos los registros al cliente de una sóla vez. // Saludos |
#50
|
||||
|
||||
Si casimiro, el color se asigna al asiento, en caso de lo que quieras es tener un Grid por colores pero por tipo de asiento (según tu post nº 1, normalmente están ordenados por fecha y no por asiento, esto funcionaría tal cual), en el otro caso, deberías usar dos variables globales, que compruebe en orden de carga si el valor del asiento cambia, asignamos primero el valor del nuevo asiento y en la segunda variable el color a o el b, lo elegimos cuando cambiamos alternando entre el a y el b, mientras tengamos el mismo número de asiento, seguimos con el mismo color al cambiar cambiamos el color.
Espero haberme explicado bien.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta" |
#51
|
||||
|
||||
Pues, al comienzo no entendí tu idea roman. Ahora que la leo de nuevo ya le ví el truco.
¡Maestro!, me saco el sombrero. Tengo la cabeza frita, no recuerdo bien si Firebird cuenta con variables de usuario y trabajar con un select. Pero la alternativa es generar un SP y allí si se puede trabajar cómodamente y aplicar lo que comentas. Saludos, |
#52
|
||||
|
||||
¿Cómo sería con un procedimiento almacenado?
// Saludos |
#53
|
||||
|
||||
Cita:
Casimiro, una pregunta, porque necesitas hacerlo de esta forma? Saludos
__________________
Aleca |
#54
|
||||
|
||||
Quizá es muy simple mi respuesta pero yo diría que para poder distinguir fácilmente los grupos
// Saludos |
#55
|
||||
|
||||
Pues sí, para separar los distintos asientos:
Dibujar es fácil, funciona perfecto con todos los ejemplos que han puesto todos los compañeros, el problema viene cuando te mueves por el grid arriba y abajo, llegas al final y al principio, etc. El ejemplo de Román no he podido probarlo porque desconozco el tema de las variables de usuario en firebird, estoy buscando información al respecto. |
#56
|
||||
|
||||
Cita:
Por las dudas... Saludos
__________________
Aleca |
#57
|
||||
|
||||
a ver, otra pregunta tonta, puede haber muchos registros?
lo pregunto porque creo que hay que anclar el color de la fila con el registro.
__________________
Aleca |
#58
|
||||
|
||||
El procedimiento almacenado para Firebird sería algo como este (probado en una tabla de prueba que tengo):
Saludos, |
#59
|
||||
|
||||
Basicamente la idea es que el campo "Colorear" alterne entre 1 y 0. Se va recorriendo la consulta ordenada por fecha y asiento almacenando los valores en una variable. Si resulta ser que el valor del asiento del actual registro es distinto al de la variable se altera el valor del campo colorear por su "negado". En otro caso queda el valor anterior.
Luego, cuando se va pintando el DBGrid, se evalúa el valor del campo Colorear y si 1 o 0 se establece un color o otro y se pinta. Saludos, |
#60
|
||||
|
||||
Ha... y como PLUS , la técnica que me inspiró roman da incluso para trabajar con más de dos colores.
Siendo N la cantidad de colores, podemos alternar cíclicamente los colores haciendo algo como:
Siendo Color una variable que se incrementa cuando se cumple la condición:
Espero que se entienda la idea De ese modo tendremos que el valor del hipotético campo "Colorear" irá alternando desde 0 a N-1 cada vez que detecte un nuevo asiento. EDITO: Esto se ha convertido en un monólogo Saludos, |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Alternar dos colores en las lineas de un DBGrid. | jealousy | OOP | 4 | 07-05-2014 15:45:23 |
colores en un dbgrid | frf_84 | Gráficos | 2 | 07-12-2004 12:14:57 |
dbgrid con colores | Giniromero | Conexión con bases de datos | 7 | 08-07-2004 16:26:29 |
dbgrid en colores | sebas | Conexión con bases de datos | 2 | 09-07-2003 09:16:14 |
Colores en una DBGrid | REDCOM | Varios | 2 | 26-05-2003 20:42:58 |
|