Wollten Sie schon immer einmal den Anwender mit einer ComboBox überraschen, in der die einzelnen Einträge mehrfarbig angezeigt werden?
Stimmt! Mit der Standard ComboBox lässt sich das auch nicht so ohne Weiteres machen! Verwenden Sie aber anstelle der VB-ComboBox das ImageComboBox-Control aus den "Windows Common Controls 6.0" lässt sich das ohne viel Aufwand realisieren. Wie der Name schon sagt, lassen sich mit der ImageComboBox Texte und Bilder anzeigen. Was liegt also näher, die farbigen Texte einfach als Bilder zu erstellen und zu verwenden? Für das nachfolgende Beispiel benötigen Sie:
Die Anordnung der Controls spielt keine Rolle; das übernehmen wir in unserem Beispiel zur Laufzeit. Fügen Sie der Form jetzt noch folgenden Code hinzu: Option Explicit Private Const cKey = "|" Private Sub Form_Load() Dim i As Long, lDist As Long lDist = 240 ' ComboBox positionieren With imgColorTextCombo .Top = lDist .Left = lDist .Width = ScaleWidth - (2 * lDist) .ToolTipText = "<ESC> setzt die Auswahl zurück" End With ' Ausgabe-Label positionieren With lblClickOutput .Top = imgColorTextCombo.Top + imgColorTextCombo.Height + lDist .Left = lDist .Caption = "" .AutoSize = True End With ' Schließen-Schaltfläche positionieren With cmdClose .Cancel = False .Caption = "Schließen" .Height = 2 * lDist .Width = TextWidth(.Caption) + (2 * lDist) .Top = ScaleHeight - lDist - .Height .Left = ScaleWidth - lDist - .Width End With ' initialisieren InitColorTextCombo ' ein paar Testeinträge in unterschiedlichen Farben ' 1. Eintrag i = AddColorText("Rot, ", vbRed) AddColorText " Blau, ", vbBlue, i AddColorText " Grün", vbGreen, i ' 2. Eintrag i = AddColorText("Schwarz, ", vbBlack) AddColorText " Lila, ", vbMagenta, i AddColorText " Gelb", vbYellow, i ' Combobox füllen FillColorTextCombo End Sub Private Sub InitColorTextCombo() On Error Resume Next With imgColorTextCombo ' Einträge löschen .ComboItems.Clear ' Combobox sperren .Locked = True ' PictureBox anpassen picColorText.Visible = False picColorText.BorderStyle = vbBSNone picColorText.Height = .Height - (8 * Screen.TwipsPerPixelY) picColorText.Width = .Width - (8 * Screen.TwipsPerPixelY) End With ' ImageList löschen ImageList1.ListImages.Clear ' Verhindert die Markierung innerhalb der Combobox 'ImageList1.MaskColor = imgColorTextCombo.BackColor End Sub ' Farbigen Text erstellen Private Function AddColorText(ByVal sText As String, _ Optional ByVal Color As OLE_COLOR = vbWindowText, _ Optional ByVal Index As Long = 0) As Long Dim i As Long Dim s As String With picColorText ' PictureBox löschen .AutoRedraw = True .Picture = Nothing .Cls .BackColor = imgColorTextCombo.BackColor If Index > 0 Then ' neuen Text an bestehenden Eintrag anhängen s = ImageList1.ListImages(Index).Key s = Mid$(s, Len(cKey) + 1, Len(s)) Set .Picture = ImageList1.ListImages(Index).Picture ' Textausgabe-Position festlegen .CurrentX = 2 * Screen.TwipsPerPixelX + (.TextWidth(s)) .CurrentY = (.ScaleHeight - .TextHeight(sText)) \ 2 ' Textfarbe .ForeColor = Color ' Text in PictureBox ausgeben picColorText.Print sText ' Wichtig! ' Der Picture-Eigenschaft muss das Bild aus "Image" zugewiesen werden .Picture = .Image ' bestehenden Eintrag löschen ImageList1.ListImages.Remove Index ' Neuen Eintrag (Bild) an ursprünglicher Position einfügen i = ImageList1.ListImages.Add(Index, cKey & s & sText, .Picture).Index Else ' neuen farbigen Text eintrag erstellen .CurrentX = 2 * Screen.TwipsPerPixelX .CurrentY = (.ScaleHeight - .TextHeight(sText)) \ 2 ' Textfarbe festlegen .ForeColor = Color ' Text in PictureBox ausgeben picColorText.Print sText ' Wichtig! ' Der Picture-Eigenschaft muss das Bild aus "Image" zugewiesen werden .Picture = .Image ' Neuen Eintrag (Bild) der ImageList zuweisen i = ImageList1.ListImages.Add(, cKey & sText, .Picture).Index End If .AutoRedraw = False End With ' Index des aktuellen Bildes in der ImageList zurückgeben AddColorText = i End Function Private Sub FillColorTextCombo() Dim i As Long With imgColorTextCombo ' zunächst alle Einträge löschen .ComboItems.Clear ' jetzt die Abbildungsliste zuweisen .ImageList = ImageList1 ' und zu guter Letzt die Einträge erstellen For i = 1 To ImageList1.ListImages.Count With ImageList1.ListImages(i) imgColorTextCombo.ComboItems.Add , .Key, "", i, i End With Next i End With End Sub Private Sub imgColorTextCombo_Click() ' Auswahl im Klartext anzeigen ' hierzu wird die Key-Eigenschaft ausgelesen On Error Resume Next Dim s As String s = imgColorTextCombo.SelectedItem.Key s = Mid$(s, Len(cKey) + 1, Len(s)) lblClickOutput.Caption = IIf(Err.Number <> 0, "<nix ausgewählt>", s) End Sub Private Sub imgColorTextCombo_KeyPress(KeyAscii As Integer) ' Bei Tastendruck, Click-Event auslösen Call imgColorTextCombo_Click End Sub Private Sub cmdClose_Click() ' Beenden Unload Me End Sub Private Sub Form_Unload(Cancel As Integer) Set Form1 = Nothing End Sub Dieser Tipp wurde bereits 14.906 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 ![]() Manfred Bohn IndexOf für mehrdimensionale Arrays Die generische Funktion "IndexOf" ermittelt das erste Auftreten eines bestimmten Wertes in einem n-dimensionalen Array Neu! sevCoolbar 3.0 ![]() Professionelle Toolbars im modernen Design! Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access |
||||||||||||||||
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. |