Cita:
Empezado por jachguate
Eso depende de cómo estes llenando el listbox. Si este está lleno en tiempo de diseño, o se llena antes de mostrar la forma, el evento OnShow es el adecuado.
|
Bueno, pues parece ser que no
hay que ponerlo en el evento OnDrawItem del TListBox (o sea al "repintarlo") y sumarle 15 del borde
Gracias a todos, teneis pagado un carajillo en el bar de la esquina
Son la 04:00 (locales) en Albacete y parece que la cosa funciona
Os pongo el código por ai a algún otro le vale
Código:
{$R *.xfm}
var
WIN_ANCHO : integer; // global al form, inicializar a CERO en el OnCreate
procedure TForm1.ListBox_OnDrawItem(Sender: TObject;
Index: Integer; Rect: TRect; State: TOwnerDrawState;
var Handled: Boolean);
var
newArea : TRect; // para que pinte el área completa
oldStyle : TFontStyles; // el estilo de la fuente del TListBox
begin
newArea.Left := 0;
newArea.Top := 0;
newArea.Right := Rect.Right + 1;
newArea.Bottom := Rect.Bottom + 1;
with (Sender as TListBox).Canvas do begin
oldStyle := Font.Style;
Font.Style := [fsBold];
if( TextWidth((Sender as TListBox).Items[Index])>WIN_ANCHO ) then begin
WIN_ANCHO := TextWidth((Sender as TListBox).Items[Index]);
Win_GetNubes.ClientWidth := WIN_ANCHO + 15;
end;
Font.Style := oldStyle;
if( (odSelected in State) or (odFocused in State) )
then Font.Style := [fsBold] // seleccionado o con el fofo, a negrita
else Font.Style := []; // texto normal
FillRect( newArea );
TextOut( Rect.Left, Rect.Top, (Sender as TListBox).Items[Index] );
end;
end;
Alguien puede indicarme un manual sobre el orden de los eventos en los controles?
Lo dicho, agradecido por el tiempo perdido