Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Горизонтальная полоса прокрутки в 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 - там все как было.


Наверх

Титульная страница Поиск, карта сайта Написать письмо