我在启动时添加项目(文件名来自给定文件夹的名称),并在单击项目时使用此过程来完成任务:
procedure TForm1.CheckListBoxClickCheck(Sender: TObject);如何使选中的项更改其颜色或样式?换句话说,我单击了一个项目,在检查之后,我选择了粗体。
发布于 2018-12-04 16:34:37
您需要将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版本中不是这样)。
发布于 2018-12-05 11:33:47
@Felix
Kobik的答案是最好的我绝对没有什么可评论的。
但是,如果你不熟悉德尔福来创建这样的“复杂”自定义绘图代码,那么还有一个类似黑客的选项:编写自己的CheckListBox:在TPanel或TScrollBox中放置多个复选框,并将它们对齐到顶部。这样,您就可以访问每个复选框属性(字体外观、大小、样式等)。
可以通过这种方式从复合控件创建许多新控件。
记住,这只是另一种/脏黑客。是。它将与Delphi样式(vsf)一起工作。
https://stackoverflow.com/questions/53615932
复制相似问题