プログレスバーの、緑になっている部分の色を変更したい。
投稿者 秘密  (小学生)
投稿日時
2013/4/4 15:07:45
プログレスバーの、緑になっている部分の色を変更したいのですが、変更できるプロパティ,コードなどはありますか?
投稿者 YuO  (社会人)
投稿日時
2013/4/4 18:01:35
Visual Stylesを有効にしていないのであれば、PBM_SETBARCOLORで可能です。
site: PBM_SETBARCOLOR message (Windows)
http://msdn.microsoft.com/en-us/library/windows/desktop/bb760838(v=vs.85).aspx
site: PBM_SETBARCOLOR message (Windows)
http://msdn.microsoft.com/en-us/library/windows/desktop/bb760838(v=vs.85).aspx
投稿者 るきお  (社会人)
投稿日時
2013/4/4 22:06:07
プログレスバーはそのまま使ったことしかないです。
私の勘ではあまりいじらないでありのままで使った方が良いと思います。
一応プログレスバーを赤くする例を紹介します。
このプログラムを一度実行するとツールボックスにProgressBarExが出現します。
ProgressBarExをフォームに配置すると、赤いプログレスバーです。
YuOさんの方法は私はどうも実現できませんでした。
私の勘ではあまりいじらないでありのままで使った方が良いと思います。
一応プログレスバーを赤くする例を紹介します。
このプログラムを一度実行するとツールボックスにProgressBarExが出現します。
ProgressBarExをフォームに配置すると、赤いプログレスバーです。
Public Class ProgressBarEx
Inherits ProgressBar
Public Sub New()
Me.SetStyle(ControlStyles.UserPaint, True)
End Sub
Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
Const Edge As Integer = 1
Dim width As Integer = e.ClipRectangle.Width * (Me.Value / Me.Maximum) - 4
Dim height As Integer = e.ClipRectangle.Height - (Edge * 2)
Dim rect As New Rectangle(Edge, Edge, width, height)
If ProgressBarRenderer.IsSupported Then
ProgressBarRenderer.DrawHorizontalBar(e.Graphics, e.ClipRectangle)
Else
Dim outerRect As Rectangle = e.ClipRectangle
outerRect.Width -= 1
outerRect.Height -= 1
e.Graphics.DrawRectangle(Pens.Black, outerRect)
End If
e.Graphics.FillRectangle(Brushes.Red, rect)
End Sub
End Class
YuOさんの方法は私はどうも実現できませんでした。
投稿者 YuO  (社会人)
投稿日時
2013/4/5 03:56:36
えーっと、MSDNにもあるのですが、XP Visual Stylesを「使っていないとき」という制限があります。
・アプリケーションフレームワークを使っている場合は、プロパティで[XP Visual スタイルを有効にする]チェックボックスのチェックを外す
・アプリケーションフレームワークを使っていない場合は、Application.EnableVisualStylesメソッドを呼び出さない
が条件になります。
以下、VB 2012用のコード断片です。
・アプリケーションフレームワークを使っている場合は、プロパティで[XP Visual スタイルを有効にする]チェックボックスのチェックを外す
・アプリケーションフレームワークを使っていない場合は、Application.EnableVisualStylesメソッドを呼び出さない
が条件になります。
以下、VB 2012用のコード断片です。
Private Const WM_USER As Integer = &H400
Private Const PBM_SETBARCOLOR As Integer = WM_USER + 9
<DllImport("User32.dll", PreserveSig:=False, CharSet:=CharSet.Auto)>
Private Shared Sub SendMessage(hWnd As IntPtr, Msg As UInteger, wParam As IntPtr, lParam As IntPtr)
End Sub
Private Shared Sub SetBarColor(target As ProgressBar, color As Color)
If Application.RenderWithVisualStyles Then
Throw New InvalidOperationException("Visual スタイルが有効な状態では色の変更はできません。")
End If
SendMessage(target.Handle, PBM_SETBARCOLOR, IntPtr.Zero, CType(color.R Or (color.G << 8) Or (color.B << 16), IntPtr))
End Sub
投稿者 るきお  (社会人)
投稿日時
2013/4/6 12:42:58
YuOさん、ありがとうございます。
私はXP Visual スタイルの設定を行っていませんでした。
YuOさんのプログラムで無事赤いプログレスバーにできました。
私はXP Visual スタイルの設定を行っていませんでした。
YuOさんのプログラムで無事赤いプログレスバーにできました。