Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   StringGrid, colores y alineación (https://www.clubdelphi.com/foros/showthread.php?t=21319)

Alexander 13-05-2005 05:33:29

StringGrid, colores y alineación
 
Foro una preguntica.

Tengo un StringGrid con dos columnas, el la primera quero colocar de color azul con negrilla y la segunda los valores alineados a la derecha, puedo hacer esto?.

Gracias.

Alexander

Neftali [Germán.Estévez] 13-05-2005 09:33:16

Utiliza el evento OnDrawCell (para ambas cosas). Busca en los foros "StringGrid Color" (sin las comillas), verás como es un tema que ya se ha tratado.

El tema de la alineación es similar (OnDrawCell); Aquí tienes un ejemplo:

Código Delphi [-]
 procedure TFormStringGrid.StringGrid1DrawCell(Sender: TObject; ACol,
                     ARow: Integer; Rect: TRect; State: TGridDrawState);
 
   //···············································································
   procedure WriteText(StringGrid: TStringGrid; ACanvas: TCanvas; const ARect: TRect;
     const Text: string; Format: Word);
   const
     DX = 2;
     DY = 2;
   var
     S: array[0..255] of Char;
     B, R: TRect;
   begin
     with Stringgrid, ACanvas, ARect do
     begin
       case Format of
         DT_LEFT: ExtTextOut(Handle, Left + DX, Top + DY,
             ETO_OPAQUE or ETO_CLIPPED, @ARect, StrPCopy(S, Text), Length(Text), nil);
 
         DT_RIGHT: ExtTextOut(Handle, Right - TextWidth(Text) - 3, Top + DY,
             ETO_OPAQUE or ETO_CLIPPED, @ARect, StrPCopy(S, Text),
             Length(Text), nil);
 
         DT_CENTER: ExtTextOut(Handle, Left + (Right - Left - TextWidth(Text)) div 2,
             Top + DY, ETO_OPAQUE or ETO_CLIPPED, @ARect,
             StrPCopy(S, Text), Length(Text), nil);
       end;
     end;
   end;
   //···············································································
   procedure Display(StringGrid: TStringGrid; const S: string; Alignment: TAlignment);
   const
     Formats: array[TAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER);
   begin
     WriteText(StringGrid, StringGrid.Canvas, Rect, S, Formats[Alignment]);
   end;
   //···············································································
 begin
 
   // La columna 0 a la derecha
   if ACol = 0 then begin
     Display(StringGrid1, StringGrid1.Cells[ACol, ARow], taRightJustify);
   end;
 
   // La columna 1 a la centrada
   if ACol = 1 then begin
     Display(StringGrid1, StringGrid1.Cells[ACol, ARow], taCenter);
   end;
 
   // La primera fila (de titulos centrada)
   if ARow = 0 then begin
     Display(StringGrid1, StringGrid1.Cells[ACol, ARow], taCenter);
   end;
 
 end;

Crandel 13-05-2005 09:35:34

Hola Alexander, si se puede hacer las dos cosas, pero no es tan simple.

El tema es que el StringGrid no tiene una propiedad directa para hacerlo. Asi que podes programarlo o buscar un compoenete que hay por ahi que ya alguien le agrego esas propiedades.

Si queres programarlo aca te doy un ejemplo (puede haber error en el código porque lo estoy acomodando de un programa que hice en CBuilder)

Código Delphi [-]
procedure TForm1.GrillaDrawCell(Sender: TObject, ACol: integer,
      ARow: integer, Rect: TRect, State: TGridDrawState)
begin
  Grilla.Canvas.Brush.Style := bsSolid;

  case ACol of
    1: Grilla.Canvas.Brush.Color := clBlue;
    2: Grilla.Canvas.Brush.Color := clRed;
  end;
  Grilla.Canvas.FillRect(Rect);
end;

en este ejemplo se pintan las columans de acuerdo al numero que sean.

Para que se ejecute este método GrillaDrawCell tenes que escribir algo sobre cada celda.

Para la alineación no me acuerdo acuedo y no lo tengo a mano, pero con esto podes empesar.

Suerte

Crandel 13-05-2005 09:37:22

Justo Neftali, te escribio sobre la alineación mientras yo escribia sobre el color :D

Suerte

Alexander 19-05-2005 19:21:00

Ya funcionó
 
Caballeros muchas gracias.

Ya lo domino.

Alexander.

sakuragi 17-11-2005 01:15:11

hola que tal

siguiendo con este tema otra duda.

en el evento "OnDrawCell" puedo validar que al dar enter se pinte una fila completa?

la que sigue de donde estoy posisionado, osea para abajo?


saludos

gracias


La franja horaria es GMT +2. Ahora son las 14:13: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