首页 > 解决方案 > 如何反转 Delphi 的 TTrackbar.Orientation 值?

问题描述

TTrackbar.Orientation属性设置为trVertical时,Min值在顶部,而Max在底部:

轨迹栏在顶部和底部显示位置值

如何反转Min/Max位置?例如,如果我想使用垂直方向的 TrackBar 来控制音频输出的音量,我需要Min底部和Max顶部的 TrackBar。

标签: delphivclwin32guitrackbar

解决方案


没有内置的方法可以做到这一点。但是您可以通过代码反转 min-max 值:

volume := (trackbar.Max - trackBar.Position) + trackBar.Min;

关于 ToolTip 值的呈现,@Victoria 好心提供了一个拦截TTN_NEEDTEXTwindows 消息并更正文本输出的解决方案:

uses
  Winapi.CommCtrl;

type
  TTrackBar = class(Vcl.ComCtrls.TTrackBar)
  private
    procedure WMNotify(var Msg: TWMNotify); message WM_NOTIFY;
  end;

implementation

procedure TTrackBar.WMNotify(var Msg: TWMNotify);
begin
  if Msg.NMHdr.code = TTN_NEEDTEXTW then
  begin
    PToolTipTextW(Msg.NMHdr)^.hInst := 0;
    PToolTipTextW(Msg.NMHdr)^.lpszText := 
      PChar('Position: ' + IntToStr((Max - Position) + Min));
  end
  else
    inherited;
end; 

推荐阅读