我在启动时添加了项目(给定文件夹名称中的文件名),并且我正在使用此过程来完成单击项目时的操作:
procedure TForm1.CheckListBoxClickCheck(Sender: TObject);
如何使选中的项目更改其颜色或样式?换句话说,我单击一个项目,然后检查后将加粗。
答案 0 :(得分:3)
您需要将Style
属性设置为lbOwnerDrawFixed
,并在OnDrawItem
事件中自己绘制项目。
例如
procedure TForm1.CheckListBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
Flags: Longint;
begin
with TCheckListBox(Control) do
begin
if Checked[Index] then
begin
Canvas.Font.Style := Canvas.Font.Style + [fsBold];
Canvas.Font.Color := clRed;
end;
Canvas.FillRect(Rect);
if Index < Items.Count then
begin
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, PChar(Items[Index]), Length(Items[Index]), Rect,
Flags);
end;
end;
end;
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
begin
TCheckListBox(Sender).Invalidate;
end;
请注意,Invalidate
中的OnClickCheck
也是必需的,因为在选中/取消选中某项时控件不会失效(至少在我当前的Delphi版本中不是)。
答案 1 :(得分:0)
@Felix
Kobik的答案是最好的。我对此无可奉告。
但是,如果您对创建这样的“复杂”自定义绘图代码不熟悉,则还有一种类似黑客的选择:编写自己的CheckListBox:将多个复选框放在TPanel或TScrollBox中,然后将它们对齐到顶部。这样,您可以访问每个复选框属性(字体,大小,样式等)。
可以通过复合控件以这种方式创建许多新控件。
请记住,这只是一种替代/ 肮脏的黑客行为。是。它将与Delphi样式(vsf)一起使用。