ページ 1 / 1
スクロールバー
Posted: 2008年8月14日(木) 16:03
by t_popopo
スクロールバーの使い方がわかりません。
RADツールで横スクロールバーを配置して、
それを実行、スクロールバーをドラッグして動かし、
そして離すと、一番左端に戻ってしまいます。
何かコードを入れなければいけないようなのですが、
まったくわかりません。誰か教えてください。
Re: スクロールバー
Posted: 2008年8月16日(土) 02:09
by 7
> スクロールバーの使い方がわかりません。
考えてみればスクロールバーってあまり使わないですし、ActiveBasicでの解説って読んだ覚えがないですね。
> そして離すと、一番左端に戻ってしまいます。
たしかスクロール範囲を設定してやるとそのようなことにはならなくなります。
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Dim hScrollBar As HWND
Dim si As SCROLLINFO
si.cbSize=SizeOf(SCROLLINFO)
si.fMask=SIF_RANGE Or SIF_POS Or SIF_PAGE
si.nPos=0
si.nMin=0
si.nMax=255
si.nPage=1
hScrollBar=GetDlgItem(hMainWnd,HScrollBar1)
SetScrollInfo(hScrollBar,SB_CTL,si,TRUE)
ActiveBasicでの解説読んだ覚えないし、全然更新しないのも心苦しいから久しぶりにABHelperでも更新するか...。
7さんへ
Posted: 2008年8月18日(月) 16:38
by 三毛CAT
このコードを入力しても左端に戻ってしまいますが??
バージョン4.24.00
Re: 7さんへ
Posted: 2008年8月20日(水) 22:25
by 7
> このコードを入力しても左端に戻ってしまいますが??
デバッグしてみたら確かに戻っちゃいましたね!( ̄□ ̄;)
レンジを設定するだけで大丈夫だったのはトラックバーだったかもしれません...。
面倒臭いながらも今度はちゃんとデバッグしながらコードを書きました。
Version 5.00.00 CP4
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Dim hScrollBar As HWND
' スクロールバーのレンジを設定
Function SetScrollRange(ByVal hWnd As HWND,ByVal nBar As Long,ByVal nMinPos As Long,ByVal nMaxPos As Long,ByVal bRedraw As Boolean) As Boolean
Dim si As SCROLLINFO
si.cbSize=SizeOf(SCROLLINFO)
si.fMask=SIF_RANGE
si.nMin=nMinPos
si.nMax=nMaxPos
Return SetScrollInfo(hWnd,nBar,si,bRedraw) As Boolean
End Function
' スクロールバーの位置(つまみの)を設定
Function SetScrollPos(ByVal hWnd As HWND,ByVal nBar As Long,ByVal nPos As Long,ByVal bRedraw As Boolean) As Boolean
Dim si As SCROLLINFO
si.cbSize=SizeOf(SCROLLINFO)
si.fMask=SIF_POS
si.nPos=nPos
Return SetScrollInfo(hWnd,nBar,si,bRedraw) As Boolean
End Function
' スクロールバーの位置(つまみの)を取得
Function GetScrollPos(ByVal hWnd As HWND,ByVal nBar As Long) As Long
Dim si As SCROLLINFO
si.cbSize=SizeOf(SCROLLINFO)
si.fMask=SIF_POS
GetScrollInfo(hWnd,nBar,si)
Return si.nPos
End Function
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
hScrollBar=GetDlgItem(hMainWnd,HScrollBar1)
SetScrollRange(hScrollBar,SB_CTL,0,255,True)
End Sub
Sub MainWnd_HScroll(nScrollCode As Long, nPos As Integer, hwndScrollBar As HWND)
Select Case hwndScrollBar
Case hScrollBar
Dim pos As Long
' 操作する前のつまみの位置
pos = GetScrollPos(hScrollBar,SB_CTL)
Select Case nScrollCode
Case SB_LINELEFT
' つまみの位置を -1
SetScrollPos(hScrollBar,SB_CTL,pos-1,True)
Case SB_LINERIGHT
' つまみの位置を +1
SetScrollPos(hScrollBar,SB_CTL,pos+1,True)
Case SB_PAGELEFT
' つまみの位置を -20
SetScrollPos(hScrollBar,SB_CTL,pos-20,True)
Case SB_PAGERIGHT
' つまみの位置を +20
SetScrollPos(hScrollBar,SB_CTL,pos+20,True)
Case SB_THUMBPOSITION , SB_THUMBTRACK
' つまみの位置をドラッグ位置に設定
SetScrollPos(hScrollBar,SB_CTL,nPos,True)
End Select
' 再描写してやらないといけない
InvalidateRect(hScrollBar,ByVal NULL,True)
UpdateWindow(hScrollBar)
End Select
End Sub
スクロールバーは面倒ですね。
エディットボックスを自作する時にちょっとお世話になったぐらいでしょうか...。
最近はWindows Mobile向けにプログラミングしてるんですが、初めてプログラミングした時にも挫折したMFCが今やっても飲み込めず、仕方ないからActiveBasicで覚えたAPIでゴリゴリ書いてます。
Windows Mobile向けのプログラミングにも役立つActiveBasic万歳(笑)(笑)
ありがとうございます
Posted: 2008年9月15日(月) 16:08
by t_popopo
ありがとうございました。さっそく使ってみます。