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 31-07-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
forma de cambiar el color de una celda

Buenas, revisando para poder cambiar el color de una celda de un stringgrid(aunque uso xstringgrid), desde codigo y la que yo necesite, he llegado a esto:
Código Delphi [-]
procedure TForm1.calendarioDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 calendario.canvas.brush.color := clGreen;

calendario.Canvas.FillRect(rect);
calendario.canvas.TextOut(Rect.Left,Rect.Top,calendario.Cells[ACol,ARow]);

end;
el problema es que me los cambia a todos, tambien he llegado a poner
Código Delphi [-]
calendario.col:=5
calendario.row:=5;
calendario.font.Style:=[fsbold];
 calendario.Canvas.Brush.Color:= clRed;
se que me hace falta poner calendario.canvas.fillrect(rect), pero la rect no se que parametros poner.

Tampoco puedo poner la letra en bold.

Alguna idea de poder manipular los colores de cada celda a antojo?.

ya estuve revisando los post relacionados pero no dan respuesta a lo que busco.

gracias
Responder Con Cita
  #2  
Antiguo 31-07-2007
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
Como lo tienes vas por buen camino. Lo que falta es poner la condición para que se restrinja a la celda que quieres, algo como:

Código Delphi [-]
procedure TForm1.calendarioDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if (ACol = 5) and (ARow = 5) then
    calendario.canvas.brush.color := clGreen;

  calendario.Canvas.FillRect(rect);
  calendario.canvas.TextOut(Rect.Left,Rect.Top,calendario.Cells[ACol,ARow]);
end;

// Saludos
Responder Con Cita
  #3  
Antiguo 31-07-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Gracias roman, asi funciona pero solo para acol=5 y arow=5 pero dentro de esa procedure, hay forma enviarle esos datos desde fuera de la procedure, o desde otra procedure, por ejemplo formshow?

gracias de nuevo
Responder Con Cita
  #4  
Antiguo 31-07-2007
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
Lo que tendrías que hacer es almacenar en un par de variables externas al evento, los valores de la celda que debas pintar, por ejemplo:

Código Delphi [-]
type
  TForm1 = class(TForm)
    ...
  private
    Columna: Integer;
    Renglon: Integer;
  end;

Y entonces en el evento DrawCell dejas la condición así:

Código Delphi [-]
if (ACol = Columna) and (ARow = Renglon) then
   calendario.canvas.brush.color := clGreen;

De esta manera ya puedes pintar la celda que quieras simplemente asignando valores a esas variables en el momento que quieras.

// Saludos
Responder Con Cita
  #5  
Antiguo 31-07-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
la cosa funciona, perdon que insista, pero si quiero pintar varias celdas como haria, porque no se como llamar al procedimiento.
Código Delphi [-]
columna:=0;
 renglon:=5;
calendario.repaint;
 columna:=4;
 renglon:=9;
Responder Con Cita
  #6  
Antiguo 31-07-2007
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
Hola anubis,

Si vas a tener que pintar una cantidad arbitrarias de celdas quizás lo que puedas hacer es declarar un conjunto y hacer comparaciones al estilo:

Código Delphi [-]
if (aRow IN tuConjuntoFila) AND (aCol IN tuConjuntoColumna)
   then

Puede ser una alternativa...
El código no es "simple" como lo expuse... pero creo que la idea se entiende.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
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
Cambiar Color barra del titulo forma ASAPLTDA OOP 1 07-06-2006 10:15:49
Cambiar el color a una celda de un DBGrid NuncaMas Varios 1 14-02-2005 16:40:30
Cambiar Color una Celda del DbGrid Rabata Varios 5 02-09-2004 09:31:01
Cambiar el color de una celda de un DBGrid candido OOP 2 06-08-2004 10:22:28
color en celda StringGrid ermitano OOP 2 17-06-2004 22:17:53


La franja horaria es GMT +2. Ahora son las 20:01:39.


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