![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Горизонтальная полоса прокрутки в ListBox [Delphi, Windows]
ElectriC © (2007-03-26 18:27:00)Как добавить горизонтальную полосу прокрутки (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;
(2008-05-24 16:13:00) [1]Удалено модератором
(2008-01-22 11:37:00) [2]Удалено модератором
Vladimir Kladov (2007-08-09 16:47:00) [3]Долго пробовали. У меня работает. Но опция тоже нужна.
TListOption = ( loNoHideScroll, loNoExtendSel, loMultiColumn, loMultiSelect,
loNoIntegralHeight, loNoSel, loSort, loTabstops,
loNoStrings, loNoData, loOwnerDrawFixed, loOwnerDrawVariable,
loHScroll );
{* Options for ListBox (see NewListbox).
To use loHScroll, you also have to send LB_SETHORIZONTALEXTENT with a
maximum width of a line in pixels (wParam)! }
TListOptions = Set of TListOption;
ElectriC (2007-08-09 16:37:00) [4]
> procedure TForm1.KOLForm1Show(Sender: PObj);begin ListBox1.
> Perform( LB_SETHORIZONTALEXTENT, 250, 0 );end;
Этот способ, всё равно, не работает!
(2007-08-08 23:01:00) [5]Удалено модератором
ElectriC (2007-07-17 20:47:00) [6]Спасибо.
Vladimir Kladov (2007-07-17 20:25:00) [7]
procedure TForm1.KOLForm1Show(Sender: PObj);
begin
ListBox1.Perform( LB_SETHORIZONTALEXTENT, 250, 0 );
end;
Читайте MSDN, там всё написано про list box (не люблю я его).
ElectriC (2007-07-17 19:42:00) [8]Гор. полоска включается, но работает неправильно, т.б. вообще не работает(((
homm (2007-07-12 12:03:00) [9]> А у меня на С# работает :P
Слышал, что C# истинно кросплатформенный. Не могу поверить что в нем можно вызвать SendMessage :)
MTsv DN (2007-07-12 12:02:00) [10]А лучше так:
ListBox1.Style := ListBox1.Style or WS_HSCROLL xor WS_VSCROLL;
MTsv DN (2007-07-12 12:01:00) [11]> А у меня на С# работает :P
Заблудился видимо 8)
> Дак, как, всё-таки, добавить горизонтальную прокрутку к ListBox'y?
ListBox1.Style := ListBox1.Style or WS_HSCROLL;
brink (2007-07-12 11:41:00) [12]А у меня на С# работает :P
ElectriC (2007-03-27 17:23:00) [13]Дак, как, всё-таки, добавить горизонтальную прокрутку к ListBox'y?
(SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, 500, 0)) - не работает)!!!
ElectriC (2007-03-26 22:49:00) [14]Если просто послать сообщение ListBox'у(SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, 500, 0)), то горизонтальная полоса прокрутки
не появляется. Можете объяснить, почему?
ElectriC (2007-03-26 20:24:00) [15]
> Вы же не привели вариант кода для 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;
Vladimir Kladov (2007-03-26 18:47:00) [16]Что не помогает? Вы же не привели вариант кода для KOL. Этот вариант точне не будет работать, он даже не откомпилируется, из-за Strings.
Так же, подозреваю, не будет работать Canvas.TextWidth вне пределов OnPaint - так он устроен. Создайте bitmap 1x1, его канве Font.Assign от шрифта вашего листбокса, и у него спрашивайте TextWidth.
А SendMessage и Handle - там все как было.