[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/08/26(Fri) 13:53
投稿者名:ダンボ
URL :
タイトル:
スクロールバーの点滅をなくす
お知恵拝借。
画像一覧表示用のアプリケーションで、水平スクロールバーが常に点滅していて気持ちが悪いです。

googleで「スクロールバー 点滅 VB」を検索すると、
「フォーム上にHScrollまたは、VScrollのどれかだけがある場合は、"スクロールバーの点滅をなくす"こと
は、できません。
フォームに必ず、スクロールバーを含めてコントロールが2つ以上ないといけません。
次に、点滅をなくしたいスクロールバーのプロパティのTabStopをFalseにしてください。」というのがある。
また、点滅を実質上消すために「SetCaretBlinkTime(10000)を発行する」というのもありました。

原因と対策は一応理解できるものの、なんだかなあという対策です。別解はありませんか?

ところで、自分で作成したそのプログラムの別フォームでは垂直スクロールバーが1個だけなのに点滅して
いないのです!!「そうそうこうしたいんだよ」と2つのフォームのコントロールやロジックを見比べては
実験を繰り返しているのですが、核心に至りません。両方ともVB6標準のスクロールバーです。
検索した情報が正しければ、点滅しない方がおかしいのに。。。何かヒントを。

・点滅しない方のフォームに含まれているコントロールは、
  PictureBox 2個(ひとつは非表示)
  MMControl  1個(非表示)
  StatusBar  1個
  Timer      1個(非表示)
  VScrollBar 1個
・点滅する方のフォームに含まれているコントロールは、
  PictureBox 9個(ひとつは非表示)
  Image      9個(非表示)
  MMControl  1個(非表示)
  Frame      1個(非表示)
  ListBox    1個(非表示)
  CommandButton 3個(非表示)
  CommonDialog  1個(非表示)
  Label      10個
  Shape      8個
  RichTextBox8個(非表示)
  PopupMenu  20個位(非表示)
  HScrollBar 1個

投稿時間:2005/08/26(Fri) 18:44
投稿者名:たけ
Eメール:
URL :
タイトル:
Re: スクロールバーの点滅をなくす
点滅するものと点滅しないものがあるという質問の回答ではありませんが。

ChangeイベントやScrollイベントだけしか使用しないのであれば
Microsoft Windows Common Controls-2 6.0 (MSCOMCT2.OCX)に含まれている
FlatScrollBarコントロールを使用してみてはいかがでしょう。

これなら最初から点滅しません。

参考までに

投稿時間:2005/08/26(Fri) 21:17
投稿者名:ダンボ
URL :
タイトル:
Re^2: スクロールバーの点滅をなくす
たけ さん、どうもありがとうございます。

> Microsoft Windows Common Controls-2 6.0 (MSCOMCT2.OCX)に含まれている
> FlatScrollBarコントロールを使用してみてはいかがでしょう。

はい。実はこれも知っていまして今回試していました。見事に望みどおりの仕様になっています。
試したばかりなので、VB6標準のスクロールバーからのメリットが分かっていません。
(殆ど同じ仕様に見える。調査します)

で、これに乗り換えるという選択肢も考えてはいますが、あまりコントロールを増やしたくない
(他機へのインストール)のと技術的疑問からもう少しだけ粘ってみます。

ご指摘ありがとうございました。

投稿時間:2005/08/27(Sat) 16:03
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re^3: スクロールバーの点滅をなくす
HScrollBarをもうひとつ貼り付けて、LeftやTopを10000とか-10000にして
フォームに表示されないようにしてみてはどうでしょうか?

投稿時間:2005/08/29(Mon) 09:51
投稿者名:ダンボ
URL :
タイトル:
Re^4: スクロールバーの点滅をなくす
LESIAさん、いつもありがとうございます。

> HScrollBarをもうひとつ貼り付けて、LeftやTopを10000とか-10000にして
> フォームに表示されないようにしてみてはどうでしょうか?

はい。笑っちゃうような(失礼)解法ですね。現実的な逃避策として取っておきます。

# HScrollBarをもうひとつ貼り付けてVisible=Falseまでは試してみたんですが、それは無意味だった。

投稿時間:2005/08/26(Fri) 23:24
投稿者名:Starfish
Eメール:
URL :
タイトル:
Re: スクロールバーの点滅をなくす

> ところで、自分で作成したそのプログラムの別フォームでは垂直スクロールバーが1個だけなのに点滅
して
> いないのです!!「そうそうこうしたいんだよ」と2つのフォームのコントロールやロジックを見比べ
ては
> 実験を繰り返しているのですが、核心に至りません。両方ともVB6標準のスクロールバーです。
> 検索した情報が正しければ、点滅しない方がおかしいのに。。。何かヒントを。

 ヒントをということなので、ヒントだけですが。

 2つのフォームで、TABキーを何度も押してみてください。

 又、検索した情報は正しいです。「フォーム上にHScrollまたは、VScrollのどれかだけがある場合」
です。もう一度、よく読んでください。

 

投稿時間:2005/08/29(Mon) 12:50
投稿者名:ダンボ
URL :
タイトル:
Re^2: スクロールバーの点滅をなくす
Starfishさん、いつもありがとうございます

>  2つのフォームで、TABキーを何度も押してみてください。

・点滅していなかったフォームの方でも垂直スクロールバーの点滅が始まりました。
・点滅していたフォームの方は変化なしで水平スクロールバーの点滅中です。

ところで、「点滅していたフォーム」の方でも下記の連続動作をさせると水平スクロールバーは点滅しなくなりま
した。
(1)CommandButtonのVisbleをTrueにする(このときHScrollBarは非表示)。
(2)CommandButtonを押すと、その手続きの中で自らを非表示にしHScrollBarを表示させる。

つまり、CommandButtonがフォーカスを握ったまま非表示になるからHScrollBarが点滅しないのかな?

点滅していなかったフォームの方は、他の都合上、VScrollBarを除くすべてのコントロールのMouseMove
イベントで、あるピクチャボックスへのSetFocus命令を出しています。違いはこれだね。

ということで点滅していたフォームの方にも主要コントロールのMouseMoveイベントにMe.SetFocusを
入れて実験すると、、、
・一応点滅はやめるが、点燈しっぱなし。MouseMoveタイミングかなと思うが?
・主要コントロール上をマウスが動くと、水平スクロールバーがちらつく。

もう少しですね!

投稿時間:2005/08/29(Mon) 19:45
投稿者名:ダンボ
URL :
タイトル:
【解決】スクロールバーの点滅をなくす
みなさんどうもありがとうございました。

結局次のようにして解決させることにしました。
・フォーカスを持ち得る別なコントロールが必要。
・MMControlは設定によりVisibleでも透明かつ枠線無しにできる。
なので「透明なMMControlをずっと表示させておく」事にしました。

ちょっとなんだかなあの気持ちも残りますけど、それが標準スクロールバーの仕様なんだからしょうがないと。