Конференция "KOL" » Горизонтальная полоса прокрутки в ListBox [Delphi, Windows]
 
  • ElectriC © (26.03.07 18:27) [0]
    Как добавить горизонтальную полосу прокрутки (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;
  • Vladimir Kladov (26.03.07 18:47) [1]
    Что не помогает? Вы же не привели вариант кода для KOL. Этот вариант точне не будет работать, он даже не откомпилируется, из-за Strings.

    Так же, подозреваю, не будет работать Canvas.TextWidth вне пределов OnPaint - так он устроен. Создайте bitmap 1x1, его канве Font.Assign от шрифта вашего листбокса, и у него спрашивайте TextWidth.

    А SendMessage и Handle - там все как было.
  • ElectriC © (26.03.07 20:24) [2]

    > Вы же не привели вариант кода для 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;
  • ElectriC © (26.03.07 22:49) [3]
    Если просто послать сообщение ListBox'у(SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, 500, 0)), то горизонтальная полоса прокрутки
    не появляется. Можете объяснить, почему?
  • ElectriC © (27.03.07 17:23) [4]
    Дак, как, всё-таки, добавить горизонтальную прокрутку к ListBox'y?
    (SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, 500, 0)) - не работает)!!!
  • brink (12.07.07 11:41) [5]
    А у меня на С# работает :P
  • MTsv DN © (12.07.07 12:01) [6]
    > А у меня на С# работает :P
    Заблудился видимо 8)

    > Дак, как, всё-таки, добавить горизонтальную прокрутку к ListBox'y?
    ListBox1.Style := ListBox1.Style or WS_HSCROLL;

  • MTsv DN © (12.07.07 12:02) [7]
    А лучше так:
    ListBox1.Style := ListBox1.Style or WS_HSCROLL xor WS_VSCROLL;

  • homm © (12.07.07 12:03) [8]
    > А у меня на С# работает :P

    Слышал, что C# истинно кросплатформенный. Не могу поверить что в нем можно вызвать SendMessage :)
  • ElectriC © (17.07.07 19:42) [9]
    Гор. полоска включается, но работает неправильно, т.б. вообще не работает(((
  • Vladimir Kladov (17.07.07 20:25) [10]
    procedure TForm1.KOLForm1Show(Sender: PObj);
    begin
     ListBox1.Perform( LB_SETHORIZONTALEXTENT, 250, 0 );
    end;



    Читайте MSDN, там всё написано про list box (не люблю я его).
  • ElectriC © (17.07.07 20:47) [11]
    Спасибо.
  • имя (08.08.07 23:01) [12]
    Удалено модератором
  • ElectriC © (09.08.07 16:37) [13]

    > procedure TForm1.KOLForm1Show(Sender: PObj);begin  ListBox1.
    > Perform( LB_SETHORIZONTALEXTENT, 250, 0 );end;

    Этот способ, всё равно, не работает!
  • Vladimir Kladov (09.08.07 16:47) [14]
    Долго пробовали. У меня работает. Но опция тоже нужна.

     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;

  • имя (22.01.08 11:37) [15]
    Удалено модератором
  • имя (24.05.08 16:13) [16]
    Удалено модератором
 
Конференция "KOL" » Горизонтальная полоса прокрутки в ListBox [Delphi, Windows]
Есть новые Нет новых   [134431   +11][b:0][p:0.002]