掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
emfファイルのフォントサイズ変更 (ID:101687)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
オショウ様、K.J.K.様のアドバイスを元に連休中に少しトライしてみました。 ⇒ 下記を参考にフォント高さを変更することには成功しました。 http://nienie.com/~masapico/api_GetEnhMetaFileBits.html http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200708/07080129.txt ◆ しかし、文字の長さ(矩形表示領域?)が変更されず、文字高さを小さくすると 文字と文字の間隔が広くなり、逆に大きくすると文字が重なりだします。 Type EMREXTTEXTOUT pEmr As EMR rclBounds As RECTL iGraphicsMode As Long exScale As Double eyScale As Double emrtext As emrtext End Type Type EXTLOGFONT elfLogFont As LOGFONT elfFullName(LF_FULLFACESIZE) As Byte elfStyle(LF_FACESIZE) As Byte elfVersion As Long elfStyleSize As Long elfMatch As Long elfReserved As Long elfVendorId(ELF_VENDOR_SIZE) As Byte elfCulture As Long elfPanose As PANOSE End Type Type EMREXTCREATEFONTINDIRECT pEmr As EMR ihFont As Long elfw As EXTLOGFONT End Type Const EMR_EXTCREATEFONTINDIRECTW = 82 Const EMR_EXTTEXTOUTW = 84 While SrcIdx < BufSize 'レコードのヘッダを取得 MoveMemory RecordHeader, SrcData(SrcIdx), Len(RecordHeader) If RecordHeader.iType = EMR_EXTCREATEFONTINDIRECTW Then MoveMemory E_CREATEFONTINDIRECT, SrcData(SrcIdx), Len(E_CREATEFONTINDIRECT) 'フォント高さを半減 E_CREATEFONTINDIRECT.elfw.elfLogFont.lfHeight = E_CREATEFONTINDIRECT.elfw.elfLogFont.lfHeight * sScale 'E_CREATEFONTINDIRECT.elfw.elfLogFont.lfWidth ・・ は個々の文字幅! '新規メタファイル用バッファに設定 MoveMemory DestData(DestIdx), E_CREATEFONTINDIRECT, Len(E_CREATEFONTINDIRECT) DestIdx = DestIdx + RecordHeader.nSize ElseIf RecordHeader.iType = EMR_EXTTEXTOUTW Then MoveMemory E_TEXTOUT, SrcData(SrcIdx), RecordHeader.nSize 'Len(E_TEXTOUT)ではカタカナが1文字長さで固まる With E_TEXTOUT.rclBounds Debug.Print .Left, .Top, .Right, .Bottom '0 0 -1 -1 のみ End With '新規メタファイル用バッファに設定 MoveMemory DestData(DestIdx), E_TEXTOUT, RecordHeader.nSize 'Len(E_TEXTOUT)ではカタカナが1文字長さで固まる DestIdx = DestIdx + RecordHeader.nSize '文字描画レコードでない場合 → そのまま複製 Else MoveMemory DestData(DestIdx), SrcData(SrcIdx), RecordHeader.nSize DestIdx = DestIdx + RecordHeader.nSize End If SrcIdx = SrcIdx + RecordHeader.nSize Wend ◆ 矩形領域はEMREXTTEXTOUTW構造体のrclBoundsかなとも思ったのですが、入っているデータは With E_TEXTOUT.rclBounds Debug.Print .Left, .Top, .Right, .Bottom '0 0 -1 -1 のみ End With でした。 また、上にもコメント入れていますがEMR_EXTTEXTOUTWの際には、 MoveMemory E_TEXTOUT, SrcData(SrcIdx), Len(E_TEXTOUT) ではカタカナが1文字長さの矩形領域に 重なって表示されます。 →漢字は正しく表示されます。 APIの扱いがよく判っていない為だと思いますが、お気づきの点がありましたらご教授頂ければ幸いです。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.