色付きテキストオブジェクト
特定の要件に応じて、色付きテキストオブジェクトを独自に開発しました。この機能はHTML風の構文を使ってテキストを指定し、画像として出力します。
まずはサンプル画像を見てみましょう。
これはテキストではなく、コードによって生成された画像です。実装方法を確認しましょう。
Dim textRenderer As New DSAPI.Image.ColorTextRenderer
With textRenderer
.CanvasSize = Me.Size
.DrawOutline = True
.DrawShadow = True
.OutlineColor = Color.Black
.TextQuality = TextRenderingHint.AntiAliasGridFit
.TextColor = Color.Yellow
.ShadowSize = 5
.ShadowIntensity = 30
.ShadowOffset = New Point(0, 0)
.LineSpacing = 3
.CharacterSpacing = 1
.LinkUnderlineColor = Color.Red
.Font = New Font("宋体", 9)
Dim inputText As String = "こんにちは、私は<color=255,0,255>カラ</color><color=0,255,255>フル</color><color=0,255,0>テ</color><color=0,0,255>キ</color>ストです"
inputText &= vbCrLf & "<color=255,255,255>これは<b>太字</b>、これは<i>斜体</i>、そして<u>下線</u>も可能です"
inputText &= vbCrLf & "他の<font=微软雅黑>フォント</font>も使用できます"
inputText &= vbCrLf & "リンクも<color=0,255,0><link=http://www.baidu.com>追加</link></color>可能です"
.InputCode = inputText
Me.BackgroundImage = .RenderedImage
End With
ゲーム内の字幕のような効果が得られるのではないでしょうか?実装さえできれば、用途は自由に設定できます。また、リンク機能についてもご注目いただいたと思います。画像として出力されるため、リンクは何の役割があるのでしょうか?もちろん、画像はどこかのコントロールに割り当てられる必要があります。リンクには座標情報が含まれており、コード内でリンクを使用した場合、MouseMoveやMouseDownイベントでマウスの位置をチェックし、リンクかどうか、またどのリンクであるかを判定できます。
すべてのプロパティ設定は、画像を取得する際に適用されます。表示用のテキスト(コードを除去したもの)を取得したい場合は、まず画像を出力してから表示テキストを取得する必要があります。
Me.BackgroundImage = textRenderer.RenderedImage
Console.WriteLine(textRenderer.DisplayText)
出力結果:
こんにちは、私はカラフルテキストです
これは太字、これは斜体、そして下線も可能です
他のフォントも使用できます
リンクも追加可能です
リンク情報の取得
Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
Dim linkInfo As DSAPI.Image.ColorTextRenderer.Link = textRenderer.GetLinkAtPoint(e.Location)
If linkInfo IsNot Nothing Then
MsgBox(linkInfo.TargetUrl)
End If
End Sub
Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove
Dim linkInfo As DSAPI.Image.ColorTextRenderer.Link = textRenderer.GetLinkAtPoint(e.Location)
If linkInfo IsNot Nothing Then
Me.Cursor = Cursors.Hand
Else
Me.Cursor = Cursors.Default
End If
End Sub