3

ティック スタイルを 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 );

助言がありますか?重要な詳細が欠けていると確信しており、ドキュメントはかなりまばらです。これは、アップデート 4 を適用した Delphi 2010 の新しい空の VCL フォーム プロジェクトにあります。

前もって感謝します。

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 が機能しない理由はわかりませんが、手順と同じ方法で SendMessage を実行すると機能します。次のように、ユニット 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 に答える