vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Sch?tzen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2018
 
zurück
Rubrik: Controls · ComboBox   |   VB-Versionen: VB5, VB610.01.02
ColorComboBox - Farbauswahl

Ein häufig vermisstes Control: Eine ComboBox als ColorPicker. Wir zeigen wie sich eine solche Farbauswahl-Box realisieren lässt.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  25.015 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

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!
Wir brauchen: 1 x ImageComboBox, 1 x ImageList-Control und 1 x PictureBox

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:
ImageCombo - imgColorCombo
ImageList - ImageList1
PictureBox - picColor

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 25.015 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(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.
 
   

Druckansicht Druckansicht Copyright ©2000-2018 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel