Die in einer Zeichnunge verwendeten Farben lassen sich über die Farbtabelle darstellen oder auch verändern. Oftmals besteht aber der Wunsch eine Übersicht in Textform aller RGB Werte der Farben zu erhalten.
Einen solchen Export der Farbwerte in eine Textdatei kann man mit VBA Mitteln generieren. Damit die Ausgabedatei leichter ausgewertet werden kann, werde ich in dem folgenden Beispiel die Ausgabe in eine CSV Datei leiten, wobei eine solche CSV Datei auch eigentlich nur eine Textdatei ist, deren einzelnen Werte einer Zeile durch ein Symbol getrennt sind, dieses Symbol variiert jedoch je nach Ländereinstellung, das häufigste Symbol dafür ist ein Semikolon bzw. Komma.
Hier nun ein Beispiel einer Subroutine tbl2txt.
Declare Function GetLocaleInfo Lib "kernel32" Alias _ "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, _ ByVal lpLCData As String, ByVal cchData As Long) As Long Declare Function GetUserDefaultLCID% Lib "kernel32" () Public Const LOCALE_SLIST = &HC ' Diese Funktion liest aus, welcher Listenseperator für CSV Dateien verwendet werden muss Function GetListSeparator() As String Dim ListSeparator As String Dim iRetVal1 As Long Dim iRetVal2 As Long Dim lpLCDataVar As String Dim Position As Integer Dim Locale As Long GetListSeparator = ";" Locale = GetUserDefaultLCID() iRetVal1 = GetLocaleInfo(Locale, LOCALE_SLIST, lpLCDataVar, 0) ListSeparator = String$(iRetVal1, 0) iRetVal2 = GetLocaleInfo(Locale, LOCALE_SLIST, ListSeparator, iRetVal1) Position = InStr(ListSeparator, Chr$(0)) If Position > 0 Then ListSeparator = Left$(ListSeparator, Position - 1) GetListSeparator = ListSeparator End If End Function ' Zerlegt einen Long Wert in die RGB Anteile Private Sub ExtractRGB(ByVal longColor As Long, intRed As Byte, intGreen As Byte, intBlue As Byte) Dim lngColor As Long lngColor = longColor intRed = lngColor Mod &H100 lngColor = lngColor \ &H100 intGreen = lngColor Mod &H100 lngColor = lngColor \ &H100 intBlue = lngColor Mod &H100 End Sub ' Extrahiert Farben aus der aktuellen Farbtabelle Sub tbl2txt() Dim tbl As ColorTable Dim col() As Long Dim r As Byte, g As Byte, b As Byte Dim bg As Long Dim Sep As String ' das Trennzeichen bei .CSV Dateien auslesen Sep = GetListSeparator ' Farbtabelle der aktiven Zeichznunsgdatei auslesen Set tbl = ActiveDesignFile.ExtractColorTable col = tbl.GetColors ' Öffnen der SCV Datei für die Ausgabe Open ActiveDesignFile.FullName + "-rgb values.csv" For Output As #1 Print #1, "Number" + Sep + "Red" + Sep + "Green" + Sep + "Blue" ' Extrahiere jede Farbe der Farbtabelle und schreibe sie in die CSV Datei For i = LBound(col) To UBound(col) Call ExtractRGB(col(i), r, g, b) Print #1, Str(i) + Sep + Str(r) + Sep + Str(g) + Sep + Str(b) Next ' zuletzt die Hintergrundfarbe: bg = tbl.BackColor Call ExtractRGB(bg, r, g, b) Print #1, "BG" + Sep + Str(r) + Sep + Str(g) + Sep + Str(b) Close #1 End Sub
Die zusätzlichen Deklationen von Funktionen bzw. weiteren Subroutinen dienen zum Auslesen des Trennzeichens für CSV Dateien bzw. zum Zerlegen eine Long Wertes in die RGB Bestandteile in Byte.
Für die Standardfarbtabelle von MicroStation:
ergibt sich bei dieser VBA Routine folgende Ausgabe: