Tipp 3.3 - Farbauswahldialog

Wie kann ich einen Farbauswahldialog aufrufen?

Mit dieser Funktion können Sie einen Farbauswahldialog aufrufen. Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.

Api-AufrufeVerwendete Win32-Api-Aufrufe und Typen: GetActiveWindow - CHOOSECOLOR

Beispiel:

Option Explicit
 
Public Enum CHOOSE_COLOR_FLAGS
  CC_RGBINIT = &H1&
  CC_FULLOPEN = &H2&
  CC_PREVENTFULLOPEN = &H4&
  CC_SHOWHELP = &H8&
  CC_ENABLEHOOK = &H10&
  CC_ENABLETEMPLATE = &H20&
  CC_ENABLETEMPLATEHANDLE = &H40&
  CC_SOLIDCOLOR = &H80&
  CC_ANYCOLOR = &H100&
End Enum
 
Private Type CHOOSECOLOR
  lStructSize    As Long
  hwndOwner      As Long
  hInstance      As Long
  rgbResult      As Long
  lpCustColors   As Long
  flags          As CHOOSE_COLOR_FLAGS
  lCustData      As Long
  lpfnHook       As Long
  lpTemplateName As String
End Type
 
Private Declare Function GetActiveWindow _
    Lib "user32.dll" () As Long
Private Declare Function ChooseColor_API _
    Lib "comdlg32.dll" Alias _
    "ChooseColorA" _
    (lpChoosecolor As CHOOSECOLOR) As Long
 
Public Function ColorSelected( _
                Optional hWnd As Long = 0, _
                Optional lCurrentColor As Long = -1) _
                As Long
  '// -----------------------------------------------------
  '// Funktion:  |Aufruf des Farbauswahldialoges
  '// -----------------------------------------------------
  '// Parameter: |opt. das Hadnle der aufrufenden Form
  '//            |opt. lCurrentColor als aktuelle Farbe
  '//            |zur Voreinstellung im Auswahldialog
  '// -----------------------------------------------------
  '// Autor:     | Stefan Kulpa
  '//            | EDV Innovation & Consulting - Dormagen
  '// -----------------------------------------------------
  '// Beispielaufruf aus einer Form heraus:
  '// BackColor = ColorSelected(hWnd, BackColor)
  '// -----------------------------------------------------
  Dim uChooseColor    As CHOOSECOLOR
  Dim alColorRef(15)  As Long
 
  If hWnd = 0 Then hWnd = GetActiveWindow()
  With uChooseColor
    .lStructSize = Len(uChooseColor)
    .hwndOwner = hWnd
    .lpCustColors = VarPtr(alColorRef(0))
    .flags = CC_SOLIDCOLOR Or CC_ANYCOLOR Or CC_RGBINIT
  End With
  If lCurrentColor >= 0 Then
    uChooseColor.rgbResult = lCurrentColor
  End If
  If ChooseColor_API(uChooseColor) Then
    ColorSelected = uChooseColor.rgbResult
  End If
 
End Function