Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ayuda Con Listbox (https://www.clubdelphi.com/foros/showthread.php?t=60847)

sanzCrito 15-10-2008 23:02:35

Ayuda Con Listbox
 
buenos/as dias/noches!
mi problema es que tengo un listbox y necesito poner cadenas muy largas y cuando exceden el tamaño deol listbox no puedo visualizar el final d la cadena,pense que el tamaño se iva ajustar automaticamente pero no.
como hago?ahi alguna propiedad para esto o tengo que usar otro elemento?:confused:

egostar 15-10-2008 23:23:27

Cita:

Empezado por sanzCrito (Mensaje 320379)
buenos/as dias/noches!
mi problema es que tengo un listbox y necesito poner cadenas muy largas y cuando exceden el tamaño deol listbox no puedo visualizar el final d la cadena,pense que el tamaño se iva ajustar automaticamente pero no.
como hago?ahi alguna propiedad para esto o tengo que usar otro elemento?:confused:

Hola sanzCrito

Bienvenido al foro.

Debe existir una solución mejor y mas óptima que esta:

Código Delphi [-]
procedure TForm1.FormShow(Sender: TObject);
var
  ancho,i:integer;
begin
  ancho := 0;
  for i := 0 to ListBox1.Items.Count-1 do begin
     if ancho < Canvas.TextWidth(ListBox1.Items.Strings[i]) then
        ancho := Canvas.TextWidth(ListBox1.Items.Strings[i]);
  end;
  ListBox1.Width := Ancho+10;
end;

Seguro alguien posteara algo mejor :)

Salud OS

PD, te invito a leer nuestra guia de estilo.

Caro 16-10-2008 00:25:33

Hola sanzCrito, mi solución no es una mejor que del amigo egopolice. Puedes utilizar la función DrawText que te permite dar formato a tu texto, para que te muestre en varias líneas tendrías que utilizar el formato DT_WORDBREAK, según la ayuda una vez que llega al tamaño de tu TRect te lo corta y el resto te pone en otra línea.

Código Delphi [-]
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
 aItem : String;
begin
 aItem := ListBox1.Items[Index];
 DrawText(ListBox1.Canvas.Handle,PChar(aItem), StrLen(PChar(aItem)),Rect,DT_WORDBREAK);
end;

Debes cambiar la propiedad Style a lbOwnerDrawFixed, sino no se activa el evento OnDrawItem de tu ListBox. También debes aumentar el alto de los items, porque sino no se ve lo que esta en la siguiente línea, para esto la propiedad ItemHeight.

Lo ideal sería si el texto ocupa una sola línea el alto sea solo para esa línea y si ocupa mas el alto sea mas, pero nose como hacer eso.

Saluditos

sanzCrito 16-10-2008 00:26:03

gracia por la rapida respuesta:)


La franja horaria es GMT +2. Ahora son las 12:02:55.

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