vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Windows/System15.03.02
InitCommonControlsEx-Funktion

Diese Funktion registriert eine Klasse eines Common-Control-Steuerelementes.

Betriebssystem:  Win95, Win98, WinNT 3.1, Win2000, WinMEViews:  10.333 

Deklaration:

Declare Function InitCommonControlsEx Lib "comctl32.dll" ( _
  lpInitCtrls As INITCOMMONCONTROLSEX_TYPE) As Long


Beschreibung:

Diese Funktion registriert eine Klasse eines Common-Control-Steuerelementes. Sie kann dazu benutzt werden, um mit der CreateWindowEx-Funktion ein Steuerelement wie die ProgressBar, dasListview-Steuerelement oder ähnliches zu erstellen.


Parameter:

lpInitCtrlsErwartet eine INITCOMMONCONTROLSEX_TYPE-Struktur, die Informationen über das zuregistrierende Steuerelement enthält.


Rückgabewert:

Ist die Funktion erfolgreich, so liefert sie einen Wert "ungleich 0", andernfalls ist der Rückgabewert "0".


Beispiel:
' schreiben Sie bitte den folgenden Code in eine Klasse
Private Declare Function InitCommonControlsEx Lib "comctl32.dll" ( _
  lpInitCtrls As INITCOMMONCONTROLSEX_TYPE) As Long
Private Declare Function CreateWindowEx Lib "user32.dll" _
  Alias "CreateWindowExA" ( _
  ByVal dwExStyle As Long, _
  ByVal lpClassName As String, _
  ByVal lpWindowName As String, _
  ByVal dwStyle As Long, _
  ByVal x As Long, _
  ByVal y As Long, _
  ByVal nWidth As Long, _
  ByVal nHeight As Long, _
  ByVal hWndParent As Long, _
  ByVal hMenu As Long, _
  ByVal hInstance As Long, _
  lpParam As Any) As Long
Private Declare Function MoveWindow Lib "user32.dll" ( _
  ByVal hWnd As Long, _
  ByVal x As Long, _
  ByVal y As Long, _
  ByVal nWidth As Long, _
  ByVal nHeight As Long, _
  ByVal bRepaint As Long) As Long
Private Declare Function DestroyWindow Lib "user32.dll" ( _
  ByVal hWnd As Long) As Long
Private Declare Function SendMessage Lib "user32.dll" _
  Alias "SendMessageA" ( _
  ByVal hWnd As Long, _
  ByVal Msg As Long, _
  ByVal wParam As Long, _
  ByVal lParam As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" _
  Alias "RtlMoveMemory" ( _
  Destination As Any, _
  Source As Any, _
  ByVal Length As Long)
 
Private Type INITCOMMONCONTROLSEX_TYPE
  dwSize As Long
  dwICC As Long
End Type
 
' INITCOMMONCONTROLSEX_TYPE dwICC-Konstanten
Private Const ICC_ANIMATE_CLASS = &H80 ' Animate-Klasse
Private Const ICC_BAR_CLASSES = &H4 ' Status Bar-, Trackbar- und Toolbar-Klassen
Private Const ICC_COOL_CLASSES = &H400 ' Rebar-Klasse
Private Const ICC_DATE_CLASSES = &H100 ' Date- und Time-Picker- Klassen
Private Const ICC_HOTKEY_CLASS = &H40 ' Hotkey- Klasse
Private Const ICC_INTERNET_CLASSES = &H800 ' IP-Adress- Klasse
Private Const ICC_LISTVIEW_CLASSES = &H1 ' Listview- Klasse
Private Const ICC_PAGESCROLLER_CLASS = &H1000 ' Page-Klasse
Private Const ICC_PROGRESS_CLASS = &H20 ' Progress Bar-Klasse
Private Const ICC_TAB_CLASSES = &H8 ' Tab- und Tooltip-Klassen
Private Const ICC_TREEVIEW_CLASSES = &H2 ' Treeview- und Tooltip-Klassen
Private Const ICC_UPDOWN_CLASS = &H10 ' UP-Down-Klasse
Private Const ICC_USEREX_CLASSES = &H200 ' ControlBoxEx-Klassen
Private Const ICC_WIN95_CLASSES = &HFF ' Animate-, Header-, Hotkey-, Listview-,  
' ProgressBar-, StatusBar-, Tab-, Tooltip-, ToolBar-, Trackbar-, Treeview- und UP-Down-Klassen 
 
' einige der Standard-Fensterstyles
Private Const WS_CHILD = &H40000000
Private Const WS_VISIBLE = &H10000000
 
' Progressbar-Konstanten
Private Const WM_USER = &H400
Private Const CCM_FIRST = &H2000
Private Const CCM_SETBKCOLOR = (CCM_FIRST + 1)
Private Const PBM_DELTAPOS = (WM_USER + 3)
Private Const PBM_GETPOS = (WM_USER + 8)
Private Const PBM_GETRANGE = (WM_USER + 7)
Private Const PBM_SETBARCOLOR = (WM_USER + 9)
Private Const PBM_SETBKCOLOR = CCM_SETBKCOLOR
Private Const PBM_SETPOS = (WM_USER + 2)
Private Const PBM_SETRANGE = (WM_USER + 1)
Private Const PBM_SETRANGE32 = (WM_USER + 6)
Private Const PBM_SETSTEP = (WM_USER + 4)
Private Const PBM_STEPIT = (WM_USER + 5)
 
 
' eigene Strukturen und Variablen
Private Type MinMax
  Min As Integer
  Max As Integer
End Type
 
Private TmpRange As MinMax
Private hProgressBar As Long
Private LastValue As Long
Private LastMin As Long
Private LastMax As Long
' beim Initialisieren der Klasse die Progressbar erstellen und auf der Form anzeigen
Private Sub Class_Initialize()
  Dim Retval As Long, CCInit As INITCOMMONCONTROLSEX_TYPE
 
  ' Progressbar der Struktur zuweisen
  With CCInit
    .dwSize = Len(CCInit)
    .dwICC = ICC_PROGRESS_CLASS
  End With
 
  ' Progressbar registrieren
  Retval = InitCommonControlsEx(CCInit)
  If Retval = 0 Then
    MsgBox "Die ProgressBar konnte nicht Registriert werden.", vbCritical, "Fehler" 
    Exit Sub
  End If
 
  ' Progressbar-Fenster erstellen und auf der Form anzeigen
  hProgressBar = CreateWindowEx(0&, "msctls_progress", "ProgressBar", WS_CHILD  _
  Or WS_VISIBLE, 5, 5, 200, 20, Form1.hWnd, 0&, App.hInstance, 0&)
  If hProgressBar = 0 Then
    MsgBox "Progressbar-Fenster konnte nicht erstellt werden."
  End If
End Sub
' beim Zerstören der Klasse Progressbar entfernen
Private Sub Class_Terminate()
  DestroyWindow hProgressBar
End Sub
' ermittelt und setzt den aktuell gewählten Wert der Progressbar
Public Property Let Value(ByVal NewValue As Integer)
  SendMessage hProgressBar, PBM_SETPOS, NewValue, 0&
End Property
Public Property Get Value() As Integer
  Value = SendMessage(hProgressBar, PBM_GETPOS, 0&, 0&)
End Property
' ermittelt und setzt die minimale Reichweite der Progressbar
Public Property Let Min(ByVal NewValue As Integer)
  Dim TmpLng As Long
 
  ' wir müssen die Struktur in eine Long-Variable umwandeln, um sie der Funktion  
  ' zu übergeben
  TmpRange.Min = NewValue
  CopyMemory TmpLng, TmpRange, Len(TmpLng)
  SendMessage hProgressBar, PBM_SETRANGE, 0&, TmpLng
End Property
Public Property Get Min() As Integer
  Min = TmpRange.Min
End Property
' ermittelt und setzt die maximale Reichweite der Progressbar
Public Property Let Max(ByVal NewValue As Integer)
  Dim TmpLng As Long, a(1) As Integer
 
  ' wir müssen die Struktur in eine Long-Variable umwandeln, um sie der Funktion  
  ' zu übergeben
  TmpRange.Max = NewValue
  CopyMemory TmpLng, TmpRange, Len(TmpLng)
  SendMessage hProgressBar, PBM_SETRANGE, 0&, TmpLng
End Property
Public Property Get Max() As Integer
  Max = TmpRange.Max
End Property
' setzt die Fensterposition und -größe, in diesem Fall der Progressbar
Public Function SetPos(ByVal Left As Long, ByVal Top As Long, ByVal Width As Long,  _
ByVal Height As Long)
  MoveWindow hProgressBar, Left, Top, Width, Height, True
End Function
 
 
 
' dieser Code sollte in ein Fenster geschrieben werden (Form1)
Private Progress1 As Progressbar
' lädt die Progressbar und zeigt sie an
Private Sub Form_Load()
  Set Progress1 = New Progressbar
  Me.ScaleMode = vbPixels
 
  ' einige Werte voreinstellen
  Progress1.Min = 0
  Progress1.Max = 1000
End Sub
' Progressbar und CommandButton immer in der Mitte des Fenster anzeigen
Private Sub Form_Resize()
    Progress1.SetPos Me.ScaleWidth / 3, (Me.ScaleHeight - 20) / 2,  _
    Me.ScaleWidth / 3, 20
    Command1.Top = (Me.ScaleHeight - 20) / 2 + 25
    Command1.Left = (Me.ScaleWidth - Command1.Width) / 2
End Sub
' startet einen Ablauf der Progressbar
Private Sub Command1_Click()
  Command1.Enabled = False
   For i = Progress1.Min To Progress1.Max Step 0.01
    Progress1.Value = i
    DoEvents
  Next i
  MsgBox "Vorgang beendet !", vbInformation, "ProgressBar ohne ActiveX"
  Progress1.Value = Progress1.Min
  Command1.Enabled = True
End Sub

 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.