掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
OnMouseWheelを繰り返し処理をさせない為には? (ID:6159)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
毎度お世話になっております。かなものです。 作業につまってしまい、ご質問させて頂きたいと思います。 またしても長文ですいません。 環境 Windows XP Professional Delphi 6 Personal ScrollBoxのスクロールがホイールでは動かないので、 今回、それをホイールでもスクロール出来るように打開策を試みました。 TESTの為に、下記のソースを書きました。 作業内容としては、Form1のOnMouseWheelに、 DOWN・UPにそれぞれScrollBox1.VertScrollBar.Positionの増減をさせいます。 intは、増減をLabel1に表示させているものです。 ----------------------------------------------------------------------------------- procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin int := int -1; ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position -8; Label1.Caption := IntToStr(int); end; procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin int := int +1; ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position +8; Label1.Caption := IntToStr(int); end; ----------------------------------------------------------------------------------- 現状では、動くには動くのですが、その動きの幅にバラつきが発生し、 回避できずに行き詰ってしまいました。 まず、Formに、直接ScrollBoxを貼り付けて動作させました。 これは全く問題ありませんでした。 次に、実際の環境に似せてPageControlの中にScrollBoxを貼り付けたら 増減が倍の±16でホイール処理が行われるようになってしまいました。 さらに、実際に実装したいプログラムは、ClientSocketを使っているのですが、 試しに動かしてみたら、ClientSocketを動作させた時点で 5倍の±40でホイール処理が行われるようになってしまいました。 ClientSocketの話は抜きにして、PageControlを調べた所、 このPageControlをFormに張り付けただけで、倍の±16でホイール処理が行われていました。 もう少し突っ込んで調べてみたら、1回ホイールを回しただけで、 OnMouseWheelDOWN・UPが、2回処理が連続で行われていました。 5倍の±40は、5回連続で処理されていた事になります。 ClientSocketを動かしたら5倍に・・・は、全く見当が付かないのですが、 PageControlを張り付けただけで、2回処理される事に関係していると思いました。 GOOGLEで調べてみましたが、これ以上調べる事が出来ませんでした。 結果的に、OnMouseWheelDOWN・UPの多重処理の話になっていますが、 やりたい事は「ScrollBoxのスクロールをホイールで動かす」です。 対処方法、又は他に打開策があれば、ご教授頂けたらと思います。 宜しくお願い致します。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.