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 17-12-2003
Carlos Arevalo Carlos Arevalo is offline
Miembro
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 111
Poder: 21
Carlos Arevalo Va por buen camino
Filas de colores en Stringgrid

He encontrado varios ejemplos en el foro acerca de del tema pero coloreando celdas individuales y la verdad estoy un poco confundido con el tema.

Me podrian explicar un poco mas claro como es el procedimiento para colorear las filas en un Stringgrid.

Gracias, amigos.
__________________
Carlos Arevalo
MSN Messenger: carlos@arevalo.com.ve
Responder Con Cita
  #2  
Antiguo 17-12-2003
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 22
Descendents Va por buen camino
Pon esto en el Ondrawcell del stringgrid
begin
if (acol = 1) and (arow = 1) then begin
StringGrid1.Canvas.Brush.Color := clred;
StringGrid1.Canvas.FillRect(Rect);
end;
end;

Este evento ondrawcell se produce cuando se dibujan las celdas del stringgrid. pues lo que le estoy diciendo aqui es.

si acol es 1 y arow es 1 pintas la celda de rojo.

acol = columna
arow = fila

A ver si te sirvio

Saludos
Responder Con Cita
  #3  
Antiguo 17-12-2003
Carlos Arevalo Carlos Arevalo is offline
Miembro
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 111
Poder: 21
Carlos Arevalo Va por buen camino
Gracias Descendents

Este ejemplo ya se encuentra publicado y esta perfecto lo que no se me da es pintar toda la fila si me podrian dar un ejemplo lo agradeceria mucho.

Gracias.
__________________
Carlos Arevalo
MSN Messenger: carlos@arevalo.com.ve
Responder Con Cita
  #4  
Antiguo 17-12-2003
Carlos Arevalo Carlos Arevalo is offline
Miembro
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 111
Poder: 21
Carlos Arevalo Va por buen camino
Al agregarle el FOR puedo colorear la fila.

Mi pregunta
Es este el mejor metodo o se puede hacer de otra forma?

var i: integer;
begin
for i:=1 to 7 do
begin
if (acol = i) and (arow = 0) then
begin
StringGrid1.Canvas.Brush.Color := clred;
StringGrid1.Canvas.FillRect(Rect);
end;
end;
__________________
Carlos Arevalo
MSN Messenger: carlos@arevalo.com.ve
Responder Con Cita
  #5  
Antiguo 17-12-2003
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
Desde la primera solución tienes la respuesta. Simplemente omite la condición sobre la columna:

Código:
if ARow = 1 then
begin
  StringGrid1.Canvas.Brush.Color := clred;
  StringGrid1.Canvas.FillRect(Rect);
end;
Como no hay condición sobre la columna, el código se ejecutará para cualquier celda de la fila 1, esto es, sobre todo el primer renglón.

Desde luego deberá sustituir 1 por el renglón que desees colorear. Si por ejemplo, lo que deseas es colorear los renglones alternadamente puees hacer algo como:

Código:
if Odd(ARow) then
begin
  StringGrid1.Canvas.Brush.Color := clred;
  StringGrid1.Canvas.FillRect(Rect);
end;
que pintará de rojo todos los renglones impares.

// Saludos
Responder Con Cita
  #6  
Antiguo 17-12-2003
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 22
Descendents Va por buen camino
Como dice roman.

Arriba te indique que arow era linea y acol era columna.

La condicion que tu le pongas al ondrawcell es la que tu quieras.De todos modos, supongo que ya te quedo claro con le que te dijo roman no?

Saludos
Responder Con Cita
  #7  
Antiguo 17-12-2003
Carlos Arevalo Carlos Arevalo is offline
Miembro
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 111
Poder: 21
Carlos Arevalo Va por buen camino
Ahora si estoy claro yo pense que tenia que utilizar las dos variables al mismo tiempo Acol y Arow.



Muchas gracias.
__________________
Carlos Arevalo
MSN Messenger: carlos@arevalo.com.ve
Responder Con Cita
  #8  
Antiguo 20-12-2003
Carlos Arevalo Carlos Arevalo is offline
Miembro
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 111
Poder: 21
Carlos Arevalo Va por buen camino


Disculpen pero no le agarro la vuelta.

No logro entender bien como es la cuestion de pintar el grid.

Me explico para ver si me pueden orientar.

Lo que quiero es que segun una condición en la columna X se me pinte la linea del grid de un color X.

Segun lo que entendi esto es lo que me da el cerebro.

with stringgridpendientes do
begin
i:=Arow;
txt:=Cells[ACol,ARow];
if txt='Por revisar' then
begin
if Arow=i then
begin
Canvas.Brush.Color:=Clred;
Canvas.FillRect(rect);
Canvas.TextOut(Rect.left +1, Rect.top +1, Cells[ACol,ARow]);
end;
end
else
begin
if Arow=i then
begin
Canvas.Brush.Color:=Clblue;
Canvas.FillRect(rect);
Canvas.TextOut(Rect.left +1, Rect.top +1, Cells[ACol,ARow]);
end;
end;
end;
end;


Muchas gracias.
__________________
Carlos Arevalo
MSN Messenger: carlos@arevalo.com.ve
Responder Con Cita
  #9  
Antiguo 21-12-2003
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 22
Descendents Va por buen camino
pon

If (acol = 1) and (la condicion que quieras ) then begin
Y pintas la cell, la linea o lo que quieras saludos
end;

Saludos
Responder Con Cita
  #10  
Antiguo 06-01-2004
jpcancino jpcancino is offline
Miembro
 
Registrado: ene 2004
Posts: 47
Poder: 0
jpcancino Va por buen camino
Pinta toda la columna, pero el problema esque me borra la informacion que contenía cada celda
Responder Con Cita
  #11  
Antiguo 06-01-2004
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 22
Descendents Va por buen camino
estado mirando y prueba esto a ver que tal

Código:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 if (acol = 1) then begin
 StringGrid1.Canvas.Brush.Color := clblue;
 StringGrid1.Canvas.Font.Color := clHighlightText;
 StringGrid1.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[acol,arow]);
 end;
end;
Saltate el fill rect, y ponle el textrect,. y dale el color que quieres en el font del canvas

Saludos
Responder Con Cita
  #12  
Antiguo 06-01-2004
Carlos Arevalo Carlos Arevalo is offline
Miembro
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 111
Poder: 21
Carlos Arevalo Va por buen camino
Este es el codigo que estoy utilizando pero no logro pintar la fila completa solo la primera celda de cada fila.

Alguna sugerencia?

Gracias.

procedure TFormOrden.StringGridpendientesDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);

var txt: string;
i: integer;

begin

with stringgridpendientes do
begin
i:=Arow;
txt:=Cells[ACol,ARow];
if (Arow=i) and (txt='Por revisar') then
begin
Canvas.Brush.Color:=Clred;
Canvas.FillRect(rect);
Canvas.TextOut(Rect.left +1, Rect.top +1, Cells[ACol,ARow]);
end;

if (Arow=i) and (txt='Lista') then
begin
Canvas.Brush.Color:=Clblue;
Canvas.FillRect(rect);
Canvas.TextOut(Rect.left +1, Rect.top +1, Cells[ACol,ARow]);
end;
end;
end;
__________________
Carlos Arevalo
MSN Messenger: carlos@arevalo.com.ve
Responder Con Cita
  #13  
Antiguo 06-01-2004
jpcancino jpcancino is offline
Miembro
 
Registrado: ene 2004
Posts: 47
Poder: 0
jpcancino Va por buen camino
muchas gracias por tu ayuda Descendents.

Saludos
Responder Con Cita
  #14  
Antiguo 07-01-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
lo siguiente a mi entender sobra está marcado en rojo, que
conste que no he trabajado con el stringGrid, lo intento evitar,
pero en fin, al grano:
Código:
with stringgridpendientes do
begin
  i:=Arow; 
txt:=Cells[ACol,ARow];
if (Arow=i) and  (txt='Por revisar') then
Entiendo que se debe pintar para cada columna, pero en cada evento,
"i" siempre será igual que "Arow".

Si me equivoco, comunicadlo, Asias


SAludos.
Responder Con Cita
  #15  
Antiguo 09-01-2004
Carlos Arevalo Carlos Arevalo is offline
Miembro
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 111
Poder: 21
Carlos Arevalo Va por buen camino
Sigo con el problema de no poder colorear la fila entera.

Con el codigo que expuse anteriormente solo puedo colorear la primera celda.


Gracias por la ayuda que me puedad prestar.

Gracias.
__________________
Carlos Arevalo
MSN Messenger: carlos@arevalo.com.ve
Responder Con Cita
  #16  
Antiguo 09-01-2004
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
Algunos comentarios:

Primero que nada te ruego que utilices la etiqueta [ code ] para que el código que escribas aparezca correctamente indentado. Cuando un hilo progresa y el código sigue sin indentarse llega un momento en que da pereza leerlo.

En segundo lugar ya Lepe te indicó que hay un error en la lógica de tu código. La condición (ARow = i) siempre evalúa a true por lo que sale sobrando en el condicional.

En tercer lugar hay que entender que el evento DrawCell se ejecuta por cada celda y no por cada fila. Tal como tienes el código, únicamente se iluminarán de rojo las celdas (no las filas) cuyo texto sea "Por revisar" y de azul las celdas (no las filas) cuyo texto sea "Lista", independientemente de la posición que ocupen en la fila.

Suponiendo que estos textos los tienes en la primera celda de cada fila (cosa que sospecho por lo que dices de que sólo se ilumina la primera celda) lo que debes hacer es comparar el texto no de la celda que te llega en el evento (Cells[ACol,ARow]) sino con la primera celda de la fila indicada por ARow:

Cells[0, ARow]

Finalmente, es innecesario usar Canvas.TextOut para escribir el texto de la celda. Unicamente cambia el color del fondo con Canvas.Brush.Color y utiliza el método DefaultDrawColumnCell después para que escriba el texto.

// Saludos
Responder Con Cita
  #17  
Antiguo 09-01-2004
Carlos Arevalo Carlos Arevalo is offline
Miembro
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 111
Poder: 21
Carlos Arevalo Va por buen camino
Gracias Roman tomare en cuenta todas tus observaciones.
__________________
Carlos Arevalo
MSN Messenger: carlos@arevalo.com.ve
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


La franja horaria es GMT +2. Ahora son las 10:41:34.


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