procedure TForm1.FormCreate(Sender: TObject);
begin// Oder im Objektinspektor einstellen // Or set in object inspector
ListBox1.Style := lbOwnerDrawFixed;
end;
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
l: Integer;
t: String;
beginwith ListBox1 dobegin
Canvas.FillRect(Rect);
t := Items[Index];
l := Rect.Right - Canvas.TextWidth(t) - 1;
Canvas.TextOut(l, Rect.Top, t);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Add(Edit1.Text);
end;
Для выравнивания текста в TListBox вправо можно модифицировать процедуру ListBox1DrawItem следующим образом:
procedureTForm1.ListBox1DrawItem(Control:TWinControl;Index:Integer;Rect:TRect;State:TOwnerDrawState);varl:Integer;t:String;beginwithListBox1dobeginCanvas.FillRect(Rect);t:=Items[Index];l:=Rect.Right-Canvas.TextWidth(t)-2;// Поменяли расчет для выравнивания вправоCanvas.TextOut(l,Rect.Top,t);end;end;
В этом коде я изменил l := Rect.Right - Canvas.TextWidth(t) - 1 на l := Rect.Right - Canvas.TextWidth(t) - 2. Это изменение обеспечивает выравнивание текста вправо, отняв дополнительный пиксель от расчетной координаты x.
Кроме того, можно также установить выравнивание элементов списка в объектном инспекторе. Правый клик на списке, выберите "Свойства", а затем нажмите на свойство "Элементы". В раскрывающемся меню выберите "Вправо" как опцию выравнивания. Это автоматически выровняет все элементы вправо без необходимости модифицировать код.
Также стоит отметить, что после изменения положения текста в процедуре draw item нужно вызвать метод Control.DrawItem:
procedureTForm1.Button1Click(Sender:TObject);beginListBox1.Items.Add(Edit1.Text);ListBox1.Invalidate;// Вызов Control.DrawItem после добавления элементовend;
Это обеспечивает обновление и перерисовку списка с новым добавленным элементом.
В статье описывается способ выравнивания текста в TListBox вправо с помощью OwnerDrawFixed и процедуры DrawItem.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS