今までは文字列を例えば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に縦書きに表示する良い方法があったら教えてください。
まぁそれでいいと思うけど
その前に、Dim文の指定の仕方を少し考えた方がいいかも
それだと全部Variant型になると思うよ
それでいいならいいけど
面倒ならQBasic辺りからの、
DefLong A-X
などで…
環境が書かれていませんが、ソースから予想が出来ますが・・・・・・・
>縦書きに表示する良い方法があったら教えてください。
と書かれていたので、暇つぶしに作って見ました。
環境が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
あと、宣言を覚えてくださいね。
VB6でやるなら縦書き用フォント(頭に@のついたフォント)を使って
それを270度回転させて描画するとか。
今年こそ年賀状の宛名を毛筆調で縦書きにしたいと準備中にこのページを発見しました。030さんの270度回転はどうすればできるのかアドバイスをお願いします。(プリンターとPicture1に縦書き希望)なお環境は VB6です。
WindowsAPIのCreateFont、CreateFontIndirectを参照してみてください。
ガッ殿 ご紹介いただいた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
font.lfCharSetをSHIFTJIS_CHARSETにしてみたらどうでしょうか?
LOGFONT構造体
http://yokohama.cool.ne.jp/chokuto/urawaza/struct/LOGFONT.html
Blue殿。 ご紹介のサイトを真似して次の1行を入れたら解決しました。
font.lfCharSet = 128
カッ殿はじめアドバイスを頂いた皆様に大感謝です。お礼まで。
> font.lfCharSet = 128
あとからソースを読み返したときに、128ってなんだっけ?とならないためにも
Private Const SHIFTJIS_CHARSET = 128
と宣言して、その値を使ったほうがいいです。
# APIビューアをつかうと便利です。
ついでに
> [[解決]]
はしちゃダメでしょ。質問者の永年初心者さんは解決したわけではないので。
# まぁ、スレ主は放置と考えてもいいと思うけど。
Blue殿 うれしくてつい反射的に解決を押しちゃいましたが失礼いました。 消す方法はあるのでしょうか? 個人でソフトをいじっているので「128」などと手抜きしてしまいましたがこれからは後日解読可能なように見習います。
今朝からフォント、角度、位置など各種試しましたが完全に動きます。 ありがとうございました。
ツイート | ![]() |