Справочник советов и примеров по C++Builder

       

ListBox


  • Над каким элементом находится курсор мыши

    // поместите на форму Form1 компонент ListBox1 и напишите

    // следующий обработчик события OnMouseMove:
    void __fastcall TForm1::ListBox1MouseMove(TObject *Sender,

    TShiftState Shift, int X, int Y)

    {

    if(ListBox1->ItemAtPos(TPoint(X, Y), true) != -1)

    Form1->Caption = ListBox1->Items->Strings[ListBox1->ItemAtPos(TPoint(X, Y), true)];



    }

  • Навигация в ListBox при множественном выборе

    // разместите на форме ListBox1, установите у него

    // свойство MultiSelect в true, добавьте в ListBox1

    // несколько элементов, разместите также на форме

    // кнопку Button1, в обработчике события OnClick

    // которой напишите следующий код, который будет

    // выводить сообщение для каждого элемента ListBox,

    // выбранного пользователем:

    void __fastcall TForm1::Button1Click(TObject *Sender)

    {

    for(int i = 0; i < ListBox1->Items->Count; i++)

    if(ListBox1->Selected[i])

    ShowMessage(ListBox1->Items->Strings[i]);

    }

  • Как сделать так, чтобы при наведении на элемент, длина которого больше длины самого ListBox, появлялся Hint

    // Где нибудь на показывании формы :
    Application->HintPause = 0;

    Application->HintShortPause = 0;

    Application->HintHidePause = 10000000000;

    Application->OnShowHint = TIn4Form->DoShowHint;

    void __fastcall TIn4Form::DoShowHint(System::AnsiString &HintStr, bool &CanShow, THintInfo &HintInfo) { CanShow = true; if (HintInfo.HintControl == ListBox1 ) { if( Mouse->Capture ) { CanShow = false; return; } HintInfo.ReshowTimeout = 100; /*HintInfo.HintColor = clAqua;// Changes only for this hint*/

    TPoint pnt; SIZE strsize; int numstr = ListBox1->ItemAtPos(HintInfo.CursorPos,true); if(numstrfalse; Application->HideHint (); return; } HintStr = ListBox1->Items->Strings[numstr]; strsize = ListBox1->Canvas->TextExtent(HintStr); if(strsize.cxClientWidth) { CanShow = false; Application->HideHint (); return; } pnt.x = -1; pnt.y = int(HintInfo.CursorPos.y/ListBox3->ItemHeight)*ListBox1->ItemHeight - 3; pnt = ListBox3->ClientToScreen(pnt); HintInfo.HintPos.x = pnt.x; HintInfo.HintPos.y = pnt.y; HintInfo.HintMaxWidth = Screen->Width-pnt.x; /*HintInfo.HideTimeout = 100;*/

    } }

    // Не забудьте поставить ShowHint у интересующего ListBox-а

  • Как узнать количество строк(записей)

    int i = ListBox1->Items->Count;

  • Прокрутка ListBox на одну строку вниз

    // Чтобы прокрутить содержимое списка (TListBox) на одну

    // строку вниз, напишите следующий код:

    SendMessage(ListBox1->Handle, WM_VSCROLL, SB_LINEDOWN, 0);

  • Удаление выбранных элементов в TListBox

    // Напишите следующий код:

    for(int i = ListBox1->Items->Count-1; i >= 0; i--)

    if(ListBox1->Selected[i])

    ListBox1->Items->Delete(i);



    Содержание раздела