Hola de nuevo, perdon no había visto sus respuestas, muchas gracias por responder Mayanes y Lepe, si funciona, el error que estaba cometiendo era que mis items del ListBox estan cargados desde diseño y de esa forma no se asignan bien los tamaños, si se carga en ejecución los items funciona perfecto. Aplicando al ejemplito de mi primer mensaje y haciendo algunas modificaciones según lo que he visto en sus codigos quedaría así:
Código Delphi
[-]
procedure TForm1.ListBox1MeasureItem(Control: TWinControl; Index: Integer;
var Height: Integer);
begin
if ListBox1.items.Count>0 then
begin
if (Index=1) or (Index=4) then
ListBox1.Canvas.Font.Size := 10
else
ListBox1.Canvas.Font.Size := 20;
Height := ListBox1.Canvas.TextHeight(ListBox1.items[index]);
end;
end;
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
if ListBox1.items.Count>0 then
begin
if (Index=1) or (Index=4) then
begin
ListBox1.Canvas.Font.Name := 'verdana';
ListBox1.Canvas.Font.Size := 10;
end
else
begin
ListBox1.Canvas.Font.Name := 'vivian';
ListBox1.Canvas.Font.Size := 20;
end;
ListBox1.Canvas.FillRect(Rect);
ListBox1.Canvas.TextOut(Rect.Left, Rect.Top, ListBox1.Items[index]);
end;
end;
Como dije, si se cargan los items en ejecución funciona bien, pero si ya estan cargados los items en dideño, no funciona se sigue cortando el texto, aunque se ejecute dichos eventos. Ahora si hago esto
Código Delphi
[-]
ListBox1.Perform(WM_Paint, ListBox1.Canvas.Handle, 0);
Si se ve correctamente, pero cuando se selecciona un item sigue con el tamaño del principio y se sobrepone todo.
Pueden hacer la prueba por favor y como sería para solucionar que se de la altura correcta aunque ya este en diseño.
Saluditos