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 10-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 newtron Ver Mensaje

Delphius....Chris... venga.... ahora que sois amigos... un besito .
Yo le voy a Necaxa...
Podríamos darnos un apretón de manos o cuanto mucho un abrazo pero eso de besito... ¡ni por todo el oro y las mujeres del mundo!

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #2  
Antiguo 10-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 Delphius Ver Mensaje
Yo le voy a Necaxa...
Jajajaja.... frace escrita en oro x don ramón!
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #3  
Antiguo 16-03-2017
poniente poniente is offline
Registrado
 
Registrado: ene 2006
Posts: 9
Poder: 0
poniente Va por buen camino
Lo conseguí

Buenas tardes a todos, después de estar leyendo todo el hilo y cogiendo ideas creo que lo he conseguido, por lo menos a mí me funciona y no he encontrado todavía un caso que me falle. Voy a ello...
Mi caso era parecido al de casimiro, tengo un dbgrid en el que aparecen una columna "Unidad de producción" (integer), esta columna se puede repetir en el formulario 1 o más veces. La idea es alternar (en mi caso con gris y blanco) los grupos de filas con la misma Unidad de Producción para facilitar visualmente al usuario la detección de estas filas. Al lío...
He utilizado dos arrays (color y ud_producción) del mismo tamaño que la consulta que me devuelve las filas del dbgrid, la idea es guardar en uno el color actual de cada fila y en el y en el otro la ud. de producción. De esta manera cuando voy pintando en el drawcolumncell voy comparando siempre con el valor de ud. producicón de la fila anterior para saber si tengo o no que cambiar el color. Pongo el código porque quizás estoy liando un poco con la explicación.

Código Delphi [-]
procedure TFMFinalizaOrdMan.DBGDetalle_lineaDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  cambia_color, fila, fila_ant : SmallInt;
begin
  //Pintamos las filas alternas en funcion de la ud de producción
  fila := (sender as TDBGrid).datasource.dataset.RecNo - 1;
  if fila = 0 then
    fila_ant := 0
  else
    fila_ant := fila - 1;

  cambia_color := 0;

  if v_ud_produccion[fila] = 0 then
  begin

    v_ud_produccion[fila] := Column.Field.Dataset.FieldbyName('UD_PRODUCCION').AsInteger;
    if v_ud_produccion[fila] <> v_ud_produccion[fila_ant] then
      cambia_color := 1
    else
      v_color[fila] := v_color[fila_ant];

    if cambia_color = 1 then
    begin
      if v_color[fila_ant] = 1 then
        v_color[fila] := 0
      else
        v_color[fila] := 1;
    end;
  end;

  with (Sender as TDBGrid) do
  begin
    if v_color[fila] = 1 then
      Canvas.Brush.Color := clBtnFace
    else Canvas.Brush.Color := clWindow;

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

//Como el dbgrid permite ordenar haciendo click en el título vacío los arrays
// para que después el ondrawcolumncell los vuelva a rellenar
procedure TFMFinalizaOrdMan.DBGDetalle_lineaTitleClick(Column: TColumn);
var
  i : SmallInt;
begin
  for i := 0 to (length(v_color)-1) do
  begin
    v_color[i] := 0;
    v_ud_produccion[i] := 0;
  end;
end;


Creación de los array en el public del formulario
Código Delphi [-]
  public:     
     v_ud_produccion : array of Integer;     
     v_color : array of Integer;

Después de recargar el dataset asigno el tamaño de los arrays
Código Delphi [-]
  SetLength (v_ud_produccion, DMFinalizaOrdMan.QMTabla.RecordCount+1); 
  SetLength (v_color, DMFinalizaOrdMan.QMTabla.RecordCount+1);

En mi caso tengo un para de botones que filtran lanzando de nuevo el dataset, en cada uno de ellos vacío los arrays con las mismas instrucciones
Lo suyo sería hacer un procedure que lo haga y se llame desde los sitios en los que cambie el dataset pero estoy haciéndolo un poco rápido.(perdón)

Código Delphi [-]
  
  for i := 0 to (length(v_color)-1) do   
  begin     
    v_color[i] := 0;     
    v_ud_produccion[i] := 0;   
  end

Con esto a mí me funciona a la perfección. Sería cuestión ya cada uno de ajustar a las peculiaridades de su código.
Espero aportar mi granito de arena y ayudar al igual que todos vosotros me habéis ayudado en muchos casos.

Última edición por ecfisa fecha: 16-03-2017 a las 17:22:40. Razón: Corregir problema de formato WYSIWYG
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:17:23.


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