Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > WordWrap в TListBox


Автор: Budy 8.5.2005, 15:29
:Приветствую
Помогите, как мона сделать WordWrap в TListBox, или может есть другие способные на это компоненты?
ЗЫ.Просто необходимо в Items'ах размещать длинный текст, а иногда он вылазит за грань

Автор: Alix 9.5.2005, 08:25
Я делал это с помощью ручной прорисовки с разной высотой элементов (lbOwnerDrawVariable). А для того, чтобы рисовать с переносом нужна лишь одна ф-я DrawText (или DrawTextEx) - см. хелп. Особенно приглядись к константам-формату. Посмотреть, как это выглядит можно, например, тут: http://forum.vingrad.ru/index.php?showtopic=51243 или тут http://forum.vingrad.ru/index.php?showtopic=51069 (на проблемы не обращайте внимания... все они преодолимы)

Автор: Poseidon 9.5.2005, 14:44
А горизонтальная линейка прокрутки не подойдет? Вот пример из DRKB:
Код
var  
  i, MaxWidth: integer;  
begin  
  MaxWidth := 0;  
  for i := 0 to LB1.Items.Count - 1 do  
  if MaxWidth < LB1.Canvas.TextWidth(LB1.Items.Strings[i]) then  
    MaxWidth := LB1.Canvas.TextWidth(LB1.Items.Strings[i]);  
  SendMessage(LB1.Handle, LB_SETHORIZONTALEXTENT, MaxWidth+2, 0);  
end;

Приведённый код определяет ширину в пикселях самой длинной строки списка. Затем он использует сообщение LB_SETHORIZONTALEXTENT, чтобы установить ширину горизонтального скролбара в пикселях. Два дополнительных пикселя добавленные к MaxWidth служат для стрелки в правом углу list box-а.

Автор: In0stRAnez 1.12.2010, 19:11
Ребят, почитал всё по этой теме на форуме...
порыл гугл глубиной в 100 метров

помогите по теме

есть какой нибудь показательный исходник или код рабочий, с разяснениями

буду очень благодарен!

Автор: Keeper89 1.12.2010, 23:55
In0stRAnez
почитайте про DrawText, как указал Alix

Автор: Poseidon 2.12.2010, 12:20
In0stRAnez, ты обалдел? Тему пятилетней давности поднял...

Автор: In0stRAnez 2.12.2010, 22:38
Код

procedure TForm1.Button1Click(Sender: TObject);
var s:string;
arect : Trect;
begin
arect := Rect(123,1,2,123)   ;
 s := 'Hello world! Hello world! Hello world! Hello world!';
 DrawText(ListBox1.Canvas.Handle,PChar(s),length(s),aRect,DT_WORDBREAK);
end;


ребят подскажите что далать??? не пашет и всё...

Автор: In0stRAnez 3.12.2010, 12:23
Всем спасибо, разобрался в 5 летней теме))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)