2016-11-29 8 views
4

A. Delphi VCLフォームアプリケーションを作成します。スクロールバーは、例えば、ツリービュー上に表示されているようTTreeViewをプログラムによってスクロールする方法は?

B.は、フォーム、名前それtvTestとアイテムとそれを記入し、ツリービューのサイズを設定するにTTreeViewの入れ:

enter image description here

C 。フォーム上のボタンを配置し、そのクリックハンドラにこのコードを書く:

procedure TForm1.btnScrollClick(Sender: TObject); 
    begin 
    tvTest.ScrollBy(tvTest.Width, 0); 
    end; 

D.今すぐプログラムを実行し、ボタンをクリックしてください。おそらく、水平スクロールバーは左から右にスクロールする必要があります。しかし、何も起こりません。どうして?

スクロールバー(とスクロールバーのコンテンツを含む)を左から右、右から左、下、上にスクロールするにはどうすればよいですか?

デルファイ10.1ベルリンアップデート2
のWindows 7のx64 SP1

EDIT:私は(サミの提案に似ている)、このコードを使用する場合:

tvTest.ScrollBy(-3, -3);

を...私はこれを取得現代美術の一部:

enter image description here

+0

'tvTest.ScrollBy(3、3);'を試し、ボタンを5回クリックすると – Sami

+0

これはスクロールバーではなくツリービュースクロールのコンテンツのみを作成します。しかし、ボタンを数回クリックすると、部分的に画面領域の外にフォームがドラッグされ、ツリービューのコンテンツを元の場所に戻してドラッグしたときに再び表示されました。だから、TreeViewは実際にはスクロールされていませんでしたが、スクロールされたのはそれだけでした。どうして?そして、私は本当にTreeviewをスクロールできますか? – user1580348

答えて

4

TreeViewをスクロールするには、PerformWM_VSCROLLおよび/またはWM_HSCROLLメッセージを送信します。

tvTest.Perform(WM_HSCROLL, MakeWParam(SB_LINERIGHT, 0), 0); 

または

tvTest.Perform(WM_VSCROLL, MakeWParam(SB_LINEDOWN, 0), 0); 

パラメータのためのメッセージの対応するドキュメンテーションを参照してください。

ScrollByは、ScrollWindow APIのVCLのラッパーであり、コントロールの内容をシフトします。これはスクロールされたコントロールのクライアントの一部をペイントするためのショートカットです。表示されている(空の)部分をさらにペイントする必要があります。これは、通常、コントロールの内部実装によって使用されます。あなたが探しているものではありません。

+0

ありがとうございます、これは動作しますが、ゼロの代わりに何番目の数字を入れても、ボタンを押すたびに非常に小さな量しかスクロールしません。しかし、私は左から右に、そして右から左にずっとスクロールする必要があります。これはどうすればできますか? – user1580348

+0

複数のメッセージを送信するか、またはSB_PAGE__定数を使用します。どういたしまして。 –

+0

ありがとうございました!私は 'Winapi.Windows'で' SB_PAGERIGHT'を探しました。しかし、いつも、Winapi.WindowsをIDEのエディタに読み込むと、IDEがクラッシュします。だからこそ、それは時間がかかりました。 'Winapi.Windows'ユニットをロードするときにIDEがクラッシュする理由を知っていますか? – user1580348

関連する問題