C++ Builder Snippets  

Vollständigen Eintragstext in der ListBox als Hint anzeigen:
 
//---------------------------------------------------------------------------
// Manchmal reicht die Breite einer Listbox nicht aus, um besonders lange 
// Einträge vollständig darzustellen. In solchen Fällen empfiehlt es sich,
// die (im 'normalen' Zustand nur teilweise sichtbaren) Einträge als 
// Hint in voller Länge anzuzeigen, wenn man mit dem Mauscursor über dem
// Eintrag stehen bleibt.
//---------------------------------------------------------------------------
// Vorghensweise:
// 1. Eigenschaft "ShowHint" der ListBoxen muss auf true gesetzt werden !

// 2. Im OnCreate- oder OnShow-EventHandler des Formulars OnShowHint-
//    Ereignisbehandlungsfunktion zuweisen:
Application->OnShowHint=OnShowHint;

// 3. OnShowHint-Ereignisbehandlungsfunktion in der Header-Datei des 
//    Formulars deklarieren
class TfrmMain : public TForm
{
  __published:  // Von der IDE verwaltete Komponenten
  ...

  private:  
  ...

  // OnHint-Eventhandler
  void __fastcall TfrmMain::OnShowHint(System::AnsiString &HintStr,
    bool &CanShow, THintInfo &HintInfo);

  public:    
    __fastcall TfrmMain(TComponent* Owner);
    ...
};
 

// 4. Funktion in die CPP-Datei einbinden:

//---------------------------------------------------------------------------
// OnShowHint-Eventhandler der Application
//---------------------------------------------------------------------------
void __fastcall TfrmMain::OnShowHint(System::AnsiString &HintStr,
  bool &CanShow, THintInfo &HintInfo)
{
  // Falls Hint zu einer ListBox angzeigt werden soll:
  if(HintInfo.HintControl->ClassNameIs("TListBox"))
  {
    // Zeiger casten:
    TListBox* pListBox = static_cast<TListBox *>(HintInfo.HintControl);
    // ListBox-Index des Eintrags unter dem Mouse-Cursor ermitteln:
    int ilIndex = pListBox->ItemAtPos(HintInfo.CursorPos, true);

    // Falls die Eintragsbreite grösser, als die ListBox-ClientBreite:
    if(ilIndex >= 0 && pListBox->Canvas->
      TextWidth(pListBox->Items->Strings[ilIndex]) >
        pListBox->ClientRect.Right-pListBox->ClientRect.Left)
    {
      CanShow = true;

      // Hint-Position, Farbe, Text etc. anpassen:
      HintInfo.HintPos.x = 0;
      HintInfo.HintPos.y = pListBox->ItemHeight*(ilIndex-pListBox->TopIndex);
      HintInfo.HintPos = pListBox->ClientToScreen(HintInfo.HintPos);
      HintInfo.HintColor = clWhite;
      HintInfo.ReshowTimeout = 200;
      HintInfo.HintStr = pListBox->Items->Strings[ilIndex];
    }
    // Falls schon komplett sichtbar, Hint nicht anzeigen:
    else CanShow = false;
  }
}


  Download BCB5
Projekt-Quellcode
Download
Demo-Exe

© '99-2001 by S. Kreutzmann