文字列を縦書きで書きたい

解決


永年初心者  2005-09-10 03:04:22  No: 125121

今までは文字列を例えばPicture1に縦書きする時は

Dim L
Dim P
Dim N
Dim Doc
Dim X,Y
Dim C

X=100:Y=100
Doc="あいうえお"

L=Len(Doc)

Picture1.CurrentY = Y

For N = 1 to L
    C = Mid(Doc, N, 1)
    W = Picture1.Textwidth(C)
    Picture1.CurrentX= X - W
    Picture1.Print C
Next N

などと書いていましたが文字列を例えばPicture1に縦書きに表示する良い方法があったら教えてください。


通ってみた  2005-09-10 06:50:42  No: 125122

まぁそれでいいと思うけど

その前に、Dim文の指定の仕方を少し考えた方がいいかも
それだと全部Variant型になると思うよ

それでいいならいいけど


ガッ  2005-09-10 20:44:38  No: 125123

面倒ならQBasic辺りからの、
DefLong A-X
などで…


マグ  2005-09-10 20:51:30  No: 125124

環境が書かれていませんが、ソースから予想が出来ますが・・・・・・・
>縦書きに表示する良い方法があったら教えてください。
と書かれていたので、暇つぶしに作って見ました。
環境がVB.NETで違いますが、参考程度に・・・・・・・・・

        Dim [String] As String
        Dim cX As Integer, cY As Integer

        [String] = "なぜ、縦書きにするの??"
        cX = 0 : cY = 0

        Dim g As Graphics = Nothing
        g = PictureBox1.CreateGraphics

        Dim MyFont As Font = Nothing
        MyFont = New Font("MS Pゴシック", 12)

        Dim f As StringFormat = Nothing
        f = New StringFormat(StringFormatFlags.DirectionVertical)

        Dim brush As Brush = Nothing
        brush = New SolidBrush(Color.FromArgb(255, 255, 0, 0))

        g.DrawString([String], MyFont, brush, cX, cY, f)

        If Not brush Is Nothing Then
            brush.Dispose()
            brush = Nothing
        End If
        If Not f Is Nothing Then
            f.Dispose()
            f = Nothing
        End If
        If Not MyFont Is Nothing Then
            MyFont.Dispose()
            MyFont = Nothing
        End If
        If Not g Is Nothing Then
            g.Dispose()
            g = Nothing
        End If

あと、宣言を覚えてくださいね。


030  2005-09-11 05:47:33  No: 125125

VB6でやるなら縦書き用フォント(頭に@のついたフォント)を使って
それを270度回転させて描画するとか。


年男  2005-10-27 00:58:10  No: 125126

今年こそ年賀状の宛名を毛筆調で縦書きにしたいと準備中にこのページを発見しました。030さんの270度回転はどうすればできるのかアドバイスをお願いします。(プリンターとPicture1に縦書き希望)なお環境は  VB6です。


ガッ  2005-10-27 01:23:06  No: 125127

WindowsAPIのCreateFont、CreateFontIndirectを参照してみてください。


年男  2005-10-27 02:38:13  No: 125128

ガッ殿  ご紹介いただいたCreateOntIndirectで探してサンプルを見つけてやってみました。

http://support.microsoft.com/default.aspx?scid=kb;ja;154515

その結果英語ならうまくいくことがわかりましたが漢字を入れると回転した日本語文字が文字化けしてしまいます。  もちろんlfFaceNameも日本語にしましたがダメでした。  どこかに不足するところがあるのでしょうか?いろいろいじりましたがどうやってもわかりませんのでアドバイスをお願いします。

   Sub Command1_Click()

     Dim font As LOGFONT
     Dim prevFont As Long, hFont As Long, ret As Long
     
     Const FONTSIZE = 20 ' Desired point size of font
     font.lfEscapement = 2700    ' 180-degree rotation
     
     font.lfFaceName = FontName ' & Chr$(0)  'Null character at end
     'font.lfFaceName = "Arial" & Chr$(0) 'Null character at end
     '
    ' Windows expects the font size to be in pixels and to
     ' be negative if you are specifying the character height
     ' you want.
     font.lfHeight = (FONTSIZE * -20) / Screen.TwipsPerPixelY
     hFont = CreateFontIndirect(font)
     prevFont = SelectObject(Picture1.hdc, hFont)
     Picture1.CurrentX = Picture1.ScaleWidth / 2
     Picture1.CurrentY = Picture1.ScaleHeight / 5
     Picture1.Print "東京都中央区"  '"Rotated Text"
     ' Clean up by restoring original font.
     ret = SelectObject(Picture1.hdc, prevFont)
     ret = DeleteObject(hFont)
     Picture1.CurrentY = Picture1.ScaleHeight / 2
     Picture1.Print "東京都中央区"
   End Sub


Blue  2005-10-27 02:59:28  No: 125129

font.lfCharSetをSHIFTJIS_CHARSETにしてみたらどうでしょうか?

LOGFONT構造体
http://yokohama.cool.ne.jp/chokuto/urawaza/struct/LOGFONT.html


年男  2005-10-27 03:54:38  No: 125130

Blue殿。  ご紹介のサイトを真似して次の1行を入れたら解決しました。
font.lfCharSet = 128
カッ殿はじめアドバイスを頂いた皆様に大感謝です。お礼まで。


Blue  2005-10-27 08:39:21  No: 125131

> font.lfCharSet = 128
あとからソースを読み返したときに、128ってなんだっけ?とならないためにも
Private Const SHIFTJIS_CHARSET = 128
と宣言して、その値を使ったほうがいいです。
# APIビューアをつかうと便利です。

ついでに
> [[解決]]
はしちゃダメでしょ。質問者の永年初心者さんは解決したわけではないので。
# まぁ、スレ主は放置と考えてもいいと思うけど。


年男  2005-10-27 20:13:07  No: 125132

Blue殿  うれしくてつい反射的に解決を押しちゃいましたが失礼いました。  消す方法はあるのでしょうか?  個人でソフトをいじっているので「128」などと手抜きしてしまいましたがこれからは後日解読可能なように見習います。
今朝からフォント、角度、位置など各種試しましたが完全に動きます。  ありがとうございました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加