我尝试将刻度样式分别设置为tsManual,最小和最大位置分别为1和100,并在9、19、79和89处添加刻度,除了自动自动显示的响尾蛇以外,没有显示任何刻度。我尝试了其他值,但从未显示过。我的代码是:

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


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

先感谢您。

最佳答案

如果当前未分配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 );

09-19 06:34