Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-01-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Cita:
Empezado por Aleca Ver Mensaje
le estuve dando un poco de vuelta al asunto y se armas un campo calculado que lleve el color en que se va a pintar (0-blanco, 1-Verde) y pintas de acuerdo al valor de ese campo.
Estoy de acuerdo en que si no vale ninguna de las soluciones dadas, la siguiente es en lugar de utilizar una query utilizar un procedimiento almacenado que devuelva una columna adicional, que sea el color a pintar.

Saludos
PD: Cuando Casi vea el revuelo que ha formado igual le da un patatús.
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #2  
Antiguo 05-01-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.681
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
jajaja... bueeenooo... ¡¡¡ vaya jaleo !!!
Muchísimas gracias a todos

Y sí, me piden que esté ordenado por fecha y luego por asiento/apunte, pero como cada asiento son varios apuntes...
No sé, el tema no parece muy complicado, al contrario, pero sin embargo se está complicando.

El asunto es que cada asiento son varios registros (apuntes) y cuando hay un número impar de asientos (y en otros casos que no he detectado el motivo) al terminar de pintar el último se queda con el color igual al primer registro, entonces al posicionarse en el primero e intentar mover el cursor a otro... lo pinta del color que no le corresponde.

Se hace el select y pinta el dbgrid:
asiento 1 apunte 1 azul
asiento 1 apunte 2 azul
asiento 1 apunte 3 azul
asiento 2 apunte 1 rojo
asiento 2 apunte 2 rojo

asiento 3 apunte 1 azul
asiento 3 apunte 2 azul
<-- en memoria queda último color usado: azul

Entonces se posiciona en el primer registro, y si muevo el cursor al siguiente, por ejemplo, al estar en azul... lo pinta e rojo. Alterna los colores.

Cuando el número de asientos es par entonces no hay problema
asiento 1 apunte 1 azul
asiento 1 apunte 2 azul
asiento 1 apunte 3 azul
asiento 2 apunte 1 rojo
asiento 2 apunte 2 rojo

asiento 3 apunte 1 azul
asiento 3 apunte 2 azul

asiento 4 apunte 1 rojo
asiento 4 apunte 2 rojo
<-- en memoria queda último color usado: rojo

Al posicionarse en el primero y movernos, cambia rojo por azul, que es el color correcto.



En fin, que voy a hacerlo de otra forma, ya habéis dado pistas sobre eso, un campo calculado que vaya anotando cada vez que cambia de asiento y listo, luego se pinta del color según ese campo, (true/false ó 0/1).
O cargarlo en un clientdataset o tabla en memoria y hacer lo mismo.

Y de nuevo muchísimas gracias a todos
Si se os ocurre una forma "normal" y que funcione... avisáis
Responder Con Cita
  #3  
Antiguo 05-01-2011
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.242
Poder: 22
ElKurgan Va camino a la fama
Pues no se, a mi me funciona lo que he probado. Creía que bastaría con adaptarlo un poco a tu programa y ya está

En fin, mi gozo en un pozo

Saludos
Responder Con Cita
  #4  
Antiguo 05-01-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.681
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por ElKurgan Ver Mensaje
Pues no se, a mi me funciona lo que he probado. Creía que bastaría con adaptarlo un poco a tu programa y ya está
En fin, mi gozo en un pozo
Saludos
Espera, que todavía no lo he probado todo, déjame un poquito de tiempo
Responder Con Cita
  #5  
Antiguo 05-01-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Dudo de su aplicabilidad... pero brinda un 'arco iris' de posibilidades...
Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  Num,Base: Integer;
begin
  Num:= DBGrid1.DataSource.DataSet.FieldByName('ASIENTO').AsInteger;
  if Odd(Num) then
    Base:=  Integer(clRed)
  else
    Base:=  Integer(clBlue);
  DBGrid1.Canvas.Font.Color:= clWhite;
  DBGrid1.Canvas.Brush.Color:= TColor(Base + Num * 100);
  DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 05-01-2011
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.806
Poder: 22
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Creo que la solución sería:
  • Poner AutoCalcFields = False;
  • Crear un campo calculado que contenga el color con el que debe pintarse
  • Cuando se abra la tabla, se deberá hacer un FetchAll y dejar que el OnCalcFields calcule el varlor del color.
Código Delphi [-]
var
   ValorAnterior: string;
   Sombra : boolean;

procedure TDataModule.TablaBeforeOpen(DataSet: TDataSet);
begin
   Sombra := False;
   ValorAnterior := '';
end;

procedure TDataModule.TablaOnCalcFields(DataSet: TDataSet);
begin
   if (ValorAnterior<>TablaNRO_ASIENTO.AsString) then
      Sombra := not Sombra;
   TablaCAMPO_CALCULADO_SOMBRA.AsBoolean := Sombra;
end;

Nota: Según la ayuda de Delphi 6:

Cita:
When AutoCalcFields is True (the default), Lookup fields are recalculated and OnCalcFields is triggered when:

The dataset is opened.
The dataset is put into dsEdit state.
Focus moves from one visual control to another, or from one column to another in a data-aware grid and modifications have been made to the record.

When AutoCalcFields is False, Lookup fields are recalculated and the OnCalcFields event occurs only when

The dataset is opened.
The dataset is put into dsEdit state.
A record is retrieved from a database.

Última edición por duilioisola fecha: 05-01-2011 a las 17:28:18.
Responder Con Cita
  #7  
Antiguo 05-01-2011
Avatar de pacopenin
pacopenin pacopenin is offline
Miembro
 
Registrado: sep 2010
Ubicación: Asturias
Posts: 382
Poder: 16
pacopenin Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
Creo que la solución sería:
  • Poner AutoCalcFields = False;
  • Crear un campo calculado que contenga el color con el que debe pintarse
  • Cuando se abra la tabla, se deberá hacer un FetchAll y dejar que el OnCalcFields calcule el varlor del color.
Código Delphi [-]
var    ValorAnterior: string;    
Sombra : boolean;  
procedure TDataModule.TablaBeforeOpen(DataSet: TDataSet); 
begin    
  Sombra := False;    
  ValorAnterior := ''; 
end;  
procedure TDataModule.TablaOnCalcFields(DataSet: TDataSet); 
begin    
 if (ValorAnterior<>TablaNRO_ASIENTO.AsString) then       
  Sombra := not Sombra;    
 TablaCAMPO_CALCULADO_SOMBRA.AsBoolean := Sombra; 
end;
Yo creo que los tiros van por ahí. Solo si tenemos en la tabla un valor que nos defina el color podremos "dibujar" el grid y desplazarnos (saltando) entre registros.
__________________
http://www.gestionportable.com
Responder Con Cita
  #8  
Antiguo 05-01-2011
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 25
José Luis Garcí Va camino a la fama
Casimiro te pongo unas imágenes de lo que te comentaba anteriormente













Ten en cuenta que usado colores a lo loco, deberías usar, un color y derivar luego de este cambiado sólo uno de los valores de la rgb para que fueran tonalidades mas consecutivas.


La parte del código que creo te puede interesar es esta

Código Delphi [-]

function UlDigit(nNumero: integer): Integer;
var
udTama,udResult:Integer;
cNumero:string;
begin
   cNumero:=IntToStr(nNumero);
   udTama:=Length(cNumero);
   if udTama>1 then udResult:=StrToInt(Copy(cNumero,((udTama)),1))
               else udResult:=StrToInt(cNumero);
   Result := udResult;
end;

procedure TForm1.DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var color:TColor;
begin
     case UlDigit(StrToInt(DataSource2.DataSet.FieldByName('LOTE').value)) of
        0:Color:=ColorBox10.Selected;
        1:Color:=ColorBox12.Selected;
        2:Color:=ColorBox13.Selected;
        3:Color:=ColorBox14.Selected;
        4:Color:=ColorBox15.Selected;
        5:Color:=ColorBox16.Selected;
        6:Color:=ColorBox17.Selected;
        7:Color:=ColorBox18.Selected;
        8:Color:=ColorBox19.Selected;
        9:Color:=ColorBox20.Selected;
     end;
     DBGrid2.Canvas.Brush.Color := Color;
     Dbgrid2.Canvas.FillRect(Rect);
     dbGrid2.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;


Como puedes comprobar use mi BD de pruebas y el Campo por el que hago la comprobación es LOTE, en tu caso sería ASIENTO
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"

Última edición por José Luis Garcí fecha: 05-01-2011 a las 18:48:33.
Responder Con Cita
  #9  
Antiguo 05-01-2011
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 25
José Luis Garcí Va camino a la fama
Bueno siento ser pesado, pero con unos pequeños cambios os muestro lo que digo.







Código Cambiado

Código Delphi [-]
procedure TForm1.DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var color:TColor;
begin
//     if odd then
     case UlDigit(StrToInt(DataSource2.DataSet.FieldByName('LOTE').value)) of
        0:Color:=RGB(205,150,10);
        1:Color:=RGB(210,160,40);
        2:Color:=RGB(215,170,70);
        3:Color:=RGB(220,180,100);
        4:Color:=RGB(225,190,130);
        5:Color:=RGB(230,200,160);
        6:Color:=RGB(235,210,190);
        7:Color:=RGB(240,220,210);
        8:Color:=RGB(245,230,240);
        9:Color:=RGB(250,240,255);
//        0:Color:=ColorBox10.Selected;
//        1:Color:=ColorBox12.Selected;
//        2:Color:=ColorBox13.Selected;
//        3:Color:=ColorBox14.Selected;
//        4:Color:=ColorBox15.Selected;
//        5:Color:=ColorBox16.Selected;
//        6:Color:=ColorBox17.Selected;
//        7:Color:=ColorBox18.Selected;
//        8:Color:=ColorBox19.Selected;
//        9:Color:=ColorBox20.Selected;
     end;
     DBGrid2.Canvas.Brush.Color := Color;
     Dbgrid2.Canvas.FillRect(Rect);
     dbGrid2.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 07:57:04.


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