![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
|||
|
|||
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 |
#3
|
|||
|
|||
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 |
#4
|
|||
|
|||
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 |
#5
|
||||
|
||||
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; 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; // Saludos |
#6
|
|||
|
|||
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 |
#7
|
|||
|
|||
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 |
#8
|
|||
|
|||
![]() ![]() 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 |
#9
|
|||
|
|||
pon
If (acol = 1) and (la condicion que quieras ) then begin Y pintas la cell, la linea o lo que quieras saludos end; Saludos |
#10
|
|||
|
|||
Pinta toda la columna, pero el problema esque me borra la informacion que contenía cada celda
|
#11
|
|||
|
|||
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; Saludos |
#12
|
|||
|
|||
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 |
#13
|
|||
|
|||
muchas gracias por tu ayuda Descendents.
Saludos |
#14
|
||||
|
||||
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 "i" siempre será igual que "Arow". Si me equivoco, comunicadlo, Asias SAludos. |
#15
|
|||
|
|||
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 |
#16
|
||||
|
||||
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 |
#17
|
|||
|
|||
Gracias Roman tomare en cuenta todas tus observaciones.
__________________
Carlos Arevalo MSN Messenger: carlos@arevalo.com.ve |
![]() |
|
|
![]() |
|