ListBox

  1. Над каким элементом находится курсор мыши
  2. Навигация в ListBox при множественном выборе
  3. Как сделать так, чтобы при наведении на элемент, длина которого больше длины самого ListBox, появлялся Hint
  4. Как узнать количество строк(записей)
  5. Прокрутка ListBox на одну строку вниз
  6. [+] Удаление выбранных элементов в TListBox
  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);

Наверх
Hosted by uCoz