Owner-Draw-Elemente anzeigen
Nach oben zu Mit Steuerelementen arbeiten - Index
Wenn in einer Anwendung ein Owner-Draw-Steuerelement angezeigt oder aktualisiert werden muss, wird für jedes sichtbare Element des Steuerelements ein entsprechendes Ereignis generiert. In Abhängigkeit vom Steuerelement kann das Element Ereignisse für das Element insgesamt oder für Teilelemente empfangen.
Wenn Sie alle Elemente des Steuerelements anzeigen wollen, erstellen Sie eine Behandlungsroutine für dieses Ereignis.
Die Namen der Ereignisse beginnen normalerweise mit folgenden Silben:
- OnDraw wie in OnDrawItem oder OnDrawCell
- OnCustomDraw wie in OnCustomDrawItem
- OnAdvancedCustomDraw wie in OnAdvancedCustomDrawItem
Einer Behandlungsroutine für ein OnDraw-Ereignis müssen drei Parameter übergeben werden: das anzuzeigende Element, das Rechteck, in dem es angezeigt wird, und der Elementstatus (z.B. ob das Element den Fokus hat). Die Anwendung gibt das Element im angegebenen Rechteck aus.
Im folgenden Beispiel werden Elemente in einem Listenfeld angezeigt, in dem jedem String ein Bitmap zugeordnet ist. Die Routine wird dem Ereignis OnDrawItem des Listenfelds zugeordnet:
procedure TFMForm.DriveTabSetDrawTab(Sender: TObject; TabCanvas: TCanvas; R : TRect; Index: Integer; Selected: Boolean); var Bitmap: TBitmap; begin Bitmap := TBitmap(DriveTabSet.Tabs.Objects[Index]); with TabCanvas do begin Draw(R.Left, R.Top + 4, Bitmap); { Bitmap zeichnen} TextOut(R.Left + 2 + Bitmap.Width, { Text positionieren } R.Top + 2, DriveTabSet.Tabs[Index]); { und rechts neben der Bitmap-Grafik zeichnen } end; end;
void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index, TRect &Rect, TOwnerDrawState State) TBitmap *Bitmap = (TBitmap *)ListBox1->Items->Objects[Index]; ListBox1->Canvas->Draw(R.Left, R.Top + 2, Bitmap); // Bitmap zeichnen ListBox1->Canvas->TextOut(R.Left + Bitmap->Width + 2, R.Top + 2, ListBox1->Items->Strings[Index]); // und Text rechts daneben schreiben }