文字間隔の調整 <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