文字間隔の調整          <TOP>


文字間隔をピクセル単位で調整します。

CreateFontIndirect 論理フォントを作成

SelectObject 指定されたデバイスコンテキストのオブジェクトを選択

GetTextCharacterExtra 文字間隔を取得

SetTextCharacterExtra 文字間隔を設定

TextOut 文字を描画

SetBkMode バックグラウンドの塗りつぶしモード設定
GetDC
デバイスコンテキストのハンドルを取得
ReleaseDC
デバイスコンテキストを解放
TRANSPARENT(1) 背景色を設定しない
 

文字間隔を0〜15ピクセルまで可変表示させています。

LF.lfCharSet = 128を入れない場合、日本語表示で文字化けをおこします。

文字間隔の取得
Ret = Api_GetTextCharacterExtra(hDC) で Ret に間隔値が入ります。 

 

'================================================================
'= 文字間隔の調整
'=    (SetTextCharacterExtra.bas)
'================================================================
#include "Windows.bi"

#define LF_FACESIZE 32

Type LOGFONT
    lfHeight         As Long
    lfWidth          As Long
    lfEscapement     As Long
    lfOrientation    As Long
    lfWeight         As Long
    lfItalic         As byte
    lfUnderline      As byte
    lfStrikeOut      As byte
    lfCharSet        As byte
    lfOutPrecision   As byte
    lfClipPrecision  As byte
    lfQuality        As byte
    lfPitchAndFamily As byte
    lfFaceName(LF_FACESIZE) As byte
End Type

' 論理フォントを作成
Declare Function Api_CreateFontIndirect& Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT)

' 指定されたデバイスコンテキストのオブジェクトを選択
Declare Function Api_SelectObject& Lib "gdi32" Alias "SelectObject" (ByVal hDC&, ByVal hObject&)

' 文字間隔を取得
Declare Function Api_GetTextCharacterExtra& Lib "gdi32" Alias "GetTextCharacterExtra" (ByVal hDC&)

' 文字間隔を設定
Declare Function Api_SetTextCharacterExtra& Lib "gdi32" Alias "SetTextCharacterExtra" (ByVal hDC&, ByVal nCharExtra&)

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

' バックグラウンドの塗りつぶしモード設定
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&)

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

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var hDC As Long
    Var txt As String
    Var lf As LOGFONT
    Var rFont As Long
    Var Ret As Long

    hDC = Api_GetDC(GethWnd)
    Ret = Api_SetBkMode(hDC, TRANSPARENT)

    lf.lfHeight = 14
    lf.lfCharSet = 128                        '日本語

    rFont = Api_CreateFontIndirect(lf)
    Ret = Api_SelectObject(hDC, rFont)

    For i = 0 To 15
        txt = "北海道札幌市白石区(間隔:" & Trim$(Str$(i)) & ")"
        Ret = Api_SetTextCharacterExtra(hDC, i)
        Ret = Api_TextOut(hDC, 0, i * 16, txt, Len(txt))
    Next

    Ret = Api_ReleaseDC(GethWnd, hDC)
End Sub

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