掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
PictureBox に描画した文字の文字色を反転する方法 (ID:115232)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
いつもお世話になっております。 開発環境: WinXP Pro VB.NET 2003(.NET Framework 1.1) PictureBox に文字を描画し、さらにその上に塗りつぶされた四角形を 描画した際に四角形と文字が重なった部分の文字色を反転させたいと 思っています。とりあえず、文字色を反転させることはできたのですが、 問題が2つほどあります。 1)別ウィンドウの背面に隠し、再度表示するなどの再描画を行うと 塗りつぶされた四角形が消えてしまう。 2)塗りつぶし四角形は、ControlPaint.FillReversibleRectangle を 使用しているが、意図する色に塗りつぶされない。 背景色灰色と塗りつぶしの青色の反転色が出ている模様(?) ---------- ソースコード ここから Public Sub Draw() Dim strNumber As String ' 一時的に文字列を保持する Dim CurrentX As Long ' 値文字列書込み位置X座標 Dim CurrentY As Long ' 値文字列書込み位置Y座標 Dim g As Graphics ' 描画グラフィック Dim lngValue As Long = 50 ' 表示値 Dim lngMaxValue As Long = 100 ' 表示最大値 Dim intTargetWidth As Integer ' ターゲットの幅 Dim intTargetHeight As Integer ' ターゲットの高さ Dim lngDrawValue As Long ' 四角形描画幅 Dim ptScreenPosition As Point ' スクリーン座標 Dim ptsClientPosition As Point ' クライアント座標 Dim fntFont As Font = New Font("MS ゴシック", 9) ' フォント作成 With PictureBox1 ' ターゲットの PictureBox の幅/高さを格納 intTargetWidth = .ClientRectangle.Width intTargetHeight = .ClientRectangle.Height .Image = New Bitmap(.Width, .Height) ' ターゲットの PictureBox の内容を消去(背景を灰色) g = Graphics.FromImage(.Image) g.Clear(Color.LightGray) ' プログレスバーの文字色設定 ' 基本的にバー色と同一色を使用する ' (表示する値によって、色を反転させる必要があるため) .ForeColor = Color.Black ' パーセント表示 strNumber = CStr(lngValue) & "%" ' 四角形描画幅設定 lngDrawValue = lngValue / lngMaxValue * intTargetWidth ' 値の表示位置を PictureBox 中央に設定 CurrentX = (intTargetWidth - _ g.MeasureString(strNumber, fntFont).Width) / 2 CurrentY = (intTargetHeight - _ g.MeasureString(strNumber, fntFont).Height) / 2 ' 文字列印字(ターゲットの PictureBox に表示する) g.DrawString(strNumber, fntFont, Brushes.Blue, _ CurrentX, CurrentY) ' 強制的に再描画 .Refresh() ' クライアント座標格納 ptsClientPosition.X = .ClientRectangle.Left ptsClientPosition.Y = .ClientRectangle.Top ' スクリーン座標へ変換 ptScreenPosition = .PointToScreen(ptsClientPosition) ' 画面上の塗りつぶされた反転できる四角形を描画 ControlPaint.FillReversibleRectangle( _ New Rectangle(ptScreenPosition.X, ptScreenPosition.Y, _ lngDrawValue, intTargetHeight), Color.Blue) ' リソースの解放 fntFont.Dispose() g.Dispose() End With End Sub Private Sub Form1_DoubleClick( _ ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.DoubleClick Draw() End Sub ---------- ソースコード ここまで 解決策、ご指摘部分がありましたら、 ご教授の願えますでしょうか? よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.