"Color Picker" im Formular

05/06/2008 - 15:53 von Oliver | Report spam
Guten Tag miteinander

In einem Formular möchte ich die Farbwahl ermöglichen.

Ich stelle mir das so vor:
- Es hat ein Text Feld.
- Ich klicke auf den Knopf und ich kann die Farbe wàhlen. Wie man das
von Grafikprogrammen kennt.
- Der Text vom Textfeld wird entsprechend farbig.

Meine Frage nun:
- Kann ich irgenwie auf diese Farb-Wahl-Komponenten von Word (z.B für
die Schriftfarbe) zugreifen?
oder
- Gibt es ein Farbwàhler als Formfeld?
- Wie macht ihr das?

Der Rest sollte kein Problem sein :-)

Gruss
Oliver
 

Lesen sie die antworten

#1 Thomas Gahler
09/06/2008 - 16:48 | Warnen spam
Hallo Oliver


Meine Frage nun:
- Kann ich irgenwie auf diese Farb-Wahl-Komponenten von Word
(z.B für die Schriftfarbe) zugreifen?
oder
- Gibt es ein Farbwàhler als Formfeld?
- Wie macht ihr das?


Ich verwende das API für den CommonDialog.

Schau dir mal den Code an (habe alles überflüssige von mir raus
geschnippselt).



'
Option Explicit

'API-Call um den Handle des aktiven Fensters festzustellen.
Private Declare Function GetActiveWindow Lib "user32" () As Long

'API-Call zum aufrufen des Dialoges «Farben» (CommenDialog),
'mit Definition der zugehörigen Datenstruktur.
Private Declare Function ChooseColorAPI Lib "comdlg32.dll" Alias
"ChooseColorA" (pChoosecolor As CHOOSECOLOR) As Long
Private Type CHOOSECOLOR
lStructSize As Long
hwndOwner As Long
hInstance As Long
rgbResult As Long
lpCustColors As String
flags As Long
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type

Private Sub CommandButton1_Click()
Const tgBENUTZER_FARBEN As String = "÷o,ûè`»è`?æ"oíët­íÌ-éÜa°ûÐÄüâ-Öì'¶ñ·Î÷õ©ÇóÚµðì¦Î"

Dim cc As CHOOSECOLOR
Dim CustomColors() As Byte
Dim lReturn As Long
Dim iZàhler As Integer
Dim iPosition As Integer
Dim cBenutzerFarben As String

'Werte vorbelegen.
cBenutzerFarben = tgBENUTZER_FARBEN

'Das Format von 'lpCustColors' besteht aus 16 Farben welche mit 3 RGB-Werten
definert
'werden, jeder Wert wird mit einem 0 (Null) getrennt. Somit muss das Array
'CustomColors()'
'aus 64 Werten bestehen 16*(3+1) = 64 (also von 0 bis 63,
'xxx0yyy0...0zzz0').
'Benutzerdefinierte Farben zuerst auf schwarz setzen.
ReDim CustomColors(0 To 63) As Byte
For iZàhler = LBound(CustomColors) To UBound(CustomColors)
CustomColors(iZàhler) = 0
Next iZàhler
'Benutzerdefinierte Farben mit den eigenen Werten belegen. Die Konstante
'bkBENUTZER_FARBEN'
'besteht nur aus den eigentlichen Werten ('xxxyyy...zzz') die 0 (Null)
wird in der
'FOR-Schleife hinzugefügt ('xxx0yyy0...0zzz0').
For iZàhler = LBound(CustomColors) + 1 To UBound(CustomColors) + 1
If iZàhler Mod 4 <> 0 Then
iPosition = iPosition + 1
CustomColors(iZàhler - 1) = Asc(Mid$(cBenutzerFarben, iPosition,
1))
Else
CustomColors(iZàhler - 1) = 0
End If
Next iZàhler

'Datenstruktur der Funktion 'ChooseColorAPI' vorbelegen.
cc.lStructSize = Len(cc)
cc.hwndOwner = funcGetActiveWindow()
cc.hInstance = 0
cc.lpCustColors = StrConv(CustomColors, vbUnicode)
cc.flags = 0

'API-Call starten.
lReturn = ChooseColorAPI(cc)
If lReturn <> 0 Then
'Farben setzen
TextBox1.BackColor = cc.rgbResult
End If
End Sub

Public Function funcGetActiveWindow() As Long
'Mittels 'GetActiveWindow'-API den Handle des aktiven Fensters feststellen.
funcGetActiveWindow = GetActiveWindow()
End Function
'




Thomas Gahler
MVP für WordVBA
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows XP (SP2), Office XP (SP3)

Ähnliche fragen