テキストボックスの背景色を設定          <TOP>


FillRect ブラシで矩形領域を塗りつぶす
CreateSolidBrush ソリッドカラーで論理ブラシを作成
SetBkMode バックグラウンドの塗りつぶしモード設定
DrawText 文字列を指定領域に出力
GetDC デバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストを解放


例では、テキストボックスを金色に設定するとともに、そこに描画する文字列の位置なども設定しています。

 

'================================================================
'= テキストボックスの背景色を設定
'=    (TextBoxBackColor.bas)
'================================================================
#include "Windows.bi"

Type RECT
    Left   As Long
    Top    As Long
    Right  As Long
    Bottom As Long
End Type

' ブラシで矩形領域を塗りつぶす
Declare Function Api_FillRect& Lib "user32" Alias "FillRect" (ByVal hDC&, ByRef r As RECT, ByVal hBrush&)

' ソリッドカラーで論理ブラシを作成
Declare Function Api_CreateSolidBrush& Lib "gdi32" Alias "CreateSolidBrush" (ByVal crColor&)

' バックグラウンドの塗りつぶしモード設定
Declare Function Api_SetBkMode& Lib "gdi32" Alias "SetBkMode" (ByVal hDC&, ByVal iBkMode&)

' 文字列を指定領域に出力
Declare Function Api_DrawText& Lib "user32" Alias "DrawTextA" (ByVal hDC&, ByVal lpStr$, ByVal nCount&, lpRect As RECT, ByVal wFormat&)

' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得
Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&)

' デバイスコンテキストを解放
Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&)

#define TRANSPARENT 1                   '背景色を設定しない
#define OPAQUE 2                        '背景色を設定する
#define DT_BOTTOM &H8                   '長方形の下辺にテキストを揃える。DT_SINGLELINEと同時に指定する
#define DT_CENTER &H1                   'テキストを水平方向に中央揃えで表示します。
#define DT_END_ELLIPSIS &H8000          '指定した長方形領域にテキストが収まらない場合、テキストの最後を(…)に置き換える
#define DT_LEFT &H0                     'テキストを左揃え
#define DT_PATH_ELLIPSIS &H4000         '指定した長方形領域にテキストが収まらない場合、テキストの途中を(…)に置き換える
#define DT_RIGHT &H2                    'テキストを右揃え
#define DT_TOP &H0                      '上揃え。DT_SINGLELINEと同時に指定する必要がある
#define DT_SINGLELINE &H20              'テキストを改行せず、一行で表示
#define DT_VCENTER &H4                  'テキストを垂直方向の中央揃え。DT_SINGLELINEと同時に指定する必要がある
#define DT_WORDBREAK &H10               'テキストを複数行で表示。折り返しは自動的に行われる

Var Shared Text1 As Object
Var Shared Radio(8) As Object
Var Shared Button1 As Object

Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
For i = 0 To 8
    Radio(i).Attach GetDlgItem("Radio" & Trim$(Str$(i + 1))) : Radio(i).SetFontSize 14
Next
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Function Index bdecl () As Integer
Function Index()
    Index = Val(Mid$(GetDlgRadioSelect("Radio1"), 6)) - 1
End Function

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var hDC As Long
    Var colBrush As Long
    Var rct As RECT
    Var txt As String
    Var wFormat As Long
    Var Ret As Long

    txt = "C:\Program Files\Microsoft Office\OFFICE11\Excel.exe"

    hDC = Api_GetDC(Text1.GethWnd)
    colBrush = Api_CreateSolidBrush(RGB(255, 215, 0))

    rct.Top = 0
    rct.Left = 0
    rct.Right = Text1.GetWidth - 4
    rct.Bottom = Text1.GetHeight - 4

    Ret = Api_FillRect(hDC, rct, colBrush)
    Ret = Api_SetBkMode(hDC, TRANSPARENT)

    Select Case Index
        Case 0
            wFormat = DT_SINGLELINE Or DT_BOTTOM
        Case 1
            wFormat = DT_CENTER
        Case 2
            wFormat = DT_END_ELLIPSIS
        Case 3
            wFormat = DT_LEFT
        Case 4
            wFormat = DT_PATH_ELLIPSIS
        Case 5
            wFormat = DT_RIGHT
        Case 6
            wFormat = DT_SINGLELINE Or DT_TOP
        Case 7
            wFormat = DT_SINGLELINE Or DT_VCENTER
        Case 8
            wFormat = DT_WORDBREAK
    End Select

    Ret = Api_DrawText(hDC, txt, Len(txt), rct, wFormat)

    Ret = Api_ReleaseDC(Text1.GethWnd, hDC)
End Sub

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