- PR -

【VB6】スクロールバーで32ビット値(Long値)を扱いたい

投稿者投稿内容
お茶の里
会議室デビュー日: 2006/10/30
投稿数: 5
投稿日時: 2006-10-30 20:14
初めて投稿させていただきます。

VB6で、スクロールバーコントロールを使用して、
32ビット値(Long値)を扱う方法を考えています。

行ないたい操作は、0〜1000000のような大きな値に対して、
スクロールバーのツマミと端のボタンを利用して、
値を細かく変更させたい、といった具合です。

ところが、VB6標準のスクロールバーコントロール
(VScrollBar/HScrollBar)では、16ビット値(Integer値)
しか扱えません。

なにか方法は無いものかといろいろ検索したのですが、
解決策は見つかりませんでした。

この件について解決策やヒントになる情報をお持ちの
方がおりましたら、ご教授頂きたいと思います。

(当方は、VB6、C言語、Win32API、を業務で使用しており、
これらに関してある程度の知識があります。)

以上、よろしくお願いいたします。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2006-10-30 20:35
引用:

お茶の里さんの書き込み (2006-10-30 20:14) より:
行ないたい操作は、0〜1000000のような大きな値に対して、
スクロールバーのツマミと端のボタンを利用して、
値を細かく変更させたい、といった具合です。



0〜1000000に対して「1」刻みで設定したいということでしょうか?相当に扱いにくいと思いますが、そのあたりは大丈夫なんですか(老婆心)。
未記入
会議室デビュー日: 2003/02/21
投稿数: 10
投稿日時: 2006-10-30 20:38
引用:

行ないたい操作は、0〜1000000のような大きな値に対して、
スクロールバーのツマミと端のボタンを利用して、
値を細かく変更させたい、といった具合です。



画面のサイズは何ピクセル?
仕様考え直したほうがいいよ。

お茶の里
会議室デビュー日: 2006/10/30
投稿数: 5
投稿日時: 2006-10-31 10:29
shimixさん、未記入さん、回答ありがとうございます。

お二人の御指摘通り、一般的な画面サイズに対して0〜1000000という範囲は
桁外れに大きく、一見扱いにくいことは認識しております。

   shimixさんの書き込み(2006-10-30 20:35)より:
引用:

0〜1000000に対して「1」刻みで設定したいということでしょうか?



その通りです。
行ないたい処理の説明が足りなかったので、追記します。
  • 表示対象は、画面の表示領域に入りきらないほど幅が大きい(横長)
  • この表示対象を、スクロール幅0〜1000000で横スクロール表示したい(1/1000000刻み)
  • スクロールバーの「つまみ」では、表示対象全体を大雑把に移動できれば良い
  • スクロールバー両端の三角ボタンで細かく(「1」刻みで)スクロール表示したい(ここが重要)

ユーザーコントロールで作れないか模索したのですが、
お恥ずかしながら当方はユーザーコントロール製作の経験がないこともあり、
条件を満たす物に到達できていません。
(そもそもユーザーコントロール内で標準スクロールバーを使ったら同じ結果にしかならない?)

なにか良いアイデアはないでしょうか。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-10-31 10:49
ユーザコントロールにするかしないかは別として、
スクロールバー「みたいなもの」を、コントロールを組み合わせて作ることになるのではないかと。

ボタン ドラッグ用バー ボタン

の3つを並べて、それぞれにイベントを書いていくしか。
ボタンが押されたらタイマーを活性化させて、タイマーで値を±1し続けるように作っておくとか。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-10-31 11:06
引用:

お茶の里さんの書き込み (2006-10-31 10:29) より:
お恥ずかしながら当方はユーザーコントロール製作の経験がないこともあり、
条件を満たす物に到達できていません。
(そもそもユーザーコントロール内で標準スクロールバーを使ったら同じ結果にしかならない?)


APIレベルでは32bit値を扱えるので、GetScrollInfo APIとSetScrollInfo APIを直接利用し、オーナードローと同じ要領でWM_VSCROLLとWM_HSCROLLを自前で処理すれば出来なくは無いはずです・・・。でも、それをVB6.0で書きたいとは思えません。
mioさんのようにボタンなどを配置して自前のコントロールを作ったほうが、良い結果を得られそうに思います。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-10-31 11:23
引用:

お茶の里さんの書き込み (2006-10-31 10:29) より:

ユーザーコントロールで作れないか模索したのですが、
お恥ずかしながら当方はユーザーコントロール製作の経験がないこともあり、
条件を満たす物に到達できていません。
(そもそもユーザーコントロール内で標準スクロールバーを使ったら同じ結果にしかならない?)


僕なら、次のような方法を検討します。

(1) スクロールバーではなく、機能を満たすことができる扱いやすい方法を検討する。
(2) スクロールバーと同じものをユーザーコントロールで自作する。

(番外編) 既存のスクロールバーを使ったトリッキーな処理を行うw

#番外編が楽しそうですが、仕事なら手堅く(1)→(2)の順で検討しますね。
_________________
R・田中一郎 -  R.Tanaka.Ichiro’s Blog
お茶の里
会議室デビュー日: 2006/10/30
投稿数: 5
投稿日時: 2006-10-31 12:08
mioさん、アイデアありがとうございます。

   mioさんの書き込み(2006-10-31 10:49)より:
引用:

スクロールバー「みたいなもの」を、コントロールを組み合わせて作ることになるのではないかと。


この方法は以前少しだけ試したことがあるのですが、当方のセンスがないためか、
見た目と操作性(特に操作性)がイマイチでしたので、別の方法を検討していました。
もう一度、本腰を入れての作り直しを検討してみます。

スキルアップ/キャリアアップ(JOB@IT)