Archive | julio 2012

StringGrid con múltiples lineas en lazarus (Soporta Caracteres latinos)

Para lograr que una instancia del componente StringGrid en Lazarus hacemos uso del evento DrawCell.

Básicamente lo que haremos es “dibujar” un cuadro sobre la celda en la que estemos trabajando o presentando el texto y colocamos en el el texto correspondiente  a  la celda.

Para lograr esto utilizamos el API de Windows (Estudiar DrawText).

Para mayor información ingresar a los links en el pie de este Post. 

procedure TForm1.StringGrid3DrawCell(Sender: TObject; aCol, aRow: Integer;
aRect: TRect; aState: TGridDrawState);

var
s: string;
drawrect : TRect;
begin
StringGrid3.Canvas.FillRect(aRect);
s := StringGrid3.Cells[ ACol, ARow ];
if Length(s) > 0 then //is there any text needing to be formatted?
begin
   drawrect := arect;
   DrawText(StringGrid3.canvas.handle,
   pchar(utf8toansi(s)), Length(utf8toansi(s)), drawrect,
   dt_calcrect or dt_wordbreak or dt_left ); //how to format the text
   if (drawrect.bottom – drawrect.top) > StringGrid3.RowHeights[ARow] then //Does the row height need to be  adjusted?
        StringGrid3.RowHeights[ARow] := (drawrect.bottom – drawrect.top)
   else
   begin
     drawrect.Right := arect.right;
     StringGrid3.canvas.fillrect( drawrect );
     DrawText(StringGrid3.canvas.handle,
     pchar(utf8toansi(s)), Length(utf8toansi(s)), drawrect,
    dt_wordbreak or dt_left );
    end;
end;end;

Basado en información de:

El Rinconcito de Delphi

http://foro.el-hacker.com/f57/creacion-de-componentes-en-delphi-421/

http://www.esanu.name/delphi/Components/TStringGrid/Allows%20word%20wrap%20in%20TStringGrid.html

http://www.grupoalbor.com/ideas/3-delphi/1163.html

http://www.delphipages.com/forum/archive/index.php/t-158743.html

http://www.clubdelphi.com/foros/showthread.php?t=78936

http://www.clubdelphi.com/foros/showthread.php?t=32906

 

Anuncios