はじめまして。
質問させていただきます。
VB6で、文字を縁取りすることはできますでしょうか?
textout(API)で、上下左右に数ピクセルずらして表示させる方法があることはわかりましたが、
その他、もっときれい(なめらか)に表示させる方法はありますでしょうか?
なにとぞ、よろしくお願いいたします。
API関数をいくつか使えば可能でしょう。
まずPathを作ってそこで文字列を描画して、そのあとStrokeAndFillPath
で囲んでしまえばいいのでは。
お返事ありがとうございます。
宣言が
Declare Function StrokeAndFillPath Lib "gdi32" (ByVal hDC As Long) As Long
というのはわかったんですが、
知識不足のため他が分かりません。
もう少し詳しく教えていただけますでしょうか。
すみませんがよろしくお願いします。
>API関数をいくつか
ですので、当然 StrokeAndFillPath だけでは出来ません。
・背景モードをTRANSPARENTにする → SetBkMode
・適切なフォントを作成する → CreateFont
・適切な文字色にするためのブラシを作る → CreateSolidBrush
・適切なふちの色にするためのペンを作る → CreatePen
・フォント、ブラシ、ペンを選択させる → SelectObject
・パスを開始する → BeginPath
・文字を描画する(パスを作成する) → TextOut
・パスを終了する → EndPath
・輪郭と塗りつぶしを同時に行う → StrokeAndFillPath
・背景モード、フォント、ブラシ、ペンを変更前に戻す(SelectObject)
・作成したフォント、ブラシ、ペンを削除する → DeleteObject
# 面倒すぎて、正直VB6でやる気はしない。
StrokeAndFillPathではおそらく、ASCII文字しかカバーできないと思う。
(ひらがなとか漢字は多分むりっぽいかも。
そういうフォント(アウトラインフォント)であれば出来るかもしれないけど)
訂正
>・背景モード、フォント、ブラシ、ペンを変更前に戻す(SelectObject)
背景モードだけは SetBkMode でした。
K.J.K.様、Blue様お返事ありがとうございます。
すごくめんどくさいんですね・・・。
映像の上に表示するテロップを作りたいと思っています。
アンチエイリアス処理をするとかいろいろ考えてみます。
# 条件分岐も同期処理も不要でただ繋げて書けばいいもの、を面倒であると
# 言ってしまったら...
Formに以下のコントロールが貼り付けてあると仮定します。
mwEdit As TextBox
mwButton As CommandButton
mwImage As PictureBox
Private Declare Function BeginPath Lib "gdi32.dll" _
(ByVal hDC As Long) As Long
Private Declare Function EndPath Lib "gdi32.dll" _
(ByVal hDC As Long) As Long
Private Declare Function StrokeAndFillPath Lib "gdi32.dll" _
(ByVal hDC As Long) As Long
Private Sub mwButton_Click()
mwImage.AutoRedraw = True
Call mwImage.Cls
mwImage.DrawMode = DrawModeConstants.vbNop
mwImage.CurrentX = 8&
mwImage.CurrentY = 8&
Call BeginPath(mwImage.hDC)
mwImage.Print mwEdit.Text
Call EndPath(mwImage.hDC)
mwImage.DrawMode = DrawModeConstants.vbCopyPen
Call StrokeAndFillPath(mwImage.hDC)
mwImage.AutoRedraw = False
End Sub
これだけで、ひらがななどの縁取りもできますよね。
># 条件分岐も同期処理も不要でただ繋げて書けばいいもの、を面倒であると
># 言ってしまったら...
いや、、、複雑になるのであれば、面倒という表現ではなく、「難しい」というつもりでした。
今回は単にAPI宣言が面倒だなぁ、と思ったためつい「面倒です」といってしまいました。
> StrokeAndFillPathではおそらく、ASCII文字しかカバーできないと思う。
> (ひらがなとか漢字は多分むりっぽいかも。
> そういうフォント(アウトラインフォント)であれば出来るかもしれないけど)
> mwImage.Print mwEdit.Text
> これだけで、ひらがななどの縁取りもできますよね。
ということだったので、
TextOutではなく、DrawTextにしてみたら、ちゃんとできることが確認できました。
すみません、確認不足でした。
ありがとうございます!!!
文字を囲むことができましたし、ひらがなもOKでした。
このサンプルをお手本に、いろいろできそうです。
K.J.K.様ほんとうにありがとうございました。
Blue様もありがとうございます。
いろんなAPIを知れて勉強になりました。
>TextOutではなく、DrawTextにしてみたら、ちゃんとできることが確認できました。
あれ?そうでもなかった。
(昨日試したとき、なんか勘違いしていたのかも。もしくは環境依存か、)
ツイート | ![]() |