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


nish  2010-02-18 04:29:08  No: 37660

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

開発環境
WindowsXP
Delphi6 Pro


jazzin  2010-02-18 04:39:22  No: 37661

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


nish  2010-02-18 04:41:25  No: 37662

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


にしの  2010-02-20 12:53:58  No: 37663

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

EnableScrollBar(ScrollBox1.Handle, SB_HORZ, ESB_DISABLE_BOTH)

Delphi6だからでしょうか。


nish  2010-02-23 05:32:54  No: 37664

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

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


にしの  2010-02-23 08:22:21  No: 37665

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

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

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

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

EnableScrollBar(ScrollBox1.Handle, SB_HORZ, ESB_DISABLE_BOTH)

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


nish  2010-02-23 19:45:16  No: 37666

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


nish  2010-02-23 20:31:00  No: 37667

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


tor  2010-02-23 23:01:05  No: 37668

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

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加