首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CheckListBox项目样式

CheckListBox项目样式
EN

Stack Overflow用户
提问于 2018-12-04 15:10:56
回答 2查看 767关注 0票数 1

我在启动时添加项目(文件名来自给定文件夹的名称),并在单击项目时使用此过程来完成任务:

代码语言:javascript
复制
procedure TForm1.CheckListBoxClickCheck(Sender: TObject);

如何使选中的项更改其颜色或样式?换句话说,我单击了一个项目,在检查之后,我选择了粗体

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-04 16:34:37

您需要将Style属性设置为lbOwnerDrawFixed,并在OnDrawItem事件中自己绘制项。

例如:

代码语言:javascript
复制
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;

注意,InvalidateOnClickCheck中也是必需的,因为当检查/未选中项时,该控件不会失效(至少在我当前的Delphi版本中不是这样)。

票数 3
EN

Stack Overflow用户

发布于 2018-12-05 11:33:47

@Felix

Kobik的答案是最好的我绝对没有什么可评论的。

但是,如果你不熟悉德尔福来创建这样的“复杂”自定义绘图代码,那么还有一个类似黑客的选项:编写自己的CheckListBox:在TPanel或TScrollBox中放置多个复选框,并将它们对齐到顶部。这样,您就可以访问每个复选框属性(字体外观、大小、样式等)。

可以通过这种方式从复合控件创建许多新控件。

记住,这只是另一种/脏黑客。是。它将与Delphi样式(vsf)一起工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53615932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档