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 11-10-2011
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
Question ¿stringid como colorear celda o poner imagen?

hola.

una duda. como puede cololear una celda de un stringgrid

ejemplo

tengo un stringgrid con 10 columnas y 10 filas.

100 items


y el item 5 columna y 5 fila ya no tiene stock.
y lo quiero poner en rojo.

otro item en otra fila y columna ya le queda poco en estoc
ponerlo en amarillo.

los demas que si tienen estock.
ponerlos en verde

bueno la idea es esa. ponerles una marca ya sea coloreando la fila o poniendoles una imagen.

ando en eso.

graicas.
Responder Con Cita
  #2  
Antiguo 11-10-2011
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 JXJ.

Podrías hacer:
Código Delphi [-]
...
const
   COLSTOCK = 5;  // Columna Stock
...
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  R: TRect;
  v: Double;
begin
  with TStringGrid(Sender) do
  begin
    if TryStrToFloat(Cells[ACol,ARow], v) then  // prevenir posible error de conversión
      if (ACol = COLSTOCK) and (ARow >= FixedRows) then
      begin
        if (v = 0) then    // v = 0 : Sin stock
        begin
          Canvas.Brush.Color:= clRed;
          Canvas.Font.Color:= clWhite;
        end
        else      // hay stock
        begin
          Canvas.Brush.Color:= clLime;
          Canvas.Font.Color:= clBlack;
        end;
        Canvas.FillRect(Rect);
        Canvas.TextOut(Rect.Left+1, Rect.Top+1, Cells[ACol,ARow]);
      end;
  end;
end;

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 11-10-2011 a las 20:41:14. Razón: Agregar comentarios
Responder Con Cita
  #3  
Antiguo 12-10-2011
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
funcion miy bien. ahora estoy tratando de que sea mas versatil

teniendo un gris cargado en forma de cuadricula.
si las coordenadas varian. cargadas en un listado. hacer que cambien los colores de fondo.

ando algo enredado si no me doy a entender

puse esto asi.

Código Delphi [-]
procedure TfrmArticulos.StringGrid1DrawCell(Sender: TObject; ACol,
  ARow: Integer;
  Rect: TRect;
  State: TGridDrawState);
  var
  R: TRect;
  v: Double;
begin
  with TStringGrid(Sender) do
  begin
    if TryStrToFloat(Cells[ACol,ARow], v) then  // prevenir posible error de conversión
      if (ACol = 3) and (ARow = 3) then
      begin
        if (v = 0) then    // v = 0 : Sin stock
        begin
          Canvas.Brush.Color:= clRed;
          Canvas.Font.Color:= clWhite;
        end
        else      // hay stock
        begin
          Canvas.Brush.Color:= clLime;
          Canvas.Font.Color:= clBlack;
        end;
        Canvas.FillRect(Rect);
        Canvas.TextOut(Rect.Left+1, Rect.Top+1, Cells[ACol,ARow]);
      end;

    if TryStrToFloat(Cells[ACol,ARow], v) then  // prevenir posible error de conversión
      if (ACol = 2) and (ARow = 2) then
      begin
        if (v = 0) then    // v = 0 : Sin stock
        begin
          Canvas.Brush.Color:= clRed;
          Canvas.Font.Color:= clWhite;
        end
        else      // hay stock
        begin
          Canvas.Brush.Color:= clLime;
          Canvas.Font.Color:= clBlack;
        end;
        Canvas.FillRect(Rect);
        Canvas.TextOut(Rect.Left+1, Rect.Top+1, Cells[ACol,ARow]);
      end;

    if TryStrToFloat(Cells[ACol,ARow], v) then  // prevenir posible error de conversión
      if (ACol = 5) and (ARow = 5) then
      begin
        if (v = 0) then    // v = 0 : Sin stock
        begin
          Canvas.Brush.Color:= clRed;
          Canvas.Font.Color:= clWhite;
        end
        else      // hay stock
        begin
          Canvas.Brush.Color:= clLime;
          Canvas.Font.Color:= clBlack;
        end;
        Canvas.FillRect(Rect);
        Canvas.TextOut(Rect.Left+1, Rect.Top+1, Cells[ACol,ARow]);
      end;
  end;
end;


lo primero que me interesa es que localize la celda por sus coordenadas.
fila y columna.

las coordenadas las quiero cargar desde un record. o
de un stringlist. o un archivo. csv .

aca la imagen de como se ve


Última edición por JXJ fecha: 12-10-2011 a las 22:35:05.
Responder Con Cita
  #4  
Antiguo 12-10-2011
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 JXJ.

Si no te entiendo mál, una manera puede ser almacenar en dos cadenas (asignables de donde gustes) los valores de columnas y filas para hacer la posterior evaluación en el evento OnDrawCell.

Algo como por ejemplo:
Código Delphi [-]
... 
{ A fines del ejemplo les asigno valor debajo,
    vos podrías tomar los valores desde un archivo, etc }
var 
  ColStr: string = '2,3,5';     // Columnas sobre las que se evalua
  RowStr: string = '1,2,3,4,5'; // Filas sobre las que se evalua

...
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  R: TRect;
  v: Double;
begin
  with TStringGrid(Sender) do
  begin
    if (Pos(IntToStr(ACol), ColStr) > 0) and (Pos(IntToStr(ARow), RowStr) > 0) 
       and TryStrToFloat(Cells[ACol,ARow], v) then
    begin
      if (v = 0) then    // v = 0 : Sin stock
      begin
        Canvas.Brush.Color:= clRed;
        Canvas.Font.Color:= clWhite;
      end
      else      // hay stock
      begin
        Canvas.Brush.Color:= clLime;
        Canvas.Font.Color:= clBlack;
      end;
      Canvas.FillRect(Rect);
      Canvas.TextOut(Rect.Left+1, Rect.Top+1, Cells[ACol,ARow]);
    end;
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 12-10-2011 a las 23:11:22.
Responder Con Cita
  #5  
Antiguo 14-10-2011
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
Thumbs up

si eficsa asi es.

ta muy interesante jugar con el stringgrid.

es bastante potente y flexible.

gracias por tu ayuda.
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
¿Cómo colorear cada celda de un TStringGrid? Almd Internet 0 19-11-2008 12:38:47
Colorear celda de un stringgrid nikotina Varios 5 01-03-2007 12:31:56
como poner un jChekbox en una celda de un jTable rls Varios 1 10-12-2006 17:33:21
cxGrid devexpress. Colorear una celda sakuragi OOP 6 10-02-2006 20:15:50
Colorear celda seleccionada en StringGrid Delphos Varios 6 18-08-2004 14:23:23


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


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