【问题标题】:How to set custom ticks on a TTrackBar in Delphi 2010?如何在 Delphi 2010 中的 TTrackBar 上设置自定义刻度?
【发布时间】:2011-01-21 15:06:13
【问题描述】:

我尝试将刻度样式设置为 tsManual,将最小和最大位置分别设置为 1 和 100,并在 9、19、79 和 89 处添加刻度,除了控件的 detault first 和 last 之外,根本没有显示任何刻度自动显示。我尝试了其他值,但没有显示。我的代码是:

TrackBar1.TickStyle := tsManual;
TrackBar1.Min := 1;
TrackBar1.Max := 100;
TrackBar1.SetTick( 9 );
TrackBar1.SetTick( 19 );
TrackBar1.SetTick( 79 );
TrackBar1.SetTick( 89 );

有什么建议吗?我确定我遗漏了一个重要的细节,而且文档非常稀少。这是在 Delphi 2010 中的一个新的空 VCL Forms 项目中,带有更新 4。

提前谢谢你。

【问题讨论】:

    标签: delphi delphi-2010 vcl trackbar


    【解决方案1】:

    如果 Handle 属性当前未分配,TTrackBar.SetTick() 不会发送 TBM_SETTIC 消息:

    procedure TTrackBar.SetTick(Value: Integer);
    begin
      if HandleAllocated then // <-- here
        SendMessage(Handle, TBM_SETTIC, 0, Value);
    end;
    

    在第一次读取 Handle 属性之前,不会分配窗口句柄,而不是在最初创建组件时。因此,在调用 SetTick() 之前调用 HandleNeeded():

    TrackBar1.TickStyle := tsManual; 
    TrackBar1.Min := 1; 
    TrackBar1.Max := 100; 
    TrackBar1.HandleNeeded; // <-- here 
    TrackBar1.SetTick( 9 ); 
    TrackBar1.SetTick( 19 ); 
    TrackBar1.SetTick( 79 ); 
    TrackBar1.SetTick( 89 );
    

    【讨论】:

    • 非常感谢 Remy,这解释了我的问题的原因!
    【解决方案2】:

    我不知道为什么程序 TrackBar1.SetTick 不起作用,但如果您以与该程序相同的方式发送消息,它将起作用。您需要将单元 CommCtrl 添加到您的 uses 子句以解析 TBM_SETTIC,如图所示...

    implementation
    
    Uses CommCtrl;
    
    {$R *.dfm}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      TrackBar1.TickStyle := tsManual;
      TrackBar1.Min := 0;
      TrackBar1.Max := 100;
      SendMessage(TrackBar1.Handle, TBM_SETTIC, 0, 9);
      SendMessage(TrackBar1.Handle, TBM_SETTIC, 0, 19);
      SendMessage(TrackBar1.Handle, TBM_SETTIC, 0, 79);
      SendMessage(TrackBar1.Handle, TBM_SETTIC, 0, 89);
    end;
    

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      除了 handle 准备就绪和 TickStyle = tsManual 之外,frequency 属性必须设置为倍数,或者更容易设置为 1。

      【讨论】:

        猜你喜欢
        • 2018-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-27
        • 2021-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多