ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月27日(土) 18:26

全ての表示時間は UTC+09:00 です




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - スクロールバー・コントロールについて。
作成者 メッセージ
  記事の件名:   引用付きで返信する
"コマンドボタンからのクリックで SetScrollInfo(hVScrollBar1, SB_CTL, vertSi, TRUE)を再び実行するとその瞬間キチンと無効化される"のなら、と
今度はクリエイト部の中でSetScrollInfoを二度書いてみたのですが、
コード:
' 
'●クリエイト・イベント 
' 
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT) 

'スクロールバーの位置と大きさを補正 

 hVScrollBar1=GetDlgItem(hMainWnd,VScrollBar1) 
 MoveWindow(hVScrollBar1,64,32, 32,screenYV,FALSE)      

 vertSi.cbSize = SizeOf(SCROLLINFO) 
 vertSi.fMask = SIF_POS Or SIF_RANGE Or SIF_PAGE Or SIF_DISABLENOSCROLL 
 vertSi.nMin = 0 
 vertSi.nMax = worldYV 
 vertSi.nPos = 0 
 vertSi.nPage = screenYV+1 
 SetScrollInfo(hVScrollBar1, SB_CTL, vertSi, TRUE) 

 SetScrollInfo(hVScrollBar1, SB_CTL, vertSi, TRUE) '<---繰り返して書いてみる。

End Sub 
ただしこれでもダメ。。
投稿記事 Posted: 2009年1月26日(月) 02:18
  記事の件名:  何故?  引用付きで返信する
とりあえずRADの「無効」のチェックで無効化されるのなら
それと同じことをクリエイト部の中でも出来ないかと、
コード:
'
'●クリエイト・イベント
'
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)

'スクロールバーの位置と大きさを補正

 hVScrollBar1=GetDlgItem(hMainWnd,VScrollBar1)
 MoveWindow(hVScrollBar1,64,32, 32,screenYV,FALSE)     

 vertSi.cbSize = SizeOf(SCROLLINFO)
 vertSi.fMask = SIF_POS Or SIF_RANGE Or SIF_PAGE Or SIF_DISABLENOSCROLL
 vertSi.nMin = 0
 vertSi.nMax = worldYV
 vertSi.nPos = 0
 vertSi.nPage = screenYV+1
 SetScrollInfo(hVScrollBar1, SB_CTL, vertSi, TRUE)


'スクロールバーのスタイルにWS_DISABLEDを強引にセットしてみる。
 SetWindowLong(hVScrollBar1,GWL_STYLE,GetWindowLong(hVScrollBar1,GWL_STYLE) Or WS_DISABLED)
 SetWindowPos(hVScrollBar1,NULL,0,0,0,0,SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER Or SWP_FRAMECHANGED)

End Sub
とやってみたんですが、これでも変わらず。。
投稿記事 Posted: 2009年1月26日(月) 00:53
  記事の件名:  スクロールバー・コントロールについて。  引用付きで返信する
スクロールバー・コントロールについて教えて下さい。

worldXV
□□□□□□□□
□□□□□□□□
□□□□□□□□
□□□□□□□□
□□□□□□□□ worldYV
□□□□□□□□
□□□□□□□□
□□□□□□□□

screenXV
■■■■
■■■■
■■■■ screenYV
■■■■

上図のようにworldXV,YVで用意されたビットマップの一部を
下のscreenXV,YVで示された領域にクリップ表示したいとします。
このときscreenXV,YVの各辺にそれぞれヨコ、タテのスクロールバー・
コントロールがあり、それを操作することでビットマップを隅々まで
見られるようにしたいと思います。(とりあえずここでは簡単化のため
X方向成分は考えずY方向についてだけ考えます。)

screenYVにあるタテ・スクロールバーにセットする情報
SCROLLINFO構造体の「vertSi」を以下のようにセットすると上手く出来ました。
vertSi.cbSize = SizeOf(SCROLLINFO)
vertSi.fMask = SIF_POS Or SIF_RANGE Or SIF_PAGE Or SIF_DISABLENOSCROLL
vertSi.nMin = 0
vertSi.nMax = worldYV
vertSi.nPos = 0
vertSi.nPage = screenYV+1

そして
SetScrollInfo(hVScrollBar1, SB_CTL, vertSi, TRUE)
でスクロールバーを更新表示。

ここまでは良かったのですが、
つまづいたのは、もしworldYVとscreenYVが同じか、もしくはworldYVの
方が小さいケースの時です。

この時スクロールの必要はないのでスクロールバーは無効状態に
なって欲しいのですが(※SIF_DISABLENOSCROLLをセットしてあるので消えずに)
同様に実行すると
"可動範囲がゼロ"のギチギチ状態のスクロールバーが代わりに表示されてしまいます。
普通このようなスクロールバーを見ることはないので明らかにおかしいというのは
分かるのですが、ただしどうすれば良いか分からず。
あれこれ考えつつRADツールのこのスクロールバーのスタイル設定で予め
「無効」にチェックを入れてみたりもしたんですがこれも良い方法ではないと
分かり。。(それをチェックすると今度は常時無効化されて表示されてしまう)
どうすればいいか悩んでいます。

暫くあれこれ試していて、不思議なことに、遊びでくっつけていたコマンドボタンからの
クリックで SetScrollInfo(hVScrollBar1, SB_CTL, vertSi, TRUE)を再び実行すると
その瞬間キチンと無効化されるんです。
全く同じ命令を初回表示時にもやっているんですが。。

 簡略化したプログラムを下に書いておきます。

スクロールバーコントロールの初回無効化表示について、お気づきのことが
ありましたら是非教えて下さい。
投稿記事 Posted: 2009年1月22日(木) 22:50

全ての表示時間は UTC+09:00 です


ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean