Un lugar de encuentro para los programadores de habla hispana

Un lugar de encuentro para los programadores de habla hispana

Buscar

Entrar

Puedes acceder utilizando tu cuenta de usuario del foro.

Si no dispone de cuenta, puede crear una accediendo al formulario de registro del foro.



Grid con celdas de varias líneas Imprimir
Ideas - Delphi

Pon un TStringGrid (StringGrid1) en tu form. Pon este código en el evento OnDrawCell del StringGrid:

 
procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Integer;
   Rect: TRect; State: TGridDrawState);
var
  Texto    :string;
  Indice   : integer;
  Posicion : integer;
begin
  if Pos(#13,StringGrid1.Cells[Col,Row])<>0 then
  begin
    Texto:=StringGrid1.Cells[Col,Row]+#13;
    StringGrid1.Canvas.FillRect(Rect);
    Indice:=0;
    repeat
        Posicion:=Pos(#13,Texto);
      with StringGrid1.Canvas do
           TextOut(Rect.left, Rect.Top+(Indice*TextHeight(Copy(Texto,1,Posicion-1))),
                Copy(Texto,1,Posicion-1));
      Inc(Indice);
      Delete(Texto,1,Posicion);
    until Posicion=0;
  end;
end;
 
 
 

Y para añadir una celda con varias lineas, separa cada linea por #13, por ejemplo:

 
StringGrid1.Cells[2,2]:='Una linea'#13'dos lineas'#13'tres lineas';
 
 

Segundo método

Este segundo ejemplo usa la función del API DrawText, que es mucho más potente:

 
procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Integer;
   Rect: TRect; State: TGridDrawState);
var
  Grid    : TStringGrid;
  Texto   : String;
begin
  Grid := TStringGrid(Sender);
  if (Row < Grid.FixedRows) or (Col < Grid.FixedCols) then
      Grid.Canvas.Brush.Color := clBtnFace
  else
      Grid.Canvas.Brush.Color := clWhite;
  Grid.Canvas.FillRect(Rect);
  Texto := Grid.Cells[Col,Row];
  DrawText(Grid.Canvas.Handle,
           PChar(Texto),
           StrLen(PChar(Texto)),
           Rect,
           DT_WORDBREAK);
end;
 
 
 
 

Puedes poner esto en el OnCreate de tu form, para ver lo que ocurre:

 
procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.Cells[2,1] := 'Ejemplo de celdas multilineas';
  StringGrid1.Options:= StringGrid1.Options+[goRowSizing,goColSizing];
end;
 
 
 
Comentarios (0)
Para escribir un comentario debes estar registrado