[リストへもどる]
一括表示

投稿時間:2003/12/22(Mon) 10:54
投稿者名:おじん
URL :
タイトル:
TextOut関数の使い方
1バイト系、2バイト系が混在しているときうまく表示されない。
以下、そのソースです。どこがまちがっているのでしょうか?

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 Sub Command1_Click()
Dim ST$
St = "123う 広島"  '    <---------------------------------
'St = "広島"  '<------------------------------------------
Picture1.FontSize = 60
Picture1.Cls
Picture1.ForeColor = vbBlack 
TextOut Picture1.hdc, 10, 10, St, LenB(St)'<----------------
Picture1.Refresh
End Sub

結果:「123う 広島」「Len(st)..7」の場合、「123う・」
   「123う 広島」「LenB(st)..14」の場合、「123う 広島・」
   「広島」「Len(st)..2」の場合、「広」
   「広島」「LenB(st)..4」の場合、「広島」
..7はLen関数の値。123う 広島の後ろの・は半角(?)らしい(?)

よろしくお願いいたします。
   

投稿時間:2003/12/22(Mon) 11:06
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re: TextOut関数の使い方
TextOut Picture1.hdc, 10, 10, St, LenB(StrConv(ST, vbFromUnicode))

とか。

投稿時間:2003/12/22(Mon) 11:27
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: TextOut関数の使い方
ソースを見る限りでは、APIを使う必要は無いような。
    Picture1.Cls
    Picture1.ScaleMode = vbPixels
    Picture1.Font.Size = 60
    Picture1.ForeColor = vbBlack
    Picture1.CurrentX = 10
    Picture1.CurrentY = 10
    Picture1.Print ST

で、もし TextOut を使うなら、Wide系のエントリを使った方が楽かも。

Private Declare Function TextOut Lib "gdi32" _
    Alias "TextOutW" ( _
        ByVal hdc As Long, _
        ByVal x As Long, _
        ByVal y As Long, _
        ByRef lpString As Byte, _
        ByVal nCount As Long) As Long

Private Sub Command1_Click()
    Dim S() As Byte

    S = "123う 広島"
    Picture1.Cls
    Picture1.Font.Size = 60
    Picture1.ForeColor = vbBlack
    TextOut Picture1.hdc, 10, 10, S(0), Len(CStr(S))
    Picture1.Refresh
End Sub

投稿時間:2003/12/22(Mon) 12:06
投稿者名:おじん
URL :
タイトル:
Re^2: TextOut関数の使い方
> ソースを見る限りでは、APIを使う必要は無いような。
はい、そのとおりです。新しがり屋というか、見つけたら使ってみたいの
一念でした。Picture1.Printも同じに試していました。ソースに例示し
なかったのです、、、。申し訳ありません。
>
> で、もし TextOut を使うなら、Wide系のエントリを使った方が楽かも。
>
API関数の中に、"Alias”が付いているのを見かけますが、何のことかよく
分かっていません。TetOutの場合、TextOutA とTextOutW。Wide系とは
2バイト系のこと?恐らく。

nanashi様、
TextOut Picture1.hdc, 10, 10, St, LenB(StrConv(ST, vbFromUnicode))
なる”マジナイ”ありがとうございました。