You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VCL TeeChart中自定义Gantt甘特图左侧行标签样式

实现方案

你遇到的Axes.Left.Items集合元素数量不符合预期的问题,是因为该集合仅存储手动添加的自定义标签,默认自动生成的轴标签不会存入这个集合,所以不需要通过该属性实现需求。

你可以使用TeeChart轴的OnGetAxisDrawLabel事件实现单个标签的样式自定义,该事件会在每个轴标签绘制前触发,支持直接修改标签的字体、颜色、背景等样式属性,具体实现步骤如下:

  1. 为TChart组件的左侧坐标轴绑定OnGetAxisDrawLabel事件
  2. 在事件回调中通过标签数值、文本或者索引匹配目标标签,修改对应的样式参数即可

代码示例

procedure TForm1.Chart1LeftAxisGetAxisDrawLabel(Sender: TCustomAxis;
  LabelIndex: Integer; const Value: Double; var Text: string;
  var DefaultDraw: Boolean);
begin
  // 匹配目标标签,可根据实际需求选择用Value、Text或LabelIndex作为判断条件
  if Value = 3.0 then // 示例:匹配轴数值为3的标签
  // if Text = '待处理任务' then // 也可通过标签文本匹配
  // if LabelIndex = 2 then // 也可通过显示顺序的索引匹配(从0计数)
  begin
    // 修改字体颜色为红色
    Sender.LabelsFont.Color := clRed;
    // 字体加粗
    Sender.LabelsFont.Style := Sender.LabelsFont.Style + [fsBold];
    // 开启背景高亮,设置背景为浅黄色
    Sender.LabelsTransparent := False;
    Sender.LabelsFont.Brush.Color := clYellow;
  end
  else
  begin
    // 非目标标签恢复默认样式,避免样式被全局覆盖
    Sender.LabelsFont.Color := clBlack;
    Sender.LabelsFont.Style := [];
    Sender.LabelsTransparent := True;
  end;
end;

补充说明

  • 如果需要更复杂的自定义效果(比如添加边框、特殊标记),可以将事件中的DefaultDraw参数设为False,直接调用Sender.ParentChart.Canvas的绘制方法手动渲染标签
  • 如果你需要批量修改多个指定标签的样式,可以提前把需要特殊处理的标签对应数值/文本存入一个列表,事件中判断当前标签是否在列表中即可批量处理

内容的提问来源于stack exchange,提问作者Marian Aldenhövel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:54:03