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

如何更新Windows TrackBar控件的提示文本(Delphi TTrackBar场景)

自定义Delphi TTrackBar的位置提示文本

完全可以手动修改TTrackBar的位置提示文本,比如把音量数值格式成“80 %”这种样式。核心思路是拦截跟踪条控件的通知消息,在提示框需要显示文本时替换成自定义内容,具体实现步骤如下:

  • 拦截控件的WM_NOTIFY消息:当PositionToolTip要显示时,系统会发送TTN_NEEDTEXT(分ANSI和Unicode版本)通知,请求提示文本。
  • 在通知处理中生成自定义格式的文本,替换掉默认的纯数值。

代码实现示例

可以通过继承TTrackBar创建自定义控件,重写WndProc来处理消息:

type
  TCustomTrackBar = class(TTrackBar)
  protected
    procedure WndProc(var Message: TMessage); override;
  end;

procedure TCustomTrackBar.WndProc(var Message: TMessage);
var
  pNMHDR: PNMHDR;
  pTTInfo: PTTGETTEXT;
  CustomText: string;
begin
  inherited;
  if Message.Msg = WM_NOTIFY then
  begin
    pNMHDR := PNMHDR(Message.LParam);
    // 处理ANSI和Unicode两种版本的文本请求
    if (pNMHDR^.code = TTN_NEEDTEXTW) or (pNMHDR^.code = TTN_NEEDTEXTA) then
    begin
      pTTInfo := PTTGETTEXT(Message.LParam);
      // 按需求格式化文本,这里是加上百分号
      CustomText := Format('%d %%', [Self.Position]);
      // 根据通知版本赋值文本
      if pNMHDR^.code = TTN_NEEDTEXTW then
        lstrcpyW(pTTInfo^.szText, PWideChar(CustomText))
      else
        lstrcpyA(pTTInfo^.szText, PAnsiChar(AnsiString(CustomText)));
      // 标记已处理文本,避免系统使用默认值
      Message.Result := 0;
    end;
  end;
end;

使用方法

  1. 在你的窗体中,把原有的TTrackBar组件替换成这个TCustomTrackBar(可以在代码里动态创建,或者在IDE中注册这个自定义控件)。
  2. 确保控件的PositionToolTip属性设置为ptTop、ptBottom等非None的值。

这种方式不需要单独通过TBM_GETTOOLTIPS获取提示框句柄,直接在系统请求文本的时机替换内容,是更简洁可靠的实现方式。

内容的提问来源于stack exchange,提问作者blerontin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:57:37