APIを使った印刷(文字列を指定角度で) <TOP>
CreateFontIndirect
論理フォントを作成
SelectObject 指定されたデバイスコンテキストのオブジェクトを選択
DeleteObject 論理オブジェクトを削除し、システムリソースを解放
CreateDC
指定されたデバイスのデバイスコンテキストを、指定された名前で作成
DeleteDC
指定されたデバイスコンテキストを削除
TextOut
文字を描画
StartDoc
印刷ジョブを開始
EndDoc
印刷ジョブを終了
StartPage
プリンタドライバがデータを受け取る準備をさせる
EndPage
1ページ書き込みの終了を通知
'================================================================ '= APIを使った印刷(文字列を指定角度で) '= (PrintRotatedText.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 As String * LF_FACESIZE End Type Type DOCINFO cbSize As Long lpszDocName As Long lpszOutput As Long lpszDatatype As Long fwType As Long 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_DeleteObject& Lib "gdi32" Alias "DeleteObject" (ByVal hObject&) ' 指定されたデバイスのデバイスコンテキストを、指定された名前で作成 Declare Function Api_CreateDC& Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName$, lpDeviceName As Any, ByVal lpOutput As Any, ByVal lpInitData As Any) ' 指定されたデバイスコンテキストを削除 Declare Function Api_DeleteDC& Lib "gdi32" Alias "DeleteDC" (ByVal hDC&) ' 文字を描画 Declare Function Api_TextOut& Lib "gdi32" Alias "TextOutA" (ByVal hDC&, ByVal nXStart&, ByVal nYStart&, ByVal lpString$, ByVal cbString&) ' 印刷ジョブを開始 Declare Function Api_StartDoc& Lib "gdi32" Alias "StartDocA" (ByVal hDC&, lpdi As DOCINFO) ' 印刷ジョブを終了 Declare Function Api_EndDoc& Lib "gdi32" Alias "EndDoc" (ByVal hDC&) ' プリンタドライバがデータを受け取る準備をさせる Declare Function Api_StartPage& Lib "gdi32" Alias "StartPage" (ByVal hDC&) ' 1ページ書き込みの終了を通知 Declare Function Api_EndPage& Lib "gdi32" Alias "EndPage" (ByVal hDC&) #define DESIREDFONTSIZE 12 Var Shared Text1 As Object Var Shared Edit1 As Object Var Shared Button1 As Object Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14 Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var OutString As String '回転文字列 Var lf As LOGFONT '回転フォントの構造体 Var hOldfont As Long '旧フォント情報を待避 Var hPrintDc As Long 'プリンタのデバイスコンテキスト Var hFont As Long '新規フォントのハンドル Var di As DOCINFO 'ドキュメント情報の構造体 Var Ret As Long '戻り値 '回転させる文字列 OutString = "Hello World" '文字サイズ・回転角度を設定 lf.lfEscapement = Val(Edit1.GetWindowText) * 10 lf.lfHeight = (DESIREDFONTSIZE * 16) '回転文字フォントを作成 hFont = Api_CreateFontIndirect(lf) di.cbSize = Len(di) di.lpszDocName = StrAdr("My Document" & Chr$(0)) 'デフォルトプリンタのデバイスコンテキストを作成 hPrintDc = Api_CreateDC(ByVal 0, "FinePrint", 0, 0) '印刷開始処理 Ret = Api_StartDoc(hPrintDc, di) Ret = Api_StartPage(hPrintDc) 'プリンタデバイスコンテキストを選択 hOldfont = Api_SelectObject(hPrintDc, hFont) '回転テキストを開始位置(1000, 1000)に送る Ret = Api_TextOut(hPrintDc, 1000, 1000, OutString, Len(OutString)) '以前のオブジェクトに戻る Ret = Api_SelectObject(hPrintDc, hOldfont) '通常のテキストを描画 Ret = Api_TextOut(hPrintDc, 1000, 1000, OutString, Len(OutString)) '印刷終了処理 Ret = Api_EndPage(hPrintDc) Ret = Api_EndDoc(hPrintDc) '解放処理 Ret = Api_DeleteDC(hPrintDc) Ret = Api_DeleteObject(hFont) End Sub '================================================================ '= 文字入力 + Enter '================================================================ Declare Sub Edit1_Change edecl () Sub Edit1_Change() Var EPos As Integer Ed$ = Edit1.GetWindowText EPos = InStr(Ed$, Chr$(13, 10)) If EPos <> 0 Then Ed$ = Mid$(Ed$, 1, EPos - 1) & Mid$(Ed$, EPos + 2) Edit1.SetWindowText Ed$ If Val(Ed$) < 0 Or Val(Ed$) > 360 Then Edit1.SetWindowText "" Edit1.SetFocus Else Button1.SetFocus End If End If End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End