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 07-01-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Entonces me temo que en ese caso no me vale la propuesta, la condición es que no existan asientos juntos con colores iguales, pero tampoco pueden existir varios colores que confundan al usuario, en principio sólo dos colores.
Es lo que me han pedido, por mí se los presento todos en blanco y negro y se acabó, que el usuario se fije bien


A ver, eso de la línea parece interesante, ¿cómo lo haces?
Responder Con Cita
  #2  
Antiguo 07-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, la verdad es una idea no la he llevado a la practica, pero me imagino que si la dibujas en el grid directamente te puede pasar que desaparezca al moverse como te ocurre en los colores, más bien pienso que seria añadirle un nuevo campo no visible al grid, y cada vez que ocurra la condición que te comentaba marco la casilla.

De todas maneras, piensa que por el sistema de asignación de color sin anclarlo a una condición estática (en este caso el número de asiento), te pueden desaparecer los colores al moverse el Grid.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #3  
Antiguo 07-01-2011
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 947
Poder: 25
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Aqui incorporando muchos colores...
Código Delphi [-]
    Sombra:Boolean;
    List:TStrings;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
   index:Integer;
begin
      with TDBGrid(Sender) do
      begin
         if (gdFocused in State) then //Si tiene el foco
         begin
            Canvas.Font.Color := clWhite;
            Canvas.Brush.Color := clHighlight;
         end
         else
         begin
            {Sombra puede ser 1 o 2. Si está a 0 no esta establecido}
            Index:=List.IndexOf(DataSource.DataSet.FieldByName('ASIENTO').AsString);

            Canvas.Font.Color := clBlack;
           Canvas.Brush.Color := TColor(List.Objects[index]);

         end;
         DefaultDrawColumnCell(Rect, DataCol, Column, State);
      end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
     List:=TStringList.Create;
     Table1.Active:=True;
end;

procedure TForm1.Table1AfterOpen(DataSet: TDataSet);
begin
   Sombra := true;
end;

procedure TForm1.Table1CalcFields(DataSet: TDataSet);
var
   Index:Integer;
   fColor:TColor;
begin
     Index:=List.IndexOf(DataSet.FieldByName('ASIENTO').AsString);
     if Index=-1 then
     begin
          fColor:=RGB(Random(205),Random(205),Random(205));
          List.AddObject(DataSet.FieldByName('ASIENTO').AsString, Pointer(fColor)); //Sombra) );
          Sombra := not Sombra;
     end;
end;
Responder Con Cita
  #4  
Antiguo 07-01-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 21
Chris Va por buen camino
Bueno creo que ya tengo una primera alternativa...

Se trata de la mejora del código que ofrecí anteriormente. Solucionando sus problemas. Casimiro tendrá que revisar lots cambios hechos con respecto al programa que el subió hace unas horas.

Aquí el archivo que he subido.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #5  
Antiguo 07-01-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 21
Chris Va por buen camino
Este es el código:
Código Delphi [-]
procedure TForm24.gr1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
    background_colors: array[0..1] of TColor = (clYellow, clWhite);
var
    BackgroundColor: TColor;
begin
if (UltimoValor > qr1.FieldByName('NUMEROASIENTO').Value) then
begin
    if Pos(Format('-%s-', [qr1.FieldByName('NUMEROASIENTO').Value]), GrupoImpar) > 0 then
        BackgroundColor := background_colors[1]
    else
        BackgroundColor := background_colors[0];
end
else
begin
    if qr1.FieldByName('NUMEROASIENTO').Value <> UltimoValor then
            BoolSwitch := (not BoolSwitch);

        BackgroundColor := background_colors[Integer(BoolSwitch)];
        UltimoValor := qr1.FieldByName('NUMEROASIENTO').Value;
end;

if not (gdSelected in State) then
    TDBGrid(Sender).Canvas.Brush.Color := BackgroundColor;

TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);

if not (UltimoValor > qr1.FieldByName('NUMEROASIENTO').Value) then
    if (BoolSwitch) and (Pos(Format('-%s-', [qr1.FieldByName('NUMEROASIENTO').Value]), GrupoImpar) = 0) then
        GrupoImpar := (GrupoImpar + Format('-%s-', [qr1.FieldByName('NUMEROASIENTO').Value]));
end;

Cada vez que se hace la consulta hay que reiniciar las variables globales (UltimoValor, GrupoImpar, BoolSwitch) de esta forma:
Código Delphi [-]
  // inicializar los datos del control de grupo
  UltimoValor := 0;
  GrupoImpar := '';
  BoolSwitch := False;

No es un código perfecto. Obviamente se puede obtimizar un poco, de hecho creo que deberían tomarlo tipo pseudocodigo. Pero en mis pruebas ha funcionado según los requerimientos que le entiendo a casimiro. Cualquier inconveniente, pues dejadlo saber.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #6  
Antiguo 07-01-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por Chris Ver Mensaje
Bueno creo que ya tengo una primera alternativa...Chris
Creo que no vale, el problema es que almacena en un string los números que ya ha presentado para saber con qué color presentarlo, para ello hay que recorrer desde el principio hasta el final todos los registros. Si por ejemplo vas directamente al último con ctrl+fin entonces no guarda esos valores y no puede pintarlos.
Responder Con Cita
  #7  
Antiguo 07-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
No sé si sirva para esto, pero lo más parecido que he encontrado en Firebird para las variables de usuario de MySQL es RDB$SET_CONTEXT() y RDB$GET_CONTEXT().

Podrías probar a ver si funcionan similarmente.

// Saludos
Responder Con Cita
  #8  
Antiguo 07-01-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
No sé si sirva para esto, pero lo más parecido que he encontrado en Firebird para las variables de usuario de MySQL es RDB$SET_CONTEXT() y RDB$GET_CONTEXT().

Podrías probar a ver si funcionan similarmente.
// Saludos
Voy a ver qué encuentro sobre eso
Responder Con Cita
  #9  
Antiguo 07-01-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 21
Chris Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Creo que no vale, el problema es que almacena en un string los números que ya ha presentado para saber con qué color presentarlo, para ello hay que recorrer desde el principio hasta el final todos los registros. Si por ejemplo vas directamente al último con ctrl+fin entonces no guarda esos valores y no puede pintarlos.
Tienes razón. De hecho, ni conocía -o ya se me había olvidado- ese acceso por teclado (CRTL + END). Habrá que modificar el código entonces. Teniendo en cuenta lo que has dicho, podría almacenarse los número al momento de cambiar el registro actual. No sé exactamente como se haría esto, pero debe haber alguna forma de hacerlo.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #10  
Antiguo 07-01-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por rgstuamigo
[..] invalidate [..]
He probado 3 alternativas y con el invalidate y sin él... hace lo mismo


Cita:
Empezado por Chris Ver Mensaje
Tienes razón. De hecho, ni conocía -o ya se me había olvidado- ese acceso por teclado (CRTL + END).
Está duro de roer el hueso

Cita:
Empezado por cloayza Ver Mensaje
Una pequena optimizacion de codigo que propuse anteriormente.
Nada, acaba alternando colores incorrectamente.

Responder Con Cita
  #11  
Antiguo 07-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 Chris Ver Mensaje
Tienes razón. De hecho, ni conocía -o ya se me había olvidado- ese acceso por teclado (CRTL + END). Habrá que modificar el código entonces.
Es que no sólo es eso. Hay muchas formas de desplazarse por un DBGrid. De entrada puedes arrastrar el botón de la barra de desplazamiento a una posición arbitraria, o puedes moverte por código, por ejemplo, mediante una búsqueda, etc.

El evento DrawColumnCell existe porque en la práctica es casi imposible predecir cuales celdas han de dibujarse. Por ello es que considero que cualquier técnica que recurra a una suerte de "último valor" fallará tarde o temprano pues presupone un pintado secuencial de las filas, cosa que no siempre se dará de esa manera.

// Saludos
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 23:59:28.


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