スクロールバーのスライダ位置等を取得          <TOP>


スクロールバーのスライダ位置および範囲を取得します。

GetScrollRange スクロール範囲を取得

GetScrollPos スクロールバーのスライダ位置を取得

 

例では、EditBoxの垂直スクロールバーのスライダ位置と範囲を取得しています。

  

 

'================================================================
'= スクロールバーのスライダ位置等を取得
'=    (GetScrollPos.bas)
'================================================================
#include "Windows.bi"

' スクロール範囲を取得
Declare Function Api_GetScrollRange& Lib "user32" Alias "GetScrollRange" (ByVal hWnd&, ByVal nBar&, lpMinPos&, lpMaxPos&)

' スクロールバーのスライダ位置を取得
Declare Function Api_GetScrollPos& Lib "user32" Alias "GetScrollPos" (ByVal hWnd&, ByVal nBar&)

#define SB_HORZ 0                       '標準スクロールバーの水平
#define SB_VERT 1                       '標準スクロールバーの垂直
#define SB_CTL 2                        'スクロールバーコントロールの情報を設定
#define vbCrLf (Chr$(13) & Chr$(10))    'キャリッジリターンとラインフィード(\r\n)

Var Shared Edit1 As Object
Var Shared Text1 As Object

Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Function GetScrollbarPos(ByVal hWnd As Long, ByVal Flag As Long) As Long
Function GetScrollbarPos(ByVal hWnd As Long, ByVal Flag As Long) As Long
    Var Ret As Long
    
    Ret = Api_GetScrollPos(Edit1.GethWnd, Flag)

    If Ret <> 0 Then
        GetScrollbarPos = Ret
    Else
        GetScrollbarPos = 0
    End If
End Function

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var txt As String
    Var i As Long

    For i = 1 To 100
        If i < 100 Then
            txt = txt & Right$(Str$(1000 + i), 3) & vbCrLf
        Else
            txt = txt & Right$(Str$(1000 + i), 3)
        End If
    Next
    Edit1.SetWindowText txt
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var sMax As Long
    Var sMin As Long
    Var nPos As Long
    Var Ret As Long

    nPos = GetScrollbarPos(Edit1.GethWnd, SB_VERT)

    Ret = Api_GetScrollRange(Edit1.GethWnd, SB_VERT, sMin, sMax)
    Text1.SetWindowText Str$(sMin) & "-" & Str$(nPos) & "-" & Str$(sMax)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End