スクロールバーをフラットスタイルに(T)            <TOP>


リストボックス内のスクロールバーをフラット(ENCARTA_MODE・FLAT_MODE)に。

FlatSB_SetScrollPos フラットスクロールバーの位置を設定 

FlatSB_SetScrollProp フラットスクロールバーのInitializeFlatSBが呼ばれたかどうかを設定

InitializeFlatSB フラットスクロールバーを初期化

UninitializeFlatSB フラットスクロールバーを初期化しない(標準スクロールバーに戻す)

 

通常モード

ENCARTA_MODE


FLAT_MODE(スクロールバー上に矢印を持っていくと▲▼およびスライドハンドルの色が変わります)

 

'================================================================
'= スクロールバーをフラットスタイルに(T)
'=    (FlatScrollBar.bas)
'================================================================
#include "Windows.bi"

' フラットスクロールバーの位置を設定
Declare Function Api_FlatSB_SetScrollPos& Lib "Comctl32" Alias "FlatSB_SetScrollPos" (ByVal hWnd&, ByVal code&, ByVal nPos&, ByVal fRedraw&)

' フラットスクロールバーのInitializeFlatSBが呼ばれたかどうかを設定
Declare Function Api_FlatSB_SetScrollProp& Lib "Comctl32" Alias "FlatSB_SetScrollProp" (ByVal hWnd&, ByVal index&, ByVal newValue&, ByVal fRedraw&)

' フラットスクロールバーを初期化
Declare Function Api_InitializeFlatSB& Lib "Comctl32" Alias "InitializeFlatSB" (ByVal hWnd&)

' フラットスクロールバーを初期化しない(標準スクロールバーに戻す)
Declare Function Api_UninitializeFlatSB& Lib "Comctl32" Alias "UninitializeFlatSB" (ByVal hWnd&)

#define WSB_PROP_VSTYLE &H100           '垂直スクロールバーの外観を変える
 
#define FSB_ENCARTA_MODE 1
#define FSB_FLAT_MODE 2
#define FSB_REGULAR_MODE 0

#define SB_VERT 1

Var Shared Mainform As Object
Var Shared List1 As Object
Var Shared Button1 As Object
Var Shared Radio1 As Object
Var Shared Radio2 As Object
Var Shared Timer1 As Object

Mainform.Attach GethWnd
List1.Attach GetDlgItem("List1") : List1.SetFontSize 14
Radio1.Attach GetDlgItem("Radio1") : Radio1.SetFontSize 14
Radio2.Attach GetDlgItem("Radio2") : Radio2.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14
Timer1.Attach GetDlgItem("Timer1")

Var Shared Flag As Integer
Var Shared sFlag As Integer

'================================================================
'=
'================================================================
Declare Sub Mainform_Start edecl ()
Sub Mainform_Start()
    Var i As Integer

    Flag = 1
    sFlag = 0

    List1.Resetcontent
    For i = 1 To 100
        List1.AddString "ListItem" & Right$(Str$(1000 + i),3)
    Next

    Timer1.SetInterval 10
    Timer1.Enable -1
End Sub

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

    If Flag = 0 Then
        Ret = Api_UninitializeFlatSB(List1.GethWnd)
        Button1.SetWindowText "フラットスタイル"
        Radio1.EnableWindow -1
        Radio2.EnableWindow -1
    Else
        Ret = Api_InitializeFlatSB(List1.GethWnd)
        If sFlag = 0 Then
            Ret = Api_FlatSB_SetScrollProp(List1.GethWnd, WSB_PROP_VSTYLE, FSB_ENCARTA_MODE, True)
        Else
            Ret = Api_FlatSB_SetScrollProp(List1.GethWnd, WSB_PROP_VSTYLE, FSB_FLAT_MODE, True)
        End If

        Button1.SetWindowText "ノーマルスタイル"
        If Radio1.GetCheck = 0 Then Radio1.EnableWindow 0
        If Radio2.GetCheck = 0 Then Radio2.EnableWindow 0
    End If

    Flag = Flag - 1
    Flag = Abs(Flag)
End Sub

'================================================================
'=
'================================================================
Declare Sub Timer1_Timer edecl ()
Sub Timer1_timer()
    Var TopIdx As Long
    Var Ret As Long

    TopIdx = List1.GetTopIndex + 1
    Ret = Api_FlatSB_SetScrollPos(List1.GethWnd, SB_VERT, TopIdx, True)
End Sub

'================================================================
'=
'================================================================
Declare Sub Radio1_on edecl ()
Sub Radio1_on()
    sFlag = 0
End Sub

'================================================================
'=
'================================================================
Declare Sub Radio2_on edecl ()
Sub Radio2_on()
    sFlag = 1
End Sub

'================================================================
'=
'================================================================
Declare Sub Mainform_QueryClose edecl (Cancel%,ByVal Mode%)
Sub Mainform_QueryClose(Cancel%,ByVal Mode%)
    Var Ret As Long

    Ret = Api_UninitializeFlatSB(List1.GethWnd)
End Sub

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