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 03-10-2013
paquechu paquechu is offline
Miembro
 
Registrado: oct 2008
Posts: 51
Poder: 16
paquechu Va por buen camino
No encuentro la forma (TStringGrid colores)

Buenas noches,
Este es un tema recurrente, pero no doy con la "tecla".
Vereis, necesito crear un stringgrid (a falta de otro control mejor) con 50 celdas en total (10 filas x 5 columnas) de forma que cuando haga clic en una celda esta cambie a un color (verde por ejemplo) y si hago clic de nuevo sobre la misma celda le vuelva a dejar el color original del stringgrid, de esta forma luego podre recorrer el stringgrid y preguntar por el color de cada celda y proceder de una forma u otra segun sea su color.
Pues no encuentro la forma, he buscado pro ahí varios códigos pero no funciona ninguno ni consigo adaptarlo a la funcionalidad que os he comentado.
Me podeis echar una mano?
Saludos.
Paco.
Responder Con Cita
  #2  
Antiguo 03-10-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola paquechu.

Si te arreglas con el evento OnDblClick te puedo sugerir este código:
Código Delphi [-]
...
implementation   

const
  MAXCOL = 4;
  MAXROW = 9;

var
  vPainted : array[0..MAXCOL, 0..MAXROW] of Boolean; // 5 x 10

procedure TForm1.FormCreate(Sender: TObject);
var
  c,f: Integer;
begin
  for c := 0 to MAXCOL do
    for f := 0 to MAXROW do
      vPainted[c,f] := False;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
const
  COLORS : array[Boolean] of TColor = (clWindow, clGreen);
begin
  with TStringGrid(Sender) do
  begin
    Canvas.Brush.Color := COLORS[vPainted[ACol,ARow]];
    Canvas.FillRect(Rect);
    DrawText(Canvas.Handle,PChar(Cells[ACol,ARow]),-1,Rect,DT_SINGLELINE);
  end;
end;

procedure TForm1.StringGrid1DblClick(Sender: TObject);
begin
  with TStringGrid(Sender) do
  begin
   vPainted[Col, Row] := not vPainted[Col, Row];
   Invalidate;
  end;
end;

end.
Lamentablemente en el componente TStringGrid el evento OnClick se dispara también ante otras acciones que el click del mouse ...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 03-10-2013
paquechu paquechu is offline
Miembro
 
Registrado: oct 2008
Posts: 51
Poder: 16
paquechu Va por buen camino
Hola ecfisa,
Pues la verdad es que me da igual que sea con un evento doble clic.
Lo he probado y funciona a la perfección.
Muchas gracias por tu ayuda y rapidez. Eres muy amable :-).
Saludos
Paco.
Responder Con Cita
  #4  
Antiguo 03-10-2013
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Con su permiso estimado Ecfisa...

Otra opción...

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  c,f: Integer;
begin
     for c := 0 to StringGrid1.ColCount-1 do
         for f := 0 to StringGrid1.RowCount-1 do
            StringGrid1.Objects[c,f] := Pointer(False);
end;

procedure TForm1.StringGrid1DblClick(Sender: TObject);
begin
     with TStringGrid(Sender) do
     begin
          StringGrid1.Objects[Col, Row] := Pointer(not Boolean(StringGrid1.Objects[Col, Row]));
          Invalidate;
     end;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
const
  COLORS : array[Boolean] of TColor = (clWindow, clGreen);
begin
     with TStringGrid(Sender) do
     begin
       Canvas.Brush.Color := COLORS[Boolean(StringGrid1.Objects[ACol, ARow])];
       Canvas.FillRect(Rect);
       DrawText(Canvas.Handle,PChar(Cells[ACol,ARow]),-1,Rect,DT_SINGLELINE);
     end;
end;

Saludos

Última edición por cloayza fecha: 03-10-2013 a las 22:04:26.
Responder Con Cita
  #5  
Antiguo 03-10-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por cloayza Ver Mensaje
Con su permiso estimado Ecfisa...
Pero por supuesto que lo tenes! Y está muy bien encapsular la condición de las celdas en el mismo StringGrid evitando el uso del arreglo

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 04-10-2013
paquechu paquechu is offline
Miembro
 
Registrado: oct 2008
Posts: 51
Poder: 16
paquechu Va por buen camino
Buenos días,
Muchas gracias por este otro enfoque cloayza :-)
Lo exploraré también.
Saludos.
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
No encuentro la forma de restar fechas pablopessoa Varios 5 03-03-2009 23:47:27
Pasar Variables de Forma a Forma con delphi.net ASP ASAPLTDA .NET 5 05-07-2007 20:51:31
Como Pasar Variables de Forma a Forma con delphi.net ASP ASAPLTDA Internet 2 02-07-2007 16:26:41
Como pasar parametros de una forma hija a otra forma hija luisreg OOP 3 17-09-2003 18:18:50
Celdas de colores diferentes en un TStringGrid phyera Gráficos 2 14-09-2003 19:06:26


La franja horaria es GMT +2. Ahora son las 21:15:35.


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