windows7でTScrollBoxのHorzScrollBarが無効にならない


nish  2010-02-17 19:29:08  No: 37660  IP: 192.*.*.*

EnableScrollBar関数を使用して
TScrollBoxのHorzScrollBarを無効にしているのですが
Windows7で動作した所、無効になりませんでした。(XP、Vistaでは問題なし)
Windows7では使用できない等、何かご存知の方いらっしゃいますでしょうか?

開発環境
WindowsXP
Delphi6 Pro

編集 削除
jazzin  2010-02-17 19:39:22  No: 37661  IP: 192.*.*.*

戻り値やGetLastErrorの値はどうなっていましたか?
エラー情報から探るのが一番の近道だと思われます。

編集 削除
nish  2010-02-17 19:41:25  No: 37662  IP: 192.*.*.*

戻り値は正常でした。
正常でしたのでGetLastErrorは見ていません。
(環境が手元にないもので)

編集 削除
にしの  2010-02-20 03:53:58  No: 37663  IP: 192.*.*.*

Delphi20101+Windows7では、無効になりますね。

EnableScrollBar(ScrollBox1.Handle, SB_HORZ, ESB_DISABLE_BOTH)

Delphi6だからでしょうか。

編集 削除
nish  2010-02-22 20:32:54  No: 37664  IP: 192.*.*.*

>Delphi20101+Windows7では、無効になりますね。
その環境では無効になりますか。
貴重な情報ありがとうございます。

やはりDelphi6だからでしょうか。
何か証拠というか調査方法はないでしょうか?

編集 削除
にしの  2010-02-22 23:22:21  No: 37665  IP: 192.*.*.*

> Delphi20101+Windows7では、無効になりますね
1文字多かったです。Delphi2010+Windows7です。


確認ですが、
無効=ボタンが押せない状態
ですよね。
もし、スクロールバーが非表示ということであれば、ちょっと話が違ってくるので。

こちらの環境では、TScrollBoxを置いて、その中にいくつかコントロールを置きました。
# スクロールバーが出るように。

スクロールバーが出ている状態で、ボタン押下時に

EnableScrollBar(ScrollBox1.Handle, SB_HORZ, ESB_DISABLE_BOTH)

を実行しました。
ほかに特にコードは書いていません。
これでスクロールバーが押せない(触れない)状態になります。
ただし、無効なスクロールバーとして表示されています。
非表示ではありません。

編集 削除
nish  2010-02-23 10:45:16  No: 37666  IP: 192.*.*.*

> 無効=ボタンが押せない状態
> ですよね。
はい。
スクロールバーは表示した状態です。
無効なスクロールバーを表示させたいので。

編集 削除
nish  2010-02-23 11:31:00  No: 37667  IP: 192.*.*.*

コードは2行です。
-----
  // スクロールバーを表示するためRangeを設定
  ScrollBox1.HorzScrollBar.Range := ScrollBox1.ClientWidth * 2;
  // 無効にする
  EnableScrollBar( ScrollBox1.Handle, SB_HORZ, ESB_DISABLE_BOTH );
-----
XP、Vistaでは無効なスクロールバーが表示されますが
Windows7では有効なスクロールが表示されてしまいます。

編集 削除
tor  2010-02-23 14:01:05  No: 37668  IP: 192.*.*.*

TScrollingWinControlはFlatScrollBar対応になっていたと思うので
FlatSB_EnableScrollBarを使ったらどうなるでしょうか?

また、SetScrollInfo(またはFlatSB_SetScrollInfo)で
・fMaskにSIF_DISABLENOSCROLLを指定
・スクロールバーが出ない範囲にnMin, nMaxを設定
とした場合はどうでしょう?

ちなみに
> 戻り値は正常でした。
というのは、0以外の値が返ってきたということでいいんですよね?

編集 削除