Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-01-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.070
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por pacopenin Ver Mensaje
[..] Mi opinión en que "debe haber una información en el registro que indique de color hay que pintar esa celda".
Saludos,
Después de probar las distintas opciones aportadas por los compañeros, debo ecir que no funcionan "totalmente" bien... o yo no he sabido implementarlas, que todo puede ser.

Así que creo que la única opción es la del campo que indique el color o algo así.

Pero todavía se aceptan más propuestas... habrá premio al que obtenga el resultado correcto
Responder Con Cita
  #2  
Antiguo 05-01-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Pues yo no veo otra salida amigo. Ya sea que se lleve una estructura fuera o en el mismo dbgrid con un campo calculado y el uso de técnicas "flags booleanas" es necesario contar con un artilugio para llevar ese conteo y poder determinar con que color pintar cada registro.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 06-01-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Mejorando código....

Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
    background_colors: array[0..1] of TColor = (clBtnFace, clWhite);
begin
if Dataset.FieldByName('asiento').Value <> UltimoValor then
    BoolSwitch := (not BoolSwitch);

TDBGrid(Sender).Canvas.Brush.Color := background_colors[BoolSwitch];

// el grupo ya fue pintado?
if Pos(Format('-%s-', [Dataset.FieldByName('asiento').Value]), GrupoImpar) > 0 then
    TDBGrid(Sender).Canvas.Brush.Color := background_colors[0];
   
TDBGrid(Sender).DefaultDrawColumnCell( ... );
UltimoValor := Dataset.FieldByName('asiento').Value;

// guarlar una lista de los grupos impares
if (not BoolSwitch) and (Pos(Format('-%s-', [Dataset.FieldByName('asiento').Value]), GrupoImpar) = 0) then
    GrupoImpar := (GrupoImpar + Format('-%s-', [Dataset.FieldByName('asiento').Value]);
...
end;

Es un gasto de memoria, es cierto. Pero la solución en el código es una simplificación de la solución primera propuesta por delphius.

Aún no funciona? Dinos que esto ya lo tomamos como reto

EDITO: Aclaro que GrupoImpar es una variable global privada
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web

Última edición por Chris fecha: 06-01-2011 a las 23:33:58.
Responder Con Cita
  #4  
Antiguo 06-01-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hola de nuevo.

No quiero ser pesado, pero ya lo comenté en un post anterior. Se hace un procedimiento almacenado y se llama al mismo poniendo la where que se quiera, ya que puede ser invocado como una tabla o query. esta where puede ser montada 'al vuelo'.

Código SQL [-]
SET TERM ^ ;

CREATE OR ALTER PROCEDURE PRUEBA 
returns (
    idpresupuesto integer,
    color integer)
as
declare variable widpresupuesto integer;
begin
  /* Procedure Text */
  widpresupuesto = -1000;
  for
  SELECT IDPRESUPUESTO FROM b_lineapresupuesto order by idpresupuesto
  into :idpresupuesto
  do
  begin
    if (widpresupuesto = idpresupuesto) then
    begin
      if (color = 1) then COLOR = 1;
      else color = 0;
    end
    else
    begin
      if (color = 1) then COLOR = 0;
      else color = 1;
    end
    widpresupuesto=idpresupuesto;
    suspend;
  end
end^

SET TERM ; ^
Llamadas
Código SQL [-]
SELECT * from prueba WHERE IDPRESUPUESTO > 40

ó 

SELECT * from prueba WHERE IDPRESUPUESTO >= 40 AND IDPRESUPUESTO <= 200

Espero que sea de utilidad.

Saludos
Aupa Casi, no desfallezcas ahora !!
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #5  
Antiguo 06-01-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Sí, en teoría, sí. El caso es que tengo ya la cabeza como un bombo dándole vueltas a esto desde hace varios días, voy a comer algo y desenchufo un rato, a ver si después lo veo más claro.
Gracias!!!!!!
Tu tranqui.

Prueba y evalúa las opciones. Si tienes problemas nos avisas y le caemos a madrazos a tu jefe y/o cliente por ese requerimiento

Si te funciona, ya sabes... me envías un jamón (la pata entera, por supuesto) por correo

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 07-01-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.070
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Chris Ver Mensaje
[..]
if Dataset.FieldByName('asiento').Value <> UltimoValor then
BoolSwitch := (not BoolSwitch);


C
reo que se está llegando a la conclusión de que esa parte es la que no funciona en este sistema, no se puede comparar con el valor del "último valor" porque puede ser cualquier registro, por ejemplo cuando ha llegado al último registro y ahora se posiciona en el primero, los colores pueden ser iguales, o no, depende de si el número de "asientos" es par o impar.
O sea, pintarlo, lo pinta perfecto, tanto ese método como todos los demás que se han sugerido, pero en cuanto empiezas a moverte por el grid arriba y abajo, con teclas o con el ratón, yendo al primero o al último con ctrl-inicio y ctrl-fin, página arriba y abajo, etc. siempre acaba descontrolando los colores por lo dicho anteriormente, el "anterior" no tiene por qué ser el que está "antes" en el dbgrid.

Entonces las únicas soluciones posibles son las que sacan el color del propio registro, independientemente de lo que tengan los otros registros anteriores o posteriores.
Ya sea mediante procedimiento almacenado, tabla en memoria, etc.

Bueno, esto que comento es lo que me parece según lo visto, puedo estar totalmente equivocado y ahora alguno expone un código que consigue el resultado esperado.
Responder Con Cita
  #7  
Antiguo 07-01-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
[font=monospace]
Creo que se está llegando a la conclusión de que esa parte es la que no funciona en este sistema, no se puede comparar con el valor del "último valor" porque puede ser cualquier registro, por ejemplo cuando ha llegado al último registro y ahora se posiciona en el primero, los colores pueden ser iguales, o no, depende de si el número de "asientos" es par o impar.
O sea, pintarlo, lo pinta perfecto, tanto ese método como todos los demás que se han sugerido, pero en cuanto empiezas a moverte por el grid arriba y abajo, con teclas o con el ratón, yendo al primero o al último con ctrl-inicio y ctrl-fin, página arriba y abajo, etc. siempre acaba descontrolando los colores por lo dicho anteriormente, el "anterior" no tiene por qué ser el que está "antes" en el dbgrid.

Entonces las únicas soluciones posibles son las que sacan el color del propio registro, independientemente de lo que tengan los otros registros anteriores o posteriores.
Ya sea mediante procedimiento almacenado, tabla en memoria, etc.

Bueno, esto que comento es lo que me parece según lo visto, puedo estar totalmente equivocado y ahora alguno expone un código que consigue el resultado esperado.
Solo una pregunta. Independientemente del número en que se inicie el valor del campo ASIENTO, ya sea 5,6,7, etc. los números siempre serán consecutivos? Si fuese así, puedes utilizar el valor del número más bajo. Hacer una resta y del residuo calcular si es par o impar. Par un color, impar otro color.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #8  
Antiguo 07-01-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Chris Ver Mensaje
Es obvio que te molestó mi comentario. Sorry, pero es mi opinión y mi filosofía de desarrollo. Por lo que tú digas, no la cambiaré porque no creo estar equivocado.
Y si me molestó, porque lanzaste un comentario a modo de indirecta a todo aquella persona que ha propuesto una ALTERNATIVA. Repito: ALTERNATIVA, no una solución que sea perfecta, bonita y que te caiga bien a tus propios gustos.

Estamos presentando alternativas, no sabíamos que te tenía que caer bien a vos.

Luego venía el debate de sus pros y contras.

Cita:
Empezado por Chris Ver Mensaje
Tú bien sabes -lo has dicho- que existe una solución sin recurrir a la base de datos, y si esa fuera matar moscas con cañonazos, pues que así sea. Aveces, algunas "tonterías" -desde el punto de vista de la GUI- necesitan cientos de línea y docenas de horas en moldearse."
Hay veces que debemos matar moscas a cañones, y otras veces se puede llegar a un término medio no con un cañón pero si con un mosquete y para otras será válida un simple revólver .22.

Tu que eres el mega chingón desarrollador, y tanto se ve que sabes deberías estar bien al tanto que en ocasiones no existe el blanco o el negro y debe encontrarse una solución en términos grises.

Cita:
Empezado por Chris Ver Mensaje
Aquí estamos totalmente deacuerdo. Pero esa ley no la debes tomar universalmente.
En ningún momento dije que haya que tomarla univesalmente. Más bien dije que mientras que nos permita aplicarla deberías considerarla.
Algunas reglas están para romperse, otras no.. y otras tantas a medias.

Para alguien que pretende decir que no debería tomarse universalmente me sorprende que intentes convencer que la solución pase únicamente por el lado del cliente.
A ver chiquito... estamos debatiendo pero parece que a vos no te agrada que otros presentemos otras vías posibles de encararlo.

Allí si tu tienes tu estilo, al menos otros estamos buscando darles giros al asunto y no quedarnos monotemáticos.

Cita:
Empezado por Chris Ver Mensaje
Desde mi filosofía, es adecuado implementar esta regla para la lógica de negocios de la aplicación, no para ayudarte a pintar la GUI. Si tienes problemas para pintar la GUI, pídele ayuda a otro programador, no a la base de datos.
¿Y no crees que Casi ha pedido ayuda y aquí entre todos, cada uno desde su lugar hizo o está haciendo un esfuerzo?
Tu pretendes tildar a Casi y a los demás como incompetente. Evita esas indirectas molestas... aqui ninguno viene con aires de traer la superioridad...

Y si no has sabido interpretar algunas cosas que se han dicho con humor... bueno, eso ya es otra cosa.

Cita:
Empezado por Chris Ver Mensaje
Acaso valdrá la pena que tus usuarios queden colgados por N segundos solo porque un programador prefirió que su código fuera más simple?
No podemos asegurar que sea N segundos, quizá sea N/2 lo cual sería un factor considerable. Y te digo que en ocasiones es preferible que se la aguanten un poquito antes que tener un código que podría tener la posibilidad de estallar en un futuro y ser inestable en cuanto se añadan nuevas mejoras o adiciones.

Sabes que existe algo llamado KISS... a lo siento... tu prefieres seguir rompiéndote la cabeza y no intentar darle un giro a tus ideas. Bien por ti, si quieres seguir complicándote.

Cita:
Empezado por Chris Ver Mensaje
Cómo tarea es una solución ingeniosa, eso sin duda. Para un sistema en producción, es deficiente. Punto! Mejor sigamos por tu vía, es mucho mejor.
¿Y como sabes y estás tan seguro que tan deficiente eres? ¿Que carajos sabes de los factores que inducen a la perfomance a la que verá sometido el sistema de Casimiro? Quizá esta consulta la use unas pocas personas, muy pocas veces al día, quizá tenga un buen servidor...
Hay más que mirar, y no necesariamente habrá una perdida considerable de perfomance.

Y allí si digo... punto final.

Cita:
Empezado por Chris Ver Mensaje
Sigamos con el hilo, está cada vez más interesante. No lo desvirtuemos.
Si, sigamos con el hilo... que no tiene sentido discutir, menos con alguien que pretende ponerle punto final a un debate de ideas.

Te aviso además, que no fui el iniciador y motivador principal de la solución por el lado de la base de datos... fue román, si tienes algo que decir y objetar crítica a él. Yo solamente seguí su planteo y propuse una ALTERNATIVA.

REPITO Y SOSTENGO HASTA EL CANSANCIO... HABLAMOS DE ALTERNATIVAS.. NO DE QUIEN SE LLEVA EL PREMIO A LA RAZÓN. La verdadera razón se la doy a Dios.

Saludos Cris....

Saludos a los demás.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #9  
Antiguo 07-01-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Demonios, qué caro se está poniendo el jamón

Que no cunda el pánico. Independientemente de la solución que se adopte, hay que tener en cuenta que los partícipes en este hilo no somos aprendices, y la verdad, hemos tardado en encontrar la solución; desde Casimiro que lo abrió al último participante. Y sí, parecía cosa de niños, pero realmente no era así.

Una vez tengamos una sóla o infinidad de soluciones, dejémosle a quien tiene que resolver el problema que lo resuelva como mejor crea conveniente, ya que de sus sistema, de sus usuarios y de sus problemáticas es él quien tiene el máximo de información.

La solución planteada desde la parte del servidor, puede ser tan buena como otra cualquiera, dependerá de la cantidad de veces que ese proceso se lanza, del equilibrio entre coste-beneficio, de lo pijo que sea el usuario, ... como bien comentabais antes.


Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #10  
Antiguo 07-01-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
No pensaba en contestarte xq era desvirtuar el hilo. Pero has sido demaciado tosco y necesito contestar tus desagradables palabras.

Cita:
Empezado por Delphius Ver Mensaje
Y si me molestó, porque lanzaste un comentario a modo de indirecta a todo aquella persona que ha propuesto una ALTERNATIVA. Repito: ALTERNATIVA, no una solución que sea perfecta, bonita y que te caiga bien a tus propios gustos.

Estamos presentando alternativas, no sabíamos que te tenía que caer bien a vos.
Creo que lo que a tí te molesta es una opinión contraria a tus ideas. No critique a cada una de las personas que propuso una solución, hay muchas soluciones propuestas si te fijas en todo el hilo. Critiqué, no solo la solución propuesta por Roman y desarrollada por tí, sino todas las que usen de muleta a la base de datos. Las critico (en el mejor sentido de la palabra) y lo seguiré haciendo. Creo que mi critica no fue en mal modo, si te fijas, eres el único que la ha tomado a mal. Te has ahogado en un vaso de agua sinceramente.


Cita:
Empezado por Delphius Ver Mensaje
¿Y no crees que Casi ha pedido ayuda y aquí entre todos, cada uno desde su lugar hizo o está haciendo un esfuerzo?
Cita:
Empezado por Chris Ver Mensaje
... Si tienes problemas para pintar la GUI, pídele ayuda a otro programador, no a la base de datos.
Sabes leer, pero no interpretar. Casimiro hizo lo correcto, vino a pedir ayuda a otros programadores.

Cita:
Empezado por Delphius Ver Mensaje
Tu pretendes tildar a Casi y a los demás como incompetente. Evita esas indirectas molestas... aqui ninguno viene con aires de traer la superioridad...
Si así lo quieres ver desde tu distorsionada perspectiva.... allá tú. El que se pretende con aires de superioridad eres tú. No toleras la más mínima critica a tus opiniones o en este caso, a tu manera de solucionar las cosas.


Cita:
Empezado por Delphius Ver Mensaje
Sabes que existe algo llamado KISS... a lo siento... tu prefieres seguir rompiéndote la cabeza y no intentar darle un giro a tus ideas. Bien por ti, si quieres seguir complicándote.
No programo desde ayer, sé que es KISS. Yo creo que lo único que sabes es que KISS es la abreviación de "Keep it simple stupid", más no sabes lo que eso conlleva. Puedes aprenderlo aquí.

Cita:
Empezado por Delphius Ver Mensaje
No podemos asegurar que sea N segundos, quizá sea N/2 lo cual sería un factor considerable. Y te digo que en ocasiones es preferible que se la aguanten un poquito antes que tener un código que podría tener la posibilidad de estallar en un futuro y ser inestable en cuanto se añadan nuevas mejoras o adiciones.

¿Y como sabes y estás tan seguro que tan deficiente eres? ¿Que carajos sabes de los factores que inducen a la perfomance a la que verá sometido el sistema de Casimiro? Quizá esta consulta la use unas pocas personas, muy pocas veces al día, quizá tenga un buen servidor...
Hay más que mirar, y no necesariamente habrá una perdida considerable de perfomance.
Si no sabías, hay otra regla en el desarrollo de software: NO DES NADA POR SENTADO. Deberías tenerla siempre en cuenta porque es una de la más importantes.

Cita:
Empezado por Delphius Ver Mensaje
Si, sigamos con el hilo... que no tiene sentido discutir, menos con alguien que pretende ponerle punto final a un debate de ideas.
Creo que en esa frase te estás reflejando tú. Te juro que no me siento aludido.

Cita:
Empezado por Delphius Ver Mensaje
Te aviso además, que no fui el iniciador y motivador principal de la solución por el lado de la base de datos... fue román, si tienes algo que decir y objetar crítica a él. Yo solamente seguí su planteo y propuse una ALTERNATIVA.
Leí la solución propuesta por Roman un minuto después que la propuso. Sé que el tuvo la idea. Pero solo dio una idea, no dijó que fuera la solución. Así lo hemos hecho todos aquí, eso creo. Si tengo algo que decir y objetar será a esta idea, no a él.

Ya sinceramente..... NEEEEXT!!!
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #11  
Antiguo 06-01-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Después de probar las distintas opciones aportadas por los compañeros, debo ecir que no funcionan "totalmente" bien... o yo no he sabido implementarlas, que todo puede ser.

Así que creo que la única opción es la del campo que indique el color o algo así.
No creo que funcione ninguna de las técnicas propuestas. Ja, ja, qué pesimista. Pero es que todas se basan en el "orden" en que se van pintando las celdas pero, en teoría, no es posible saber en qué orden se pintan. Dicho de otra forma, el pintado de celdas no necesariamente es secuencial sino que depende de muchos factores visuales que determinan cuáles celdas son las que requieren repintado. Por ello es que se usa el evento DrawColumnCell. Cuando la VCL detecta que una celda necesita repintarse, lanza el evento.

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
Responder Con Cita
  #12  
Antiguo 06-01-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.070
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Entonces, ¿qué sugieres?
Que llevo tres días con esta tontería y no termina de ir bien, algo tan "simple" :S
Responder Con Cita
  #13  
Antiguo 06-01-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
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,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #14  
Antiguo 06-01-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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:

Código SQL [-]
set @asiento=0,@colorear=0;
select asiento, control, fecha, if (@asiento <> asiento, @colorear:=1-@colorear, @colorear) as colorear, @asiento:=asiento
from tabla
order by fecha, asiento, control

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:

Código Delphi [-]
if DBGrid1.DataSource.DataSet.FieldByName('colorear').AsInteger = 1 then
  DBGrid1.Canvas.Brush.Color := clGreen;

Supongo que en Firebird también existen las variables de usuario así que podría hacerse algo similar.

// Saludos
Responder Con Cita
  #15  
Antiguo 06-01-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
¿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,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #16  
Antiguo 06-01-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Delphius Ver Mensaje
Me dirán que es un desperdicio de memoria pero no veo otra manera.
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
Responder Con Cita
  #17  
Antiguo 08-01-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.070
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
Código SQL [-]set @asiento=0,@colorear=0;
select asiento, control, fecha, if (@asiento <> asiento, @colorear:=1-@colorear, @colorear) as colorear, @asiento:=asiento
from tabla
order by fecha, asiento, control
Cómo se traduce esta línea a:
if (@asiento <> asiento, @colorear:=1-@colorear, @colorear) as colorear, @asiento:=asiento

if @asiento<>asiento then
@colorear = 1-@colorear
else
@asiento = @colorear;
@asiento = asiento;

Supongo que @loquesea quiere decir que es una variable.
Responder Con Cita
  #18  
Antiguo 06-01-2011
Avatar de Aleca
Aleca Aleca is offline
Miembro
 
Registrado: may 2003
Ubicación: Venado Tuerto, Argentina
Posts: 277
Poder: 22
Aleca Va por buen camino
Cita:
Empezado por roman Ver Mensaje
....
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
me parece que estos caminos no nos llevan a buen puerto, hay que replantearse la solución, a ver tenemos que encontrar la forma de que cada fila pueda tener el color para pintar y que no se cambie mientras nos movemos dentro de la grilla, el problema en la practica que veo es la posibilidad de tener muchos registros estariamos usando el tiempo en saber el color.

Casimiro, una pregunta, porque necesitas hacerlo de esta forma?

Saludos
__________________
Aleca
Responder Con Cita
  #19  
Antiguo 06-01-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Aleca Ver Mensaje
Casimiro, una pregunta, porque necesitas hacerlo de esta forma?
Quizá es muy simple mi respuesta pero yo diría que para poder distinguir fácilmente los grupos

// Saludos
Responder Con Cita
  #20  
Antiguo 06-01-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.070
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 15:58:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi