2010-02-26 40 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

相關問題