Friday, March 16, 2007

Zarovnání prvků v ListBoxu na pravou stranu

Další z dnešních tipů bude opět vizuálního charakteru. Při běžné práci s komponentou typu ListBox jsou prvky zarovnány k levému okraji. Co když ale potřebujete jiné zarovnání, například na pravou stranu? I toho lze mírnou úpravou dosáhnout. Nejprve musíte změnit styl ListBoxu na typ lbOwnerDrawFixed. Tím pádem se o vykreslování již nestará systém automaticky, ale musíme mu trošku pomoci, a sice událostí OnDrawItem. Zde je tedy kód:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
l: Integer;
t: String;
begin
with ListBox1 do
begin
Canvas.FillRect(Rect);
t := Items[Index];
l := Rect.Right - Canvas.TextWidth(t) - 1;
Canvas.TextOut(l, Rect.Top, t);
end;
end;

Labels: