Работа с ListBox

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

    // поместите на форму 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)];
    }

  2. Навигация в 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]);
    }

  3. Как сделать так, чтобы при наведении на элемент, длина которого больше длины самого 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(numstr<0)
    {
    CanShow = false;
    Application->HideHint ();
    return;
    }
    HintStr = ListBox1->Items->Strings[numstr];
    strsize = ListBox1->Canvas->TextExtent(HintStr);
    if(strsize.cx<=ListBox1->ClientWidth)
    {
    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-а


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

    int i = ListBox1->Items->Count;

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

    // Чтобы прокрутить содержимое списка (TListBox) на одну
    // строку вниз, напишите следующий код:
    SendMessage(ListBox1->Handle, WM_VSCROLL, SB_LINEDOWN, 0);

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

    // Напишите следующий код:
    for(int i = ListBox1->Items->Count-1; i >= 0; i--)
    if(ListBox1->Selected[i])
    ListBox1->Items->Delete(i);

Читайте также:
  • Класс TFileStream. Понятие потока VCL.
    Сначала я бы хотел бы дать некоторое вступление по поводу поточных классов VCL. Эти классы есть некоторое подобие альтернативы поточным классам C++. Как обычно в таких случаях с VCL, основной TStream класс никто впрямую не использует, от него можно только наследовать. Прямым потомком TStream явл...
  • Файловый ввод-вывод.
    fstream Инкапсулирует стандартный ввод-вывод. Я не буду рассматривать расширения этого класса под UNIX, ведь все равно программируем под Windows. Эти самые расширения касаются в основном прав доступа, по умолчанию 666 - allow all. В общем техника работы с этим классом такова. Сначала создается эк...
  • Таблицы откликов [MESSAGE_MAP, MESSAGE_HANDLER]
    В VCL определены некоторые стандартные события для компонентов. Можно заметить, что эти события похожи на стандартные сообщения Windows. Однако не все сообщения Windows можно найти в VCL, и не все сообщения VCL реализованы в WinAPI. Например, в WinAPI нет сообщения, аналогичному OnClick, с другой...
  • TRegistry
    Чтобы легче было разбираться с Хелпом, скажу, что понятие Key означает не параметр, как можно было подумать, а раздел. Каждый раздел является подразделом главного раздела, которые мы рассмотрели в предыдущем Шаге. Чтобы понятней было, скажу, что иерархия напоминает файловую систему, где HKEY_* - ...
  • Класс списка строк TStringList и его связь с INI-файлами [TStringList, TIniFile]
    Класс TStringList является потомком класса TStrings, используемого в некоторых компонентах VCL, оперирующих текстом. Однако для использования вне объектов класс TStrings не подходит, поскольку не имеет собственного конструктора. Для этих целей используется TStringList, расширяющий функциональнос...