システムカラーの変更          <TOP>


システムカラーを変更してみます。

GetSysColor システムカラーの取得

SetSysColors システムカラーの設定

 

変更する箇所をラジオボタンで指定すると、現在の色(Old/New)が表示されます。

 

色選択ボタン『ColorSelect』で色を選択すると、

Newにその色が表示されます。『SetSysColors』で選択した部分のシステムカラーが変更されます。『Return』で元の色に戻ります。

リソースプロパティでラジオボタンのイベントは全てRADIOOPL_ONに書き換えておきます。

また、Radio1〜Radio20のテキストは右端(見えない部分)に00〜20までの文字が付加されています。

 

 

'================================================================
'= システムカラーの変更
'=    (SetSysColors.bas) 
'================================================================
#include "Windows.bi"

' システムの背景色を取得
Declare Function Api_GetSysColor& Lib "user32" Alias "GetSysColor" (ByVal nIndex&)

' システムカラーを設定
Declare Function Api_SetSysColors& Lib "user32" Alias "SetSysColors" (ByVal nChanges&, lpSysColor&, lpColorValues&)

#define COLOR_SCROLLBAR 0            'スクロールバーの軸の色
#define COLOR_BACKGROUND 1           '壁紙なしのデスクトップの色
#define COLOR_ACTIVECAPTION 2        'アクティブウィンドウのタイトルバーの色
#define COLOR_INACTIVECAPTION 3      '非アクティブウィンドウのタイトルバーのテキストの色
#define COLOR_MENU 4                 'メニューの背景色
#define COLOR_WINDOW 5               'ウィンドウの背景色
#define COLOR_WINDOWFRAME 6          'ウィンドウの枠の色
#define COLOR_MENUTEXT 7             'メニュー内のテキストの色
#define COLOR_WINDOWTEXT 8           'ウィンドウ内のテキストの色
#define COLOR_CAPTIONTEXT 9          'アクティブウィンドウのタイトルバーのテキストの色
#define COLOR_ACTIVEBORDER 10        'アクティブウィンドウの境界の色
#define COLOR_INACTIVEBORDER 11      '非アクティブウィンドウの境界色
#define COLOR_APPWORKSPACE 12        'MDIアプリケーションの背景色
#define COLOR_HIGHLIGHT 13           'コントロール内における選択された項目の色
#define COLOR_HIGHLIGHTTEXT 14       'コントロール内における選択された項目のテキストの色
#define COLOR_BTNFACE 15             '3Dオブジェクトの表面色
#define COLOR_BTNSHADOW 16           '3Dオブジェクトの影の色
#define COLOR_GRAYTEXT 17            '淡色状態(無効状態)のテキストの色
#define COLOR_BTNTEXT 18             'プッシュボタンのテキストの色
#define COLOR_INACTIVECAPTIONTEXT 19 '非アクティブウィンドウのテキストの色
#define COLOR_BTNHIGHLIGHT 20        '3Dオブジェクトの最も明るい色

Var Shared Part As Long
Var Shared col As byte
Var Shared oldColor As Long
Var Shared rgbColor As Long

Var Shared Picture1 As Object
Var Shared Picture2 As Object
Picture1.Attach GetDlgItem("Picture1")
Picture2.Attach GetDlgItem("Picture2")

'================================================================
'=
'================================================================
Declare Sub Color_Set edecl ()
Sub Color_Set()
    Picture1.SetFillColor oldColor
    Picture1.Line(0, 0) - (Picture1.GetWidth - 1, Picture1.Getheight - 1), Pset,, Bf
    Picture2.SetFillColor rgbColor
    Picture2.Line(0, 0) - (Picture2.GetWidth - 1, Picture2.Getheight - 1), Pset,, Bf
End Sub


'================================================================
'=
'================================================================
Declare Sub Mainform_Start edecl ()
Sub Mainform_Start()
    col = 0
    oldColor = Api_GetSysColor(COLOR_SCROLLBAR)
    rgbColor = Api_GetSysColor(COLOR_SCROLLBAR)
    Color_Set
End Sub

'================================================================
'=
'================================================================
Declare Sub RadioOpl_on edecl ()
Sub RadioOpl_on()
    Var Radio As Object
    Radio.Attach GetFocus
    static Opl$

    col = Val(Right$(Radio.GetWindowText, 2))
    Select Case col
        Case 0
            Part = COLOR_SCROLLBAR
        Case 1
            Part = COLOR_BACKGROUND
        Case 2
            Part = COLOR_ACTIVECAPTION
        Case 3
            Part = COLOR_INACTIVECAPTION
        Case 4
            Part = COLOR_MENU
        Case 5
            Part = COLOR_WINDOW
        Case 6
            Part = COLOR_WINDOWFRAME
        Case 7
            Part = COLOR_MENUTEXT
        Case 8
            Part = COLOR_WINDOWTEXT
        Case 9
            Part = COLOR_CAPTIONTEXT
        Case 10
            Part = COLOR_ACTIVEBORDER
        Case 11
            Part = COLOR_INACTIVEBORDER
        Case 12
            Part = COLOR_APPWORKSPACE
        Case 13
            Part = COLOR_HIGHLIGHT
        Case 14
            Part = COLOR_HIGHLIGHTTEXT
        Case 15
            Part = COLOR_BTNFACE
        Case 16
            Part = COLOR_BTNSHADOW
        Case 17
            Part = COLOR_GRAYTEXT
        Case 18
            Part = COLOR_BTNTEXT
        Case 19
            Part = COLOR_INACTIVECAPTIONTEXT
        Case 20
            Part = COLOR_BTNHIGHLIGHT
    End Select

    oldColor = Api_GetSysColor(Part)
    rgbColor = Api_GetSysColor(Part)
    Color_Set
End Sub

'================================================================
'= 色選択ダイアログ
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    If ChooseColor(rgbColor) = 0 Then
        rgbColor = oldColor
        Exit Sub
    End If

    Color_Set
End Sub

'================================================================
'= システムカラーを変更する
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Var Ret As Long

    Ret = Api_SetSysColors(1, Part, rgbColor)
End Sub

'================================================================
'= 色を元へ戻す
'================================================================
Declare Sub Button3_on edecl ()
Sub Button3_on()
    Var Ret As Long

    Ret = Api_SetSysColors(1, Part, oldColor)
    rgbColor = oldColor
    Color_Set
End Sub

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