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 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: 23
José Luis Garcí Va camino a la fama
Como dice Roma no estas equivocado Casimiro, la asignación es para cinco y por eso te pasa el que dos tenga el mismo color, en el caso de los diez dígitos las probabilidades serían menor, claro se puede hacer para cien, mil, etc, pero creo que aun así las probabilidades de que ocurriese siempre existirían. Lo que te expongo es sólo una idea, podrías aplicarle a esta para cinco,para la de dos o la de diez, la siguiente situación si color a asignar es igual ala variable global colorelegido y el valor del campo ASIENTO diferente a la variable global Asiento, dibujo una linea en la parte superior de la presente fila para distinguir mejor los diferentes asientos, aún con el mismo color.

De lo único que estoy seguro es de que no se te desplazarán los colores.

La idea es que quedara así, más o menos


__________________
Un saludo desde Canarias, "El abuelo Cebolleta"

Última edición por José Luis Garcí fecha: 07-01-2011 a las 20:40:10.
Responder Con Cita
  #2  
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.076
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi 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
  #3  
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: 23
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
  #4  
Antiguo 07-01-2011
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 921
Poder: 23
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
  #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: 19
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
  #6  
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
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
  #7  
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.076
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi 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
  #8  
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
  #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: 19
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 Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
De última hora he notado que si los registros no traen ningún tipo de orden en NUMEROASIENTO, el código que compartí hace unos minutos no funciona a cómo debería hacerlo. Vamos a trabajar en ello. Ya veremos una solución, nada más que parece no estar nada fácil :/
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
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 16:30:28.


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