No.1
- 回答日時:
>ラベルやテキストボックスに横倍角や縦倍角の文字を表示することは可能でしょうか。
概念から説明しましょう。
VBのラベルは、WINDOWSは絵として認識しています。
VBのテキストボックスはEDITクラスを持ったオブジェクトを、VBでコンポーネント化したものです。
VBのラベルはハンドルを持たずに、フォームに直接描かれていると思いました。
(現在OS再インストールしたばかりで、未確認です)
これが何を意味するかというと、ラベルはVBの仕様以上のことができないということです。ですのでラベルだけでの制御では無理だと思います。
EDITボックスは、プロパティで指定されているフォントで、文字コードを表現しているだけです。
私の場合、思いつく実現方法として、二つあると思います。
※1.フォントを登録する
これなら、ラベルでもテキストボックスでも可能です。
たしかVBでオリジナルのスクリーンフォントの登録ができたと思います・・・が自信はありません。
遠い記憶で、同僚がやっていたような気が・・・
※2.ピクチャに描画し、縦か横を倍サイズ領域のピクチャボックスに転送する。
ここの掲示板の履歴に、PaintPicture/StretchBlt/BitBltなどの画像転送サンプルが転がっていると思います。
(こっちの方が実用的かな?)
No.2
- 回答日時:
CreateFont APIは使えば縦長、横長、回転した文字を
ピクチャーボックスで表示できるので
ピクチャーボックスを使ってみてはどうでしょうか?
hDCを取得できればラベルやテキストボックスでも
CreateFont APIで可能かもしれません。
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にも同じ様に印刷されるので、
イメージ表示の感じになるのではないでしょうか?
今回は倍角についての質問でしたので、斜体、下線、太字等の設定は固定にしてあります。
お探しの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ランキング
-
ラベルの文字列の長さが変わっ...
-
eclipseのデバッグ中に変数の値...
-
ウォッチ式の文字数制限について
-
ラベル内の文字(Caption)を縦...
-
ExcelVBA EnableプロパティがF...
-
C# DataGridView特定セルの入力...
-
VBAでMultiPageの色の設定方法は?
-
VisualStudioのプロパティが表...
-
Vba テキストボックス文字を右...
-
ラベルのスクロール(VB)
-
ACCESSのVisibleについて
-
Windowsのカーソルを変更
-
リストボックス内の文字の配置
-
C#初心者です。チェックボック...
-
Labelのプロパティが変更できな...
-
VB6.0でテキストボックスの書式...
-
Notepad++のコメントの色を変え...
-
VBAのコンボボックスの年月表示...
-
複数のコンボボックスの項目の...
-
Win32 API エディットボックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ウォッチ式の文字数制限について
-
eclipseのデバッグ中に変数の値...
-
Vba テキストボックス文字を右...
-
VisualStudioのプロパティが表...
-
ExcelVBA EnableプロパティがF...
-
ラベル内の文字(Caption)を縦...
-
ラベルを表示したり非表示にし...
-
VB.NETでラベルの大きさってど...
-
ラベルの文字列の長さが変わっ...
-
エクセル 画像のプロパティで縦...
-
ラベルのスクロール(VB)
-
三菱タッチパネル小数点以下表...
-
Excel VBA ユーザーフォーム内...
-
Notepad++のコメントの色を変え...
-
チェックボックスの色について
-
ACCESSのラベル内データに下線...
-
VB6.0でテキストボックスの書式...
-
Labelのプロパティが変更できな...
-
ウムラウト文字の表示方法について
-
VBAでMultiPageの色の設定方法は?
おすすめ情報