Für das alternierende "Einfärben" von FlexGrid-Zeilen haben Sie sicher schon Lösungen gesehen. Dieser Tipp stellt Ihnen Funktionen zur Verfügung mit deren Anwendung Sie die Zeilen des Flexgrids in Abhängigkeit von den Werten einer "Schlüsselspalte" färben können. D.h., ändert sich der Wert in einem Tabellenfeld der Schlüsselspalte, wird die Zeile anders gefärbt; alle Zeilen mit dem gleichen Schlüsselwert erhalten die gleiche Farbe. Als erstes muss dafür ein Feld erstellt werden, das die Werte der Schlüsselspalte enthält, und zwar jeden Wert nur einmal. Folgende Funktion erstellt das Feld: ' Erzeugen eines Feldes mit den Werten einer FlexGrid-Spalte ' flGrid- das Flexgrid, das bearbeitet werden soll ' arrayCol- die Schlüsselspalte '----------------------------------------------------------- Public Function makeArrayFromCol(flGrid As MSFlexGrid, arrayCol As Long) Dim i&, idx& Dim feld() As String With flGrid ReDim feld(.Rows - .FixedRows - 1) idx = 0 For i = .FixedRows To .Rows - 1 feld(idx) = .TextMatrix(i, arrayCol) idx = idx + 1 Next i End With QuickSort feld, LBound(feld), UBound(feld) feld = RemoveDoubleValues(feld) makeArrayFromCol = feld End Function Sie sehen, dass hier die Funktion QuickSort zum Sortieren des Feldes (Tipp: QuickSort in VB), als auch die Funktion RemoveDoubleValues zum Beseitigen von doppelten Einträgen benutzt wird (Tipp: Andys VisualBasic Tipps). Als nächstes benötigt man ein zu dem eben erzeugten Werte-Feld ein "Parallel-Feld", das dem jeweiligen Schlüsselwert einen Farbwert für den Zeilenhintergrund zuordnet. Wichtig: das Feld "farbPalette" muss als Public vereinbart werden. ' Erzeugen eines Feldes von Farbcodes ' anzElements- Anzahl der benötigten Feldelemente ' (in unserem Fall Ubound(des Wertefelds) ' param- ein Index für die Farbpalettenauswahl ' (siehe Bsp. In der Funktion setPalette) Public Function subArrayColors(anzElements As Integer, param As Integer) Dim feld() As Long Dim i% setPalette param ReDim feld(anzElements) For i = 0 To anzElements feld(i) = farbPalette(i) Next i subArrayColors = feld End Function Die folgende Funktion erzeugt das Feld "farbPalette". Ich habe dazu ein Modul, in dem ich mehrere Farbpaletten als Enumerationen gespeichert habe. Für diesen Tipp zeige ich nur eine Möglichkeit, und zwar mit der VB-Palette. ' Setzen der Long-Werte der Farbpalette ' art- Index einer auszuwählenden Farbpalette Public Sub setPalette(art As Integer) Select Case art ' ................................. Case 2 farbPalette = Array( _ palColor1, palColor2, palColor3, palColor4, palColor5, palColor6, _ palColor7, palColor8, palColor9, palColor10, palColor11, palColor12, _ palColor13, palColor14, palColor15, palColor16, palColor17, palColor18, _ palColor19, palColor20, palColor21, palColor22, palColor23, palColor24, _ palColor25, palColor26, palColor27, palColor28, palColor29, palColor30, _ palColor31, palColor32, palColor33, palColor34, palColor35, palColor36, _ palColor37, palColor38, palColor39, palColor40, palColor41, palColor42, _ palColor43, palColor44, palColor45, palColor46, palColor47, palColor48) ' ................................. End Select End Sub Und die zugehörige Enumeration: Dim farbPakette As Variant Public Enum paletteColors palColor1 = &HFFFFFF palColor2 = &HC0C0FF palColor3 = &HC0E0FF palColor4 = &HC0FFFF palColor5 = &HC0FFC0 palColor6 = &HFFFFC0 palColor7 = &HFFC0C0 palColor8 = &HFFC0FF palColor9 = &HE0E0E0 palColor10 = &H8080FF palColor11 = &H80C0FF palColor12 = &H80FFFF palColor13 = &H80FF80 palColor14 = &HFFFF80 palColor15 = &HFF8080 palColor16 = &HFF80FF palColor17 = &HC0C0C0 palColor18 = &HFF& palColor19 = &H80FF& palColor20 = &HFFFF& palColor21 = &HFF00& palColor22 = &HFFFF00 palColor23 = &HFF0000 palColor24 = &HFF00FF palColor25 = &H808080 palColor26 = &HC0& palColor27 = &H40C0& palColor28 = &HC0C0& palColor29 = &HC000& palColor30 = &HC0C000 palColor31 = &HC00000 palColor32 = &HC000C0 palColor33 = &H404040 palColor34 = &H80& palColor35 = &H4080& palColor36 = &H8080& palColor37 = &H8000& palColor38 = &H808000 palColor39 = &H800000 palColor40 = &H800080 palColor41 = &H0& palColor42 = &H40& palColor43 = &H404080 palColor44 = &H4040& palColor45 = &H4000& palColor46 = &H404000 palColor47 = &H400000 palColor48 = &H400040 End Enum Sind beide Felder erstellt, kann das Flexgrid mit der folgenden Funktion farbig erstellt werden: ' Erzeugen gefärbter Zeilen anhand von Werten in einer Spalte '--------------------------------------------------------------- ' flGrid- das FlexGrid, ' compCol- die Spalte mit den Vergleichswerten, ' werteFeld- ein Feld mit den Vergleichswerten, ' colorFeld- ein Feld mit den Farbwerten, ' defaultColor- die Normalfarbe ' compMethod- die Vergleichsmethode („all“- ganzer Wert, „in“- Teil des Werts) Public Sub coloredOfValue(flGrid As MSFlexGrid, _ compCol As Long, _ werteFeld As Variant, _ colorFeld As Variant, _ defaultColor As Long, _ compMethod As String) Dim i&, j&, cColor, fColor With flGrid .Redraw = False .BackColor = defaultColor .FillStyle = flexFillRepeat For i = .FixedRows To .Rows - 1 cColor = defaultColor .Row = i For j = 0 To UBound(werteFeld) If compMethod = "all" Then If werteFeld(j) = .TextMatrix(.Row, compCol) Then cColor = colorFeld(j) End If Else If InStr(.TextMatrix(.Row, compCol), werteFeld(j)) > 0 Then cColor = colorFeld(j) End If End If Next j .Col = .FixedCols .ColSel = .Cols - 1 .CellBackColor = cColor fColor = GegenFarbe_sw(cColor) .CellForeColor = fColor Next i .FillStyle = flexFillSingle .ScrollTrack = True .Redraw = True End With End Sub Diese Funktion enthält eine weitere Funktion: Nun zeige ich nur noch, wie die Aufrufe aussehen könnten, die Sie immer dann ausführen sollten, wenn das Flexgrid geladen oder verändert wird. Dim keyFeld() As String Dim farbFeld() As Long keyFeld = makeArrayFromCol(MSFlexgrid1, 1) ' ....2- param für dieses Beispiel im Tipp farbFeld = subArrayColors(UBound(keyFeld), 2) coloredOfValue MSFlexgrid1, 1, keyFeld, farbFeld, palColor1, "all" Wichtig zu sagen ist, dass die hier als Beispiel gezeigte Palette nur 48 Farben beinhaltet. Sind in Ihrer Anwendung wesentlich mehr unterschiedliche Schlüsselwerte zu erwarten, müssen Sie die Funktion zum Erzeugen der Farbpalette verändern, doch es gibt ja Millionen Farben im System... Nun kann ich nur noch viel Spaß beim Colorieren wünschen! Dieser Tipp wurde bereits 14.533 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
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. |
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 April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. |
||||||||||||||||
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. |