uses
Themes;
procedure TForm1.CheckListBox2DrawItem(Control: TWinControl; Index: Integer;
ARect: TRect; State: TOwnerDrawState);
var
listbox: TCheckListbox;
details: TThemedElementDetails;
R: TRect;
wcheck: Integer;
begin
if not (Control is TCheckListbox) then
exit;
listbox := TCheckListbox(Control);
if listbox.Selected[Index] then
begin
listbox.Canvas.Brush.Color := clHighlight;
listbox.Canvas.Font.Color := clHighlightText;
end else
begin
listbox.Canvas.Brush.Color := clWindow;
listbox.Canvas.Font.Color := clWindowText;
end;
if not listbox.ItemEnabled[Index] then
listbox.Canvas.Font.Color := clGrayText;
listbox.Canvas.FillRect(ARect);
if listbox.Checked[Index] then
begin
if listbox.ItemEnabled[Index] then
details := ThemeServices.GetElementDetails(tbCheckboxCheckedNormal)
else
details := ThemeServices.GetElementDetails(tbCheckboxCheckedDisabled)
end else
begin
if listbox.ItemEnabled[Index] then
details := ThemeServices.GetElementDetails(tbCheckBoxUncheckedNormal)
else
details := ThemeServices.GetElementDetails(tbCheckboxUncheckedDisabled);
end;
wcheck := ARect.Height - 2;
R := Rect(ARect.Left + 2, ARect.Top + 2, ARect.Left + wcheck, ARect.Top + wcheck);
ThemeServices.DrawElement(listbox.Canvas.Handle, details, R, nil);
listbox.Canvas.TextOut(R.Left + wcheck + 2, ARect.Top + 2, listbox.Items[Index]);
end;