
No.3ベストアンサー
- 回答日時:
先に回答されている方と同じ理由でやはりピクチャーボックスでの方法です。
'*******************************************************
Option Explicit
Dim OB As Object '表示オブジェクト
Dim FN As String 'フォント名
Dim FX As Integer 'フォントの横サイズ
Dim FY As Integer 'フォントの縦サイズ
Dim cx As Long '表示X座標
Dim cy As Long '表示Y座標
Private Const DEFAULT_CHARSET = 1
Private Const OUT_DEFAULT_PRECIS = 0
Private Const DEFAULT_QUALITY = 0
Private Const DEFAULT_PITCH = 0
Private Const FF_DONTCARE = 0
Private Const LF_FACESIZE = 32
Private Type Size
cx As Long
cy As Long
End Type
Private 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
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long
Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hdc As Long, ByVal lpsz As String, ByVal cbString As Long, lpSize As Size) As Long
Private Sub Command1_Click()
Dim fnt As String
Dim FntSizeX As Integer
Dim FntSizeY As Integer
fnt = "MS 明朝"
FntSizeX = 12
FntSizeY = 12
With Picture1
.FontName = fnt
.FontSize = FntSizeX
Picture1.Print "testてすと"
End With
Set OB = Picture1
'Set OB = Printer
'OB.Print "" 'Printerの場合初めにダミーを印刷しないと印刷されない
FN = fnt
FX = 12: FY = 12: cx = 0: cy = 500: PrintText "testてすと"
FX = 12: FY = 24: cx = 0: cy = 1000: PrintText "testてすと" '縦倍角
FX = 24: FY = 12: cx = 0: cy = 1500: PrintText "testてすと" '横倍角
End Sub
Sub PrintText(text As String)
Dim LF As LOGFONT
Dim IX As Integer
Dim TempByteArray() As Byte
Dim ByteArrayLimit As Long
Dim OldFT As Long
Dim NewFT As Long
Dim rtn As Long
Dim hdc As Long
Dim sz As Size
Dim TppX As Long
Dim TppY As Long
Dim PX As Long
Dim PY As Long
hdc = OB.hdc
If (OB Is Printer) Then
TppX = Printer.TwipsPerPixelY
TppY = Printer.TwipsPerPixelX
Else
TppX = Screen.TwipsPerPixelY
TppY = Screen.TwipsPerPixelX
End If
PX = cx / TppX
PY = cy / TppY
With LF
.lfEscapement = 0 '文字の回転角度(角度*10)
.lfHeight = FY * 20 / TppX '文字の高さ
.lfWidth = FX * 10 / TppY '文字の幅
.lfWeight = 400 '文字の太さ
.lfItalic = False '斜体
.lfUnderline = False '下線
.lfStrikeOut = False '取り消し線
.lfCharSet = DEFAULT_CHARSET
.lfOutPrecision = OUT_DEFAULT_PRECIS
.lfClipPrecision = OUT_DEFAULT_PRECIS
.lfQuality = DEFAULT_QUALITY
.lfPitchAndFamily = DEFAULT_PITCH Or FF_DONTCARE
TempByteArray = StrConv(FN, vbFromUnicode)
ByteArrayLimit = UBound(TempByteArray)
For IX = 0 To ByteArrayLimit
.lfFaceName(IX) = TempByteArray(IX)
Next
End With
NewFT = CreateFontIndirect(LF)
OldFT = SelectObject(hdc, NewFT)
'うまく表示されない場合、下記のコメントをはずす
'GetTextExtentPoint32 hdc, text, LenB(StrConv(text, vbFromUnicode)), sz
TextOut hdc, PX, PY, text, LenB(StrConv(text, vbFromUnicode))
rtn = SelectObject(hdc, OldFT)
rtn = DeleteObject(NewFT)
End Sub
'*******************************************************
フォームにpicturebox と commandbuttonを貼り付けて上記コードを貼り付けて実行してみてください
CreateFontIndirect APIを使用しています。
説明は省きますが、検索すればたくさんあると思います。
No.2の方と同じ様なもので回転も出来ます。
set OB = picture1 を set OB = printer にすればPrinterにも同じ様に印刷されるので、
イメージ表示の感じになるのではないでしょうか?
今回は倍角についての質問でしたので、斜体、下線、太字等の設定は固定にしてあります。
No.2
- 回答日時:
CreateFont APIは使えば縦長、横長、回転した文字を
ピクチャーボックスで表示できるので
ピクチャーボックスを使ってみてはどうでしょうか?
hDCを取得できればラベルやテキストボックスでも
CreateFont APIで可能かもしれません。
No.1
- 回答日時:
>ラベルやテキストボックスに横倍角や縦倍角の文字を表示することは可能でしょうか。
概念から説明しましょう。
VBのラベルは、WINDOWSは絵として認識しています。
VBのテキストボックスはEDITクラスを持ったオブジェクトを、VBでコンポーネント化したものです。
VBのラベルはハンドルを持たずに、フォームに直接描かれていると思いました。
(現在OS再インストールしたばかりで、未確認です)
これが何を意味するかというと、ラベルはVBの仕様以上のことができないということです。ですのでラベルだけでの制御では無理だと思います。
EDITボックスは、プロパティで指定されているフォントで、文字コードを表現しているだけです。
私の場合、思いつく実現方法として、二つあると思います。
※1.フォントを登録する
これなら、ラベルでもテキストボックスでも可能です。
たしかVBでオリジナルのスクリーンフォントの登録ができたと思います・・・が自信はありません。
遠い記憶で、同僚がやっていたような気が・・・
※2.ピクチャに描画し、縦か横を倍サイズ領域のピクチャボックスに転送する。
ここの掲示板の履歴に、PaintPicture/StretchBlt/BitBltなどの画像転送サンプルが転がっていると思います。
(こっちの方が実用的かな?)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 縦書きテキストボックスの表示"ー"を90度回転して”|”にするにはどうすればいいですか? 2 2023/08/24 15:53
- Android(アンドロイド) 海外のAndroid 端末の場合、日本語全角は、どう表示されるのでしょうか? 1 2022/10/02 21:16
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Excel(エクセル) エクセルで年月日の桁数を揃えるには 7 2022/06/18 23:51
- インターネット広告・アフィリエイト Googlechrome 広告 消したい 2 2022/12/06 05:46
- Android(アンドロイド) Googleレンズ ドキュメントをスキャン 1 2022/10/31 12:11
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- Excel(エクセル) エクセルの数式で教えてください。 3 2022/10/25 10:52
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HPビルダー6,5で同一ページ...
-
EXCELのプロジェクト エクスプ...
-
Excel VBAにてご教授お願いしま...
-
(Excel 2003) マクロでワー...
-
ウォッチ式の文字数制限について
-
エクセルで図形のキャプション...
-
ウインドウを常に前に、常にア...
-
Notepad++のコメントの色を変え...
-
VB2005 Textboxの高さ変更
-
エクセル 画像のプロパティで縦...
-
VB2005 TextBoxで高さを変更し...
-
VB6.0 国際化対応について
-
ACCESSのラベル内データに下線...
-
javascriptまかせでフレーム中...
-
ラベルを表示したり非表示にし...
-
C# リッチテキストボックスの文...
-
時間の選択に関して
-
子Formからの得た値をtextBox...
-
VBA シートのボタン名を変更し...
-
「Columns("A:C")」の列文字を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ウォッチ式の文字数制限について
-
eclipseのデバッグ中に変数の値...
-
ラベルの文字列の長さが変わっ...
-
Vba テキストボックス文字を右...
-
ExcelVBA EnableプロパティがF...
-
VisualStudioのプロパティが表...
-
ラベルを表示したり非表示にし...
-
ラベルのスクロール(VB)
-
VB.NETでラベルの大きさってど...
-
Notepad++のコメントの色を変え...
-
Excel VBA ユーザーフォーム内...
-
三菱タッチパネル小数点以下表...
-
ラベル内の文字(Caption)を縦...
-
MATLABのグラフで軸目盛りのフ...
-
VBA:ユーザフォームのラベルの...
-
VB2005 TextBoxで高さを変更し...
-
C#初心者です。チェックボック...
-
スプレッドシートの列名変更の...
-
ACCESSのラベル内データに下線...
-
C# DataGridView特定セルの入力...
おすすめ情報