2012-11-28 13 views
5

Ich benutze Delphi XE-3. Ich möchte zu Farbe oder Schriftart eines einzelnen Elements in einer Checkliste ändern. Ist das möglich?Schriftart oder Farbe eines bestimmten Checklistbox Items ändern?

+0

oder Simulation CheckListBox Witz h3rd-Party-Steuerelemente wie VTW –

+0

Ähnliche/duplizieren zu http : //stackoverflow.com/questions/8563508/how-do-i-draw-the-selected-list-box-item-in-a-different-color –

Antwort

10

Sie müssen die Eigentümerzeichnung für Ihre Checkliste verwenden. Setzen Sie die Eigenschaft Style Ihres Prüflistenfelds auf lbOwnerDrawFixed und schreiben Sie den Handler für das Ereignis OnDrawItem. In diesem Event-Handler können Sie etwas wie folgt verwenden:

procedure TForm1.CheckListBox1DrawItem(Control: TWinControl; Index: Integer; 
    Rect: TRect; State: TOwnerDrawState); 
var 
    Flags: Longint; 
begin 
    with (Control as TCheckListBox) do 
    begin 
    // modifying the Canvas.Brush.Color here will adjust the item color 
    case Index of 
     0: Canvas.Brush.Color := $00F9F9F9; 
     1: Canvas.Brush.Color := $00EFEFEF; 
     2: Canvas.Brush.Color := $00E5E5E5; 
    end; 
    Canvas.FillRect(Rect); 
    // modifying the Canvas.Font.Color here will adjust the item font color 
    case Index of 
     0: Canvas.Font.Color := clRed; 
     1: Canvas.Font.Color := clGreen; 
     2: Canvas.Font.Color := clBlue; 
    end; 
    Flags := DrawTextBiDiModeFlags(DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX); 
    if not UseRightToLeftAlignment then 
     Inc(Rect.Left, 2) 
    else 
     Dec(Rect.Right, 2); 
    DrawText(Canvas.Handle, Items[Index], Length(Items[Index]), Rect, Flags); 
    end; 
end; 

Hier ist das Ergebnis des obigen Beispiels:

enter image description here

+6

Dies deckt nicht den Status des Objekts ab (wenn es fokussiert ist) , ausgewählt oder nicht) und ignoriert VCL-Stile. – TLama

Verwandte Themen