Annahme: Sie haben einen RTF-Editor programmiert - mit allem, was dazu gehört, also auch Schriftart-Wechsel, verschiedene Schriftgrößen und Attribute, sowie Unterstützung verschiedener Schriftfarben. Und schon sind wir beim Thema: Auswahl der Schriftfarbe Wenn Sie nicht gerade auf Tools von Drittherstellern oder Freeware-Komponenten zurückgreifen möchten, dann werden Sie wohl zur Auswahl der Schriftfarbe das Common Dialog Controls von Microsoft verwenden. Per Menübefehl aktivieren Sie also den Standard-Dialog "Farbe auswählen": Private Sub mnuColor_Click() On Local Error Resume Next With CommonDialog1 .ShowColor If Err = 0 Then RTFText.SelColor = .Color End If End With End Sub Klar - kann man so machen. Ein Vorteil ist auf jeden Fall, dass sich über den Standard-Dialog eine x-beliebige Farbe auswählen lässt. Jetzt würden Sie aber gerne die häufigsten oder wichtigsten Grundfarben zur direkten Auswahl in einer aufklappbaren ListBox anbieten, so wie es viele andere Anwendungen ja auch vorsehen. Aber wie? Die Standard-ComboBox eignet sich hierfür nicht, da man hier ja nur Text anzeigen kann. Sie möchten aber anstelle von Text viele kleine unterschiedliche Farben (Rechtecke) anzeigen. Was nun? Na ja, dann verzichten Sie halt doch auf die ColorComboBox. Oder? Halt! Da gibt es doch noch ein anderes ComboBox-Control - und zwar die ImageComboBox. Genau!. Mit der ImageComboBox lässt sich ja vor jedem Eintrag ein zusätzliches Bildsymbol darstellen. Das ist es! Wir verzichten auf den Text und zeigen nur das Bildsymbol an - dann hätten wir doch die gewünschte ColorComboBox. Also, ran an's Werk! Das ImageCombo- und ImageList-Control sind Bestandteile der Windows Common Controls. Demnach müssen wir die MSCOMCTL.OCX-Komponente über das "Projekt - Komponenten" unserem Projekt hinzufügen. Die PictureBox verwenden wir, um die einzelnen Farb-Quadrate zu erstellen und das so erstellte Bild der ImageList (dem Abbildungs-Steuerelement) als neues Bild hinzuzufügen. Fügen Sie nun die drei Controls auf Ihre Form und benennen Sie sie folgendermassen: Und hier endlich der Code Private Sub Form_Load() ' Farben initialisieren InitColors InitColorCombo End Sub Private Sub InitColors() ' Farb-Auswahl erstellen Dim I As Long ReDim lColor(15) As Long lColor(0) = &HFFFFFF ' Weiss lColor(1) = &HE0E0E0 ' Hellgrau lColor(2) = &H808080 ' Grau lColor(3) = &H0& ' Schwarz lColor(4) = &HFF0000 ' Blau lColor(5) = &HFFFF00 ' Zyan (Türkis) lColor(6) = &HFF00& ' Grün lColor(7) = &HFF00FF ' Magenta lColor(8) = &HFF& ' Rot lColor(9) = &HFFFF& ' Gelb lColor(10) = &H800000 ' Dunkelblau lColor(11) = &H808000 ' Blaugrün lColor(12) = &H8000& ' Dunkelgrün lColor(13) = &H800080 ' Violett lColor(14) = &H80& ' Dunkelrot lColor(15) = &H8080& ' Ocker ' PictureBox unsichtbar machen picColor.Visible = False For I = 0 To UBound(lColor) With picColor ' PictureBox mit der Farbe füllen .AutoRedraw = True .Cls picColor.Line (0, 0)-(.ScaleWidth, .ScaleHeight), lColor(I), BF ' Jetzt noch einen Rahmen aussenrum picColor.Line (0, 0)-(.ScaleWidth, .ScaleHeight), vbBlack, B ' und ab in die ImageList ;-) .Picture = .Image .AutoRedraw = False ImageList1.ListImages.Add , "H" & Hex$(lColor(I)), _ .Picture End With Next I End Sub Private Sub InitColorCombo() ' ImageCombo mit den Farben füllen Dim I As Long ' zunächst alle Einträge löschen imgColorCombo.ComboItems.Clear ' jetzt die Abbildungsliste zuweisen imgColorCombo.ImageList = ImageList1 ' und zu guter Letzt die Einträge erstellen For I = 1 To ImageList1.ListImages.Count With ImageList1.ListImages(I) imgColorCombo.ComboItems.Add , .Key, "", I, I End With Next I End Sub Wird nun eine Farbe über unsere neue ColorComboBox ausgewählt, so erfolgt die Farbzuweisung über die Key-Eigenschaft. In dieser haben wir nämlich den Farbwert gespeichert - als Hexadezimalwert. Die Umrechnung von hexadezimal nach dezimal übernimmt die CLng()-Funktion. Private Sub ImageCombo1_Click() ' Farbewert ermitteln Dim lngColor As Long With imgColorCombo.SelectedItem lngColor = CLng("&" & .Key) RTFText.SelColor = lngColor End With End Sub Dieser Tipp wurde bereits 29.020 mal aufgerufen.
Anzeige
![]() ![]() ![]() (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 ![]() Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats ![]() Dieter Otter sevTabStrip: Rechtsklick auf Reiter erkennen Eine Funktion, mit der sich prüfen lässt, auf welchen Tab-Reiter ein Mausklick erfolgte Neu! sevPopUp 2.0 ![]() Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... |
||||||||||||||||
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. |