PDA

Ver la Versión Completa : colores diferentes dentro de dbgrid


zugazua2001
05-08-2007, 02:26:06
Hola amigos del foro, estoy armando una aplicacion para el manejo de reservas y ocupaciones de un hotel, utilizo una grilla en donde las filas van a ser los dias TDates y las columnas van a ser las habitaciones. Dos cuestiones tengo:
La grilla posee un primer campo del tipo TDate y los otros 20 campos del tipo A(100) donde va R u O en caso de estar o no reservada, dos espacios en blanco y el nombre del cliente.
Primero: si se da que el primer caracter es una "O" entonces me gustaria pintar la informacion de la celda con el color azul en caso de que sea "R" esa celda con el color verde.
Segundo: se pueden ver las filas como columnas y viceversa??? para poder recorrer la grilla horizontalmente y no verticalmente?? Uso delphi 6 y paradox.

ejm:

Fecha Habit 1 Habit 2 Habit 3 Habit 4 Habit 5
01/01/07 O / Perez R / Diaz O / Mendez
02/01/07 O / Perez R / Diaz O / Gonzales
.......
......
......

Muchisimas gracias por todo.

eduarcol
05-08-2007, 02:32:32
Con respecto a los colores prueba esto

procedure TBusquedas.grBusquedaDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Loquequieras = 'O' then
grBusqueda.canvas.brush.color := El color que quieras;
grBusqueda.DefaultDrawColumnCell(rect,DataCol,Column,State)

end;

zugazua2001
18-08-2007, 23:50:03
Hola amigos del foro, yo necesito cambiar segun el valor de la celda de una grilla que puede ser O u R el color de la fuente, y no puedo hacerlo me cambia todo. Les agradeceria me orientaran.
Muchisimas gracias por todo!

JULIPO
19-08-2007, 02:00:34
Creo que esto te puede servir tienes que leer el dato que t interesa y asignarle el color que quieras.


procedure tdata.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
inherited;
if query1.Field[No].AsString[1] ='R' then
begin
DBGrid1.Canvas.Font.Color:=clBLACK;
dbgrid1.Canvas.Brush.Color:=clblue;
end
ELSE
BEGIN
if query1.Field[No].AsString[1] ='O' then
BEGIN
DBGRID1.Canvas.Font.Color:=CLWHITE;
DBGRID1.Canvas.Brush.Color:=CLgreen
END
END;
DBGrid1.DefaultDrawColumnCell
(Rect, DataCol, Column, State);
end;







tienes que hacer esto con cada columna No es el numero de field en tu tabla de paradox

Espero te sirva

egostar
19-08-2007, 02:19:40
Otra forma de como hacerlo a como te lo han dicho en las otras respuestas que te han dado.


procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
with Sender as TStringGrid do begin
If StringGrid1.Cells[ACol,ARow] <> '' then begin
Case StringGrid1.Cells[ACol,ARow][PosiciondelaLetra] of
'O' : begin
Canvas.Brush.Color := clNavy;
end;
'R' : begin
Canvas.Brush.Color := clGreen;
end;
end;
end;
end;
end;


Salud OS

zugazua2001
21-08-2007, 13:37:37
Muchas gracias amigos voy a probar ambas respuestas.

zugazua2001
22-08-2007, 15:59:16
Amigo del foro no comprendo que es el query1 que me pusistes
Muchisimas gracias por todo

Creo que esto te puede servir tienes que leer el dato que t interesa y asignarle el color que quieras.


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
procedure tdata.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
inherited;
if query1.Field[No].AsString[1] ='R' then
begin
DBGrid1.Canvas.Font.Color:=clBLACK;
dbgrid1.Canvas.Brush.Color:=clblue;
end
ELSE
BEGIN
if query1.Field[No].AsString[1] ='O' then
BEGIN
DBGRID1.Canvas.Font.Color:=CLWHITE;
DBGRID1.Canvas.Brush.Color:=CLgreen
END
END;
DBGrid1.DefaultDrawColumnCell
(Rect, DataCol, Column, State);
end;










tienes que hacer esto con cada columna No es el numero de field en tu tabla de paradox

Espero te sirva

JULIPO
22-08-2007, 16:10:12
Es un componente con el que puedes leer las tablas de bases de datos incluyendo paradox puede ser un query o table dependiendo de como lonecesites utilizas alguno, si no utilizas este tipo de componente lo cambias por el componente que tu utilizas para leer los datos.
;)
Espero Sea Claro

zugazua2001
23-08-2007, 13:14:58
Amigo disculpa, pero no puedo leer los datos donde vos pusistes query1.
Como puedo hacer para leerlo?? Muchas gracias!!! Tengo el mismo problema con la solucion en que aparece

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
with Sender as TStringGrid do begin
If StringGrid1.Cells[ACol,ARow] <> '' then begin
Case StringGrid1.Cells[ACol,ARow][PosiciondelaLetra] of
'O' : begin
Canvas.Brush.Color := clNavy;
end;
'R' : begin
Canvas.Brush.Color := clGreen;
end;
end;
end;
end;

Ese TStringGrid1 que seria??? cuando compilo me sale el msj de error.
Bueno disculpen tantas preguntas.
Gracias nuevamente por todo.

zugazua2001
23-08-2007, 17:20:30
No entiendo que es el query1
Muchas gracias !!

zugazua2001
28-08-2007, 12:54:46
No entiendo que es el query1.

karlaoax
28-08-2007, 15:33:22
Yo lo he hecho con una tabla cualquiera, y funciona a la perfeccion.

if table1.Field[No].AsString[1] ='rojo' then
begin
DBGrid1.Canvas.Font.Color:=clBLACK;
dbgrid1.Canvas.Brush.Color:=clblue;
end

Aunque ahora me intriga, intentarlo validando con una fecha anterior contra una actual, ejemplo: 11 de Agosto 2007 vs 28 de Agosto, hacer una operacion de resta entre estas 2, y colorear aquellas que sean mayores a 15, interesante, voy a hacer una prueba.

eduarcol
28-08-2007, 18:00:08
el query1 es el origen de los datos, como recuperas los datos de la tabla????

zugazua2001
04-09-2007, 18:56:11
Hola amigos del foro, sigo con problemas para colorear segun el valor de la celda la misma de un color un otro.
Las soluciones que me han dado, no me funcionan. Yo utilizo un DBGrid, en la primer columna poseo por cada fila las fechas correlativas y en cada columna restante tengo las cabañas, me gustaria poder colorear con un color u otro cada celda segun el valor de la misma.
Les agradeceria me orientaran mas porque no puedo lograrlo. En algunas soluciones me han puesto Query para levantar los datos en otros TStringGrid, realmente no me ha funcionado nada.
Les agradeceria me orientaran.
Muchisimas gracias por todo y disculpen las molestias.

eduarcol
04-09-2007, 19:12:57
que tal si colocas el codigo que estas utilizando a ver donde puede estar el error????

zugazua2001
05-09-2007, 01:21:31
Código Delphi [-] (http://www.clubdelphi.com/foros/#)
procedure tdata.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
inherited;
if query1.Field[No].AsString[1] ='R' then
begin
DBGrid1.Canvas.Font.Color:=clBLACK;
dbgrid1.Canvas.Brush.Color:=clblue;
end
ELSE
BEGIN
if query1.Field[No].AsString[1] ='O' then
BEGIN
DBGRID1.Canvas.Font.Color:=CLWHITE;
DBGRID1.Canvas.Brush.Color:=CLgreen
END
END;
DBGrid1.DefaultDrawColumnCell
(Rect, DataCol, Column, State);
end;


Me tira error en el query1, el campo No no se que es.
Supongo que esos son los dos puntos que estan mal.
Muchas gracias por todo.

karlaoax
05-09-2007, 15:34:30
Me tira error en el query1, el campo No no se que es.
Supongo que esos son los dos puntos que estan mal.
Muchas gracias por todo.

Mira
Field[No] = Nombre de tu campo
AsString[1] = Orden del campo, normalmente se empieza con un 0 cero

zugazua2001
05-09-2007, 17:48:16
Desde el query1 es que me tira error.
muchas gracias.

Mira
Field[No] = Nombre de tu campo
AsString[1] = Orden del campo, normalmente se empieza con un 0 cero

eduarcol
05-09-2007, 17:52:57
No es el numero del campo en el conjunto de Fields, desde el 0 hasta el n-1, se supone debes sustituirlo por el valor correspondient

zugazua2001
07-09-2007, 17:52:56
El query no me lo reconoce. no entiendo porque el campo No, si yo quiero que me recorra todas las columnas.
Sinceramente no comprendo.
Muchas gracias

No es el numero del campo en el conjunto de Fields, desde el 0 hasta el n-1, se supone debes sustituirlo por el valor correspondient

Chris
07-09-2007, 18:16:58
if miQuery.FieldByName('CampoReserva').asString = 'R' Then
....
else if miQuery.FieldByName('CampoReserva').asString = 'R' Then
....

miQuery = Es el componente que utilizas para recuperar los datos de la consulta.
CampoReserva = es el campo que indica si la habitación está reservada.

por cierto, ¿que tipo de datos guarda el campo que indica si la habitación esta reservada o no?, es tipo string? o booleano?