-
Как добавить горизонтальную полосу прокрутки (scrollbar) в ListBox? В VCL я делал бы так:
var i, MaxWidth: integer; begin MaxWidth := 0; for i := 0 to ListBox1.Items.Count - 1 do if MaxWidth < ListBox1.Canvas.TextWidth(ListBox1.Items.Strings[i]) then MaxWidth := ListBox1.Canvas.TextWidth(ListBox1.Items.Strings[i]); SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, MaxWidth+2, 0);
А в KOL не помогает. P.S. В KOL импользовал код:
procedure TMyProject.ListBox1Show(Sender: PObj); var i, MaxWidth : Integer; begin MaxWidth := 0; for i := 0 to ListBox1.Count - 1 do if MaxWidth < ListBox1.Canvas.TextWidth(ListBox1.Items[i]) then MaxWidth := ListBox1.Canvas.TextWidth(ListBox1.Items[i]); SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, MaxWidth + 5, 0); end;
-
Что не помогает? Вы же не привели вариант кода для KOL. Этот вариант точне не будет работать, он даже не откомпилируется, из-за Strings.
Так же, подозреваю, не будет работать Canvas.TextWidth вне пределов OnPaint - так он устроен. Создайте bitmap 1x1, его канве Font.Assign от шрифта вашего листбокса, и у него спрашивайте TextWidth.
А SendMessage и Handle - там все как было.
-
> Вы же не привели вариант кода для KOL.
В KOL вот этот код -
> procedure TMyProject.ListBox1Show(Sender: PObj);var i, MaxWidth > : Integer;begin MaxWidth := 0; for i := 0 to ListBox1. > Count - 1 do if MaxWidth < ListBox1.Canvas.TextWidth(ListBox1. > Items[i]) then MaxWidth := ListBox1.Canvas.TextWidth(ListBox1. > Items[i]); SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, > MaxWidth + 5, 0);end;
-
Если просто послать сообщение ListBox'у(SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, 500, 0)), то горизонтальная полоса прокрутки не появляется. Можете объяснить, почему?
-
Дак, как, всё-таки, добавить горизонтальную прокрутку к ListBox'y? (SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, 500, 0)) - не работает)!!!
-
А у меня на С# работает :P
-
> А у меня на С# работает :PЗаблудился видимо 8) > Дак, как, всё-таки, добавить горизонтальную прокрутку к ListBox'y? ListBox1.Style := ListBox1.Style or WS_HSCROLL;
-
А лучше так: ListBox1.Style := ListBox1.Style or WS_HSCROLL xor WS_VSCROLL;
-
> А у меня на С# работает :P
Слышал, что C# истинно кросплатформенный. Не могу поверить что в нем можно вызвать SendMessage :)
-
Гор. полоска включается, но работает неправильно, т.б. вообще не работает(((
-
procedure TForm1.KOLForm1Show(Sender: PObj);
begin
ListBox1.Perform( LB_SETHORIZONTALEXTENT, 250, 0 );
end;
Читайте MSDN, там всё написано про list box (не люблю я его).
-
Спасибо.
-
Удалено модератором
-
> procedure TForm1.KOLForm1Show(Sender: PObj);begin ListBox1. > Perform( LB_SETHORIZONTALEXTENT, 250, 0 );end;
Этот способ, всё равно, не работает!
-
Долго пробовали. У меня работает. Но опция тоже нужна. TListOption = ( loNoHideScroll, loNoExtendSel, loMultiColumn, loMultiSelect,
loNoIntegralHeight, loNoSel, loSort, loTabstops,
loNoStrings, loNoData, loOwnerDrawFixed, loOwnerDrawVariable,
loHScroll );
TListOptions = Set of TListOption;
-
Удалено модератором
-
Удалено модератором
|