タブ文字を含むテキストを出力          <TOP>


タブ文字を含むテキストを出力します。

GetSysColor システムの背景色を取得
SetBkColor デバイスコンテキストの背景色を設定
TabbedTextOut タブ文字を含むテキストを出力する
GetDC デバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストを解放
 

例では、システムの3Dオブジェクト表面色(Buttonの色)を取得し、フォームの色としています。

タブ位置確認のためラインを引いています。

 

'================================================================
'= タブ文字を含むテキストを出力
'=    (TabbedTextOut.bas)
'================================================================
#include "Windows.bi"

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

' デバイスコンテキストの背景色を設定
Declare Function Api_SetBkColor& Lib "gdi32" Alias "SetBkColor" (ByVal hDC&, ByVal crColor&)

' タブ文字を含むテキストを出力する
Declare Function Api_TabbedTextOut& Lib "user32" Alias "TabbedTextOutA" (ByVal hDC&, ByVal x&, ByVal y&, ByVal lpString$, ByVal nCount&, ByVal nTabPositions&, lpnTabStopPositions&, ByVal nTabOrigin&)

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

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

#define COLOR_BTNFACE 15                '3Dオブジェクトの表面色

Var Shared Button1 As Object

Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

Var Shared hDC As Long

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var BkColor As Long
    Var Ret As Long

    'デバイスコンテキスト取得
    hDC = Api_GetDC(GethWnd)

    'システムの3Dオブジェクトの表面色取得
    BkColor = Api_GetSysColor(COLOR_BTNFACE)

    '背景色を設定
    Ret = Api_SetBkColor(hDC, BkColor)
    SetBackColor BkColor
    Cls
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var TabStop(3) As Long
    Var mStr As String
    Var Ret As Long

    'タブストップを設定
    TabStop(0) = 70
    TabStop(1) = 130
    TabStop(2) = 210
    TabStop(3) = 280

    '1行目
    mStr = "0" & Chr$(9) & Trim$(Str$(TabStop(0))) & Chr$(9) & Trim$(Str$(TabStop(1))) & Chr$(9) & Trim$(Str$(TabStop(2))) & Chr$(9) & Trim$(Str$(TabStop(3)))
    Ret = Api_TabbedTextOut(hDC, 0, 20, mStr, Len(mStr), 4, TabStop(0), 0)

    '2行目
    mStr = "Tabbed" & Chr$(9) & "Text" & Chr$(9) & "Out" & Chr$(9) & "Width" & Chr$(9) & "Height"
    Ret = Api_TabbedTextOut(hDC, 0, GetTextHeight(mstr) + 20, mStr, Len(mStr), 4, TabStop(0), 0)

    For x = 0 To 3
        Line(TabStop(x), 0)-(TabStop(x), 140),, 1
    Next
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_QueryClose edecl ()
Sub MainForm_QueryClose()
    Ret = Api_ReleaseDC(GethWnd, hDC)
    End
End Sub

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