PDA

Vollständige Version anzeigen : Farbauswahl als CommandbarControl bauen


PapaSchlumpf
20.07.2009, 09:11
Hi
hat schon mal jemand soetwas gemacht?
Also eine kleine Farbauswahl als CommandBarControl?

Die integrierte Farbauswahl aus der Symbolleiste "Formatting" kann ich nicht verwenden, da sie nicht immer zur Verfügung steht (z.B. bei Formularschutz).

Das msoControlGrid, das dahinter steht, lässt sich ja leider programmatisch nicht nachbauen.

Für Anregungen und Tipps sehr dankbar.

Gruß
Christian

Schreibbüro
23.07.2009, 21:47
Hallo Christian,

nicht direkt eine Farbauswahl, aber so ähnlich. Sieh Dir mal meine Textmarker-Symbolleiste an. Die Symbolleiste ist im Prinzip die Farbauswahl, jede Farbe hat ein Control:

Textmarker-Symbolleiste (http://www.schreibbuero-richter.de/word/textmarker.html)

Das ist allerdings nur das Endprodukt. Um die Controls zu erzeugen, brauchst Du noch diese hier, die natürlich nur einmal abzulaufen braucht:

Sub SymbolschaltflaechenErstellen()
' muss nur einmal ablaufen

Dim ctl As Office.CommandBarButton
Dim Leiste As CommandBar

CustomizationContext = ThisDocument
Set Leiste = CommandBars.Add(Name:="Textmarker", Position:=msoBarLeft)
Leiste.Visible = True

Set ctl = Leiste.Controls.Add(Type:=msoControlButton, _
Parameter:="Keine")
HervorhebungsSchaltflaechen ctl
Set ctl = Leiste.Controls.Add(Type:=msoControlButton, _
Parameter:="Gelb")
HervorhebungsSchaltflaechen ctl
Set ctl = Leiste.Controls.Add(Type:=msoControlButton, _
Parameter:="Hellgrün")
HervorhebungsSchaltflaechen ctl
Set ctl = Leiste.Controls.Add(Type:=msoControlButton, _
Parameter:="Pink")
HervorhebungsSchaltflaechen ctl
Set ctl = Leiste.Controls.Add(Type:=msoControlButton, _
Parameter:="Türkis")
HervorhebungsSchaltflaechen ctl
Set ctl = Leiste.Controls.Add(Type:=msoControlButton, _
Parameter:="Rot")
HervorhebungsSchaltflaechen ctl
Set ctl = Leiste.Controls.Add(Type:=msoControlButton, _
Parameter:="Grau25")
HervorhebungsSchaltflaechen ctl
Set ctl = Leiste.Controls.Add(Type:=msoControlButton, _
Parameter:="Grau50")
HervorhebungsSchaltflaechen ctl
Set ctl = Leiste.Controls.Add(Type:=msoControlButton, _
Parameter:="Blau")
HervorhebungsSchaltflaechen ctl
Set ctl = Leiste.Controls.Add(Type:=msoControlButton, _
Parameter:="Weiß")
HervorhebungsSchaltflaechen ctl
Set ctl = Leiste.Controls.Add(Type:=msoControlButton, _
Parameter:="Dunkelblau")
HervorhebungsSchaltflaechen ctl
Set ctl = Leiste.Controls.Add(Type:=msoControlButton, _
Parameter:="Dunkelrot")
HervorhebungsSchaltflaechen ctl
Set ctl = Leiste.Controls.Add(Type:=msoControlButton, _
Parameter:="Ocker")
HervorhebungsSchaltflaechen ctl
Set ctl = Leiste.Controls.Add(Type:=msoControlButton, _
Parameter:="Blaugrün")
HervorhebungsSchaltflaechen ctl
Set ctl = Leiste.Controls.Add(Type:=msoControlButton, _
Parameter:="Grün")
HervorhebungsSchaltflaechen ctl
Set ctl = Leiste.Controls.Add(Type:=msoControlButton, _
Parameter:="Violett")
HervorhebungsSchaltflaechen ctl
Set ctl = Leiste.Controls.Add(Type:=msoControlButton, _
Parameter:="Schwarz")
HervorhebungsSchaltflaechen ctl

End Sub

Sub HervorhebungsSchaltflaechen(ctl As Office.CommandBarButton)

Dim sFarbe As String

sFarbe = ctl.Parameter
ctl.Caption = sFarbe
ctl.OnAction = "TextHervorheben"
ctl.Style = msoButtonCaption
ctl.TooltipText = sFarbe

End Sub

Etwa analog könntest Du natürlich eine Farbauswahl für die Schrift machen. Durch die eigene Symbolleiste steht die Auswahl auch bei eingeschaltetem Formularschutz zur Verfügung.

Gruß
Lisa

PapaSchlumpf
24.07.2009, 07:23
Hallo Lisa,

danke.
Allerdings stimmt das Makro wohl nicht mit dem über ein, das du für die Symbolleiste verwendest, da du ja die Farben wohl direkt eingefügst hast, aber nicht per Makro - oder?

Gruß
Christian

Schreibbüro
24.07.2009, 08:33
Hallo Christian,

doch, die in der *.dot enthaltene Symbolleiste habe ich mit dem Makro bestückt. Das ist auch notwendig, um die jeweilige OnAction-Prozedur hinzuzufügen (kleine Sub). Allerdings habe ich dann hinterher in der Symbolleiste noch Kosmetik gemacht und die Farb-Vierecke hinzugefügt mit der Farbe. (Möglicherweise geht das auch mit VBA, ich hab es halt gleich "von Hand" über Extras - Anpassen - Rechtsklick auf den Button - Symbol bearbeiten gemacht.)
Das meinte ich mit "muss nur einmal ablaufen". Die Prozedur SymbolschaltflaechenErstellen erstellt wirklich die Symbolschaltflächen und verknüpft sie jeweils mit dem Makro, das braucht man jedoch nur einmal (jedenfalls bis Word 2003).

Die in der *.dot enthaltene Prozedur TextHervorheben ist bei jeder der Schaltflächen hinterlegt, reagiert aber abhängig vom übergebenen Parameter (nämlich der Farbe, ActionControl) anders.

Analog könntest Du eine Symbolleiste mit x Farb-Controls bauen, die bei OnAction hinterlegte Prozedur könnte bei Dir natürlich nicht HighlightColorIndex auslösen, sondern die FontColor ändern.

Dabei fällt mir gerade noch etwas auf: Wenn Du das im geschützten Formular verwenden willst, müsste innerhalb der bei OnAction hinterlegten Prozedur natürlich noch der Formularschutz aufgehoben, dann die Farbe geändert und hinterher der Formularschutz mit Schalter NoReset:=True wieder gesetzt werden.

Gruß
Lisa

PapaSchlumpf
24.07.2009, 08:42
Hallo Lisa,

der gesamte Ablauf ist mir schon klar und funktioniert auch so.
Ich tüfftel grade daran, wie ich die Farbauswahl realisiert bekomme (komplett per VBA).
Und die händische Anpassung der Schaltfläche mit Farbe ist wohl eben nicht per VBA machbar.
Im Moment verfolge ich eine Idee mit PasteFace und einer versteckten Userform...

Gruß
Christian

Hotte
26.07.2009, 12:26
Hallo Christian,

ich hab mal ein wenig getüftelt. Also so ganz einfach geht das ja nicht ... udn ist ein wenig mit "Fleißarbeit" verbunden.

Schau Dir mal das Beispiel im Anhang an.

Man kann es natürlich werweitern - und wegen der "Fleißarbeit" - alle Farben habe ich nicht erstellt. Das müsste man noch machen. Aber sind sind etliche bereits drin - einfach mal die Farben testen. Die MsgBox hab ich nur als Info dringelassen...

Das plazieren der Userform müsste man auch nochmal "überarbeiten"... Sollte die Symbolleiste recht weit nach rechts rutschen - schiebt er die Userform zu weit nach rechts raus.

Aber das bekommst Du bestimmt hin...:D

Hilft Dir dieser "Ansatz" schon weiter oder hast Du es schon selbst gelöst?! Vielleicht lässt sich da smit der "unsichtbaren" Symbolleiste ggf. auch anders lösen...

PapaSchlumpf
26.07.2009, 17:58
Danke,
werde ich mir aber erst nach meinem Urlaub anschauen können.

Gruß
Christian

peppi
26.07.2009, 18:09
Hallo Christian,

wie Urlaub? Hast Du hier einen Urlaubszettel eingereicht? Ich kann mich nicht erinnern, den unterschrieben zu haben :grins: ...

Schöne Zeit, gute Erholung...
<br>

Hotte
26.07.2009, 18:22
Hi Christian,

na - da wünsche ich Dir auch einen schönen Urlaub....:)

PapaSchlumpf
26.07.2009, 19:17
Gaby,

doch, Weihnachten hatte ich für die nächsten 4 Tage doch meinen ganzen Jahresurlaub eingereicht - vergessen?

Gruß
Christian

peppi
26.07.2009, 21:12
Hallo Christian,

stimmt... Das hatte ich völlig vergessen... ;) - Tja, mit zunehmendem Alter setzt auch der gemeine Schusselheimer immer mehr ein... :grins:

Lass es Dir gut gehen und komm gesund und munter wieder zurück... Wir freuen uns auf Dich...
<br>