Centrar el texto en las celdas
Artículo por Club Developers · 31 diciembre 2005
3928 vistas
El código siguiente permite centrar el texto en las celdas de un TStringGrid. El centraje es a la vez horizontal y vertical. Para ello usaremos el API de Windows devido a que la función TextOut del Canvas del componente no permite hacer centrados de texto.
Una variante a este código nos permitirá escribir el texto en varias líneas:
delphi
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin with Sender as TStringGrid do with Canvas do begin { selección del color de fondo } if gdFixed in State then Brush.Color := clBtnFace else if gdSelected in State then Brush.Color := clNavy else Brush.Color := clWhite; { dibujado del fondo } FillRect(Rect); { selección del color de texto } if gdSelected in State then SetTextColor(Canvas.Handle, clWhite) else SetTextColor(Canvas.Handle, clBlack); { dibujado del texto usando el API } DrawText(Canvas.Handle, PChar(Cells[ACol,ARow]), -1, Rect , DT_CENTER or DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE ); end; end;
Una variante a este código nos permitirá escribir el texto en varias líneas:
delphi
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin with Sender as TStringGrid do with Canvas do begin { selección del color de fondo } if gdFixed in State then Brush.Color := clBtnFace else if gdSelected in State then Brush.Color := clNavy else Brush.Color := clWhite; { dibujado del fondo } FillRect(Rect); { selección del color de texto } if gdSelected in State then SetTextColor(Canvas.Handle, clWhite) else SetTextColor(Canvas.Handle, clBlack); { dibujado del texto usando el API } DrawText(Canvas.Handle, PChar(Cells[ACol,ARow]), -1, Rect , DT_CENTER or DT_NOPREFIX or DT_WORDBREAK ); end; end;