Цветной индикатор прогресса VB.Net, соответствующий стандарту WXP Visual Styles: ...
Я начал с ответа пользователя 'user1032613' от 17.03.12. Обратите внимание, что теперь это модуль, а не класс. Оттуда я преобразовал код, но нужно было больше. В частности, в преобразованном коде была показана функция DirectCast для преобразования целого числа 'state' в тип IntPtr, который не работал.
Imports System.Runtime.InteropServices
Public Module ModifyProgressBarColor
Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
<DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=False)> _
Private Function SendMessage(hWnd As IntPtr, Msg As UInteger, w As IntPtr, l As IntPtr) As IntPtr
End Function
<System.Runtime.CompilerServices.Extension()> _
Public Sub SetState(pBar As ProgressBar, state As Integer)
'-- Convert state as integer to type IntPtr
Dim s As IntPtr
Dim y As Integer = state
s = IntPtr.op_Explicit(y)
'-- Modify bar color
SendMessage(pBar.Handle, 1040, s, IntPtr.Zero)
End Sub
End Module
И снова просто вызовите это в коде использования с этой строкой:
Call ModifyProgressBarColor.SetState(prb, 2)
Кстати - я пробовал другие цвета - 0, 4, 5 - все они просто отображались зеленым.