更改特定Checklistbox项的字体或颜色?

Mic*_*l T 5 delphi

我正在使用Delphi XE-3.我希望更改为核对表框中单个项目的颜色或字体.这可能吗?

TLa*_*ama 11

您需要使用所有者绘图作为您的检查列表框.将Style检查列表框的属性设置为lbOwnerDrawFixed并写入OnDrawItem事件的处理程序.在此事件处理程序中,您可以使用以下内容:

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;
Run Code Online (Sandbox Code Playgroud)

这是上面例子的结果:

在此输入图像描述

  • 这不包括项目的状态(如果它是聚焦,选择或不选择)并忽略VCL样式. (6认同)