3

我尝试将刻度样式设置为 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。

先感谢您。

4

3 回答 3

7

如果 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 );
于 2010-03-05T00:45:00.040 回答
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;

希望这可以帮助!

于 2010-02-26T21:48:01.353 回答
0

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

于 2014-08-23T14:12:50.840 回答