デバイスコンテキストの文字色を変更          <TOP>


TextOut 文字を描画
SetTextColor デバイスコンテキストの文字色を変更
SetBkMode バックグラウンドの塗りつぶしモード設定
GetDC 指定されたウィンドウのデバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストを解放
 

例では、テキストボックス内に描画する文字の色を変えています。

 

'================================================================
'= デバイスコンテキストの文字色を変更
'=    (SetTextColor.bas)
'================================================================
#include "Windows.bi"

#define TRANSPARENT 1                   '背景色を設定しない

' 文字を描画
Declare Function Api_TextOut& Lib "gdi32" Alias "TextOutA" (ByVal hDC&, ByVal nXStart&, ByVal nYStart&, ByVal lpString$, ByVal cbString&)

' デバイスコンテキストの文字色を変更
Declare Function Api_SetTextColor& Lib "gdi32" Alias "SetTextColor" (ByVal hDC&, ByVal crColor&)

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

' 指定されたウィンドウのデバイスコンテキストのハンドルを取得
Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&)

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

Var Shared Text1 As Object
Var Shared Timer1 As Object

Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 12
Timer1.Attach GetDlgItem("Timer1")

Var Shared hDC As Long
Var Shared txt As String

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    hDC = Api_GetDC(Text1.GethWnd)
    txt = "tokovalue"

    Randomize Time
    Timer1.SetInterval 100
    Timer1.Enable -1
End Sub

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

    Ret = Api_SetTextColor(hDC, RGB(Rnd(1) * 255, Rnd(1) * 255, Rnd(1) * 255))
    Ret = Api_SetBkMode(hDC, TRANSPARENT)
    Ret = Api_TextOut(hDC, 5, 0, txt, Len(txt))
End Sub

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

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

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