C++ Builder Snippets  

Bitmaps in der TListBox anzeigen:
 
//---------------------------------------------------------------------------
// Kleine Bitmaps neben den Einträgen in der Listbox anzeigen
//---------------------------------------------------------------------------
//
// 1. Setzen Sie die Eigenschaft 'Style' der ListBox auf 'lbOwnerDrawFixed'.
// 
// 2. Setzen Sie die Eigenschaft 'ItemHeight' der ListBox auf einen Wert, der
//    in etwa der Bildhöhe+4 Pixel entspricht.
//
// 3. Schreiben Sie die Behandlungsfunktion für das OnDrawItem-Ereignis 
//    der ListBox (s. Beispiel unten). Im folgenden Beispiel werden die 
//    neben den ListBox-Einträgen anzuzeigenden Bitmaps aus einer TImageList
//    heraus gezeichnet. Die Bilder können aber natürlich auch aus einer 
//    Datei oder Programmressourcen geladen werden.

//---------------------------------------------------------------------------
// Behandlungsroutine für das Ereignis OnDrawItem der ListBox 
// lboxTarget ist der Name der ListBox
//---------------------------------------------------------------------------
void __fastcall TfrmMain::lboxTargetDrawItem(TWinControl *Control,
      int Index, TRect &Rect, TOwnerDrawState State)
{
  // Text- und Hintergrundfarben (abhängig davon,
  // ob der Eintrag ausgewählt ist) festlegen:
  TColor clBack = State.Contains(odSelected) ? clHighlight : clWindow;
  TColor clText = State.Contains(odSelected) ? clHighlightText : clWindowText;

  // Hintergrundfarbe setzen und Rechteck damit füllen:
  lboxTarget->Canvas->Brush->Color = clBack;
  lboxTarget->Canvas->FillRect(Rect);

  // Textfarbe setzen:
  lboxTarget->Canvas->Pen->Color = clText;

  // Bild aus der TImageList zeichnen:
  int ilPicIndex = 3;
  if(lboxTarget->Items->Strings[Index].Pos("Ziel") > 0)
  {
    ilPicIndex = lboxTarget->Items->Strings[Index].SubString(
      lboxTarget->Items->Strings[Index].Length(), 1).ToIntDef(4)-1;
  }
  imgList -> Draw(lboxTarget->Canvas, 5, Rect.Top + 1, ilPicIndex, true);

  // Linken Rand des Text-Rechtecks um einen
  // "Bild-Offsetwert" nach rechts verschieben:
  Rect.Left = Rect.Left + 25;

  // Zeichnen des Textes: (wir benutzen DrawText() um
  // die Listbox-Einträge vert. zentriert auszugeben):
  DrawText(lboxTarget->Canvas->Handle, lboxTarget->Items->
    Strings[Index].c_str(), -1, (RECT*)&Rect, DT_SINGLELINE | DT_VCENTER);
}


  Download BCB5
Projekt-Quellcode
Download
Demo-Exe

© '99-2001 by S. Kreutzmann