2010-02-26 70 views
3

我试图设置tick的风格tsManual,最小和最大位置分别为1和100,并在9,19,79和89添加滴答,除了首先和最后一个控件自动显示没有滴答显示。我尝试了其他的价值,并没有任何显示。我的代码是:如何在Delphi 2010的TTrackBar上设置自定义滴答?

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

有什么建议吗?我确信我错过了一个重要的细节,而且文档非常稀少。这是在德尔福2010年与更新4一个新的空VCL Forms项目。

在此先感谢您。

回答

5

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

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

窗口句柄没有得到分配,直到手柄属性是读的第一次,而不是当该组件最初创建。这样,主叫SetTick()之前调用HandleNeeded():

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

非常感谢雷米,这解释了我的问题的原因! – 2010-05-13 21:45:40

2

我不知道为什么程序TrackBar1.SetTick不起作用,但如果你使用SendMessage程序,它将起作用。您需要在单元CommCtrl添加到您的使用条款,以解决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; 

希望这有助于!

+0

非常感谢沃伦。 – 2010-02-26 22:41:30

0

除了handle准备好和TickStyle = tsManual,所述frequency属性必须被设置为一个或多个,更容易,为1

相关问题