Lazarus: Ancho de la lista desplegable de un ComboBox

En esta ocación observaremos como ampliar el tamaño de la lista de los elementos de un combobox o cuadro desplegable en Lazarus o Delphi, pues es molesto para el usuario desplegar el cuadro y no poder leer el texto que sobre pase el tamaño que le definimos en tiempo de diseño al control.

Es muy sencillo hacer esto con la API de Windows, es decir en otros sistemas operativos no funcionará lamentablemente.

Ahora si, manos a la obra: 

– En el método  OnDropDown del combobox agregar el siguiente código:

var
WidthC, x, aux: integer;
begin
WidthC:= 0;
aux := 0;
for x := 0 to ComboBox1.Items.Count – 1 do
begin
aux := Combobox1.Canvas.TextWidth(Combobox1.Items.Strings[x]) + 6;
if aux > WidthC then
WidthC := aux;
end;
SendMessage( ComboBox1.Handle, CB_SETDROPPEDWIDTH, WidthC, 0);

El resultado:

Esto es todo, espero sea de utilidad.

Fuente:

http://www.developpez.net/forums/d962615/c-cpp/outils-c-cpp/cppbuilder/modification-position-liste-deroulante-combobox/

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

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