• ベストアンサー

VBで横倍角/縦倍角を表示したいのですが

VBでラベルプリンターのイメージ表示みたいなものを作っていますが、 ラベルやテキストボックスに横倍角や縦倍角の文字を表示することは可能でしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答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にも同じ様に印刷されるので、 イメージ表示の感じになるのではないでしょうか? 今回は倍角についての質問でしたので、斜体、下線、太字等の設定は固定にしてあります。

kmor
質問者

お礼

ありがとうございました。 参考ソースまでいただき、大変助かりました。 早速ソース解析し、組み込んでみます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

CreateFont APIは使えば縦長、横長、回転した文字を ピクチャーボックスで表示できるので ピクチャーボックスを使ってみてはどうでしょうか? hDCを取得できればラベルやテキストボックスでも CreateFont APIで可能かもしれません。

kmor
質問者

お礼

ありがとうございました。 ピクチャボックスを使うことにしました。

全文を見る
すると、全ての回答が全文表示されます。
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

>ラベルやテキストボックスに横倍角や縦倍角の文字を表示することは可能でしょうか。 概念から説明しましょう。 VBのラベルは、WINDOWSは絵として認識しています。 VBのテキストボックスはEDITクラスを持ったオブジェクトを、VBでコンポーネント化したものです。 VBのラベルはハンドルを持たずに、フォームに直接描かれていると思いました。 (現在OS再インストールしたばかりで、未確認です) これが何を意味するかというと、ラベルはVBの仕様以上のことができないということです。ですのでラベルだけでの制御では無理だと思います。 EDITボックスは、プロパティで指定されているフォントで、文字コードを表現しているだけです。 私の場合、思いつく実現方法として、二つあると思います。 ※1.フォントを登録する これなら、ラベルでもテキストボックスでも可能です。 たしかVBでオリジナルのスクリーンフォントの登録ができたと思います・・・が自信はありません。 遠い記憶で、同僚がやっていたような気が・・・ ※2.ピクチャに描画し、縦か横を倍サイズ領域のピクチャボックスに転送する。 ここの掲示板の履歴に、PaintPicture/StretchBlt/BitBltなどの画像転送サンプルが転がっていると思います。 (こっちの方が実用的かな?)

kmor
質問者

お礼

ありがとうございました。 ピクチャボックスを使うことにしました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • HTMLで倍角は表示できますか?

    HTMLで倍角文字(縦倍角、横倍角、4倍角)って表示出来るのでしょうか?それ専用のタグとかありますか?スタイルシートを使用したら可能とか?わかる方がいらっしゃいましたら教えてください。

    • ベストアンサー
    • HTML
  • VB.NETで縦書表示をしたいのですが可能でしょうか。

    VB.NET20003で開発を行っています。 テキストかラベルで縦書表示したのですが可能でしょうか。

  • WORDで縦倍角を表示する方法

    以前ワープロを使っていたときに「縦倍角」というのがありました。 コンバーターでワープロ文書を変換したら、縦倍角は出来ますが、最初からWORDだとどんな風にすると縦倍角の文字になるのでしょうか?

  • こんな表示はできそうですか?縦詰め→横回り込み

    こんにちは。どうも上手く考え付かないので・・・お助けを(TT; 内輪の物なので、クロスブラウザーの必要はありません。 環境はWINで、 IE6・スレイプニル・ファイアフォックス、何れかで表示が出来ればいいです。 横600 縦700の枠があります。 この中に、横200×縦可変のボックスを敷き詰めたいです。 (中身は、画像とテキストがあり、boxは今divで作ってますが、 実現できれば、なんでもいいです・・・) そして、その敷き詰め方が・・・ 縦!です。 縦方向に敷き詰め、700がうまったら(入らなくなったら) 右へずれて、また縦に敷き詰める。 (float の縦バージョンのような) 左から始まっても、右から始まってもOKです。 どうかお願いしますううううう

    • ベストアンサー
    • HTML
  • 縦1,5横5センチのラベルに4文字印刷するには

    縦1,5センチ横5センチくらいに4文字印刷した名札のラベルを作るにはどのようにすればいいでしょうか? 無地のA4のラベル用紙がありそこに上記の縦1,5センチ横5センチくらいに4文字印刷したものをたくさん作るにはプリンターの設定などどのようにすればできるでしょうか? また縦1,5センチ横5センチくらいのラベルを買ってきたとしてその中に4文字印刷するにはどのようにすrてばいいでしょうか?

  • テキストボックスかラベル上の表示を縦に中央揃えしたい

    Visual Basicで、 テキストボックスかラベルの上にある表示を縦方向にに中央揃えすることはできますか。 横方向だとAlignmentプロパティーで設定できますが、縦方向には同様のものがありません。良い方法はないでしょうか。

  • Excel VBAのフォーム_ラベルの縦位置

    Excel VBAのフォームを作成しているのですが、 ラベルのキャプションの縦位置が指定できません。 テキストボックスを入力不可の状態にすると、文字が薄いグレーになってしまい、 ラベルにすると表示される文字が上によってしまいます。 ラベルの文字列を下付き文字にするか、テキストボックスのもじれるを黒くする方法を教えてください。 よろしくお願い致します。

  • 縦1cm×横13cmのプリンタラベルを探してます。

    縦1cm×横13cmのプリンタラベルを探してます。 デジタルアルバムをネットで注文しました。 どんな時に撮った画像かコメントを書いてから遠くに住む両親へ プレゼントしようと思っているのですが、 同じものを3冊作ることになり枚数が多いので 手書きは断念しました。 写真の下にある余白は 縦1センチ×横13センチです。 このサイズに合うプリンタラベルは無いか探しています。 ノーカットのプリンタラベルでは 切るのに時間がかかるので、いい方法は無いか悩んでいます。 細いプリンタラベルをご存知でしたら教えていただけないでしょうか

  • 横に書いてある文を縦に表示。

    これは知っている方がいらしゃれば聞きたいのですが、何かボタンを押すことで、横に書いてあった文章が縦に表示させるということは可能なのでしょうか(ページに表示されているすべての文字に対して)?? これはどこの参考書を見てもないのでほぼあきらめてるのですが、わかる方がいらっしゃればぜひサンプルなどを教えていただきたいです。お願いします。 m(_ _)m

  • BOCのINPUT MANでラベルのコントロールはできないですか?(VB6)

    VB6でINPUT MANを使っているのですが、 ラベルのコントロールは使用できないのでしょうか? テキストボックスやマスクは機能が充実しており、標準のものよりも大変使いやすいです。 ですが、ラベルに関しては、標準のものを使用しているので大変、使い勝手が悪いです。 縦位置が中央に寄らないなど... INPUT MANでラベルのコントロールってないのでしょうか? (見る限りないようですし、ラベルはINPUTでないから駄目でしょうか?) もう一つなのですが、 自分は、テキストボックスを使用不可(ENABLE=FALSE)にした時に、 テキストボックス内の文字がくすんで(黒文字→灰色文字になる) のが嫌なので、外にフレームを張り、フレームに対して、ENABLEを制御しています。 INPUT MANのテキストボックスでも、 ENABLE=FALSE(フォーカスが当たらない状態)で文字はそのままの状態はできないのでしょうか? LOCKEDでコントロールも有効かと思いますが、フォーカスが当たらない方がいいです。 →ラベルの使いにくさの応用で代用できるかと思いまして...