Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0024: Systemfarben auslesen und ändern

 von 

Beschreibung 

Um die Systemfarben zu ermitteln und um diese anschließend zu ändern ist diese Rountine hervorragend geeignet

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

GetSysColor, SetSysColors

Download:

Download des Beispielprojektes [2,69 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
' Die Komponente 'Microsoft Common Dialog Control 6.0 (SP3) (COMDLG32.OCX)' wird benötigt.

'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Standarddialog-Steuerelement "CommonDialog1"
' Steuerelement: Beschriftungsfeld "Label2" (Index von 0 bis 0)
' Steuerelement: Beschriftungsfeld "Label1" (Index von 0 bis 0)

Option Explicit

Private Declare Function GetSysColor Lib "user32" _
        (ByVal nIndex As Long) As Long
        
Private Declare Function SetSysColors Lib "user32" _
        (ByVal nChanges As Long, lpSysColor As Long, _
        lpColorValues As Long) As Long

Private CNum As Collection
Private CNam As Collection
Private CWrt As Collection

Private Sub Form_Load()
  Dim I%
  Dim xSPC&, ySPC&, X1&, X2&, Y&
  Const xGAP = 240
  Const yGAP = 30
  Set CNum = New Collection
  Set CNam = New Collection
  Set CWrt = New Collection
     
    '### Liste mit Konstanten füllen
    For I = 0 To 20
      CNum.Add I
    Next I
    CNum.Add 100
    CNum.Add -100
    
    '### Liste mit Erläuterungen füllen
    CNam.Add "Scrollbalken"
    CNam.Add "Desktop Hintergrund"
    CNam.Add "Aktive Titelleiste"
    CNam.Add "Inaktive Titelleiste"
    CNam.Add "System Menü"
    CNam.Add "Fenster Hintergrund"
    CNam.Add "Windows Rahmen"
    CNam.Add "System Menü Text"
    CNam.Add "Windows Text"
    CNam.Add "Titelleisten Text"
    CNam.Add "Aktiver Rahmen"
    CNam.Add "Inaktiver Rahmen"
    CNam.Add "Anwendumgensraum"
    CNam.Add "Hintergrund markierter Text"
    CNam.Add "Markierter Text"
    CNam.Add "Schaltflächen"
    CNam.Add "Schaltflächen zurückliegend"
    CNam.Add "Grauer Text"
    CNam.Add "Schaltflächentext"
    CNam.Add "Inaktiver Titelleisten Text"
    CNam.Add "Schaltflächen herrausragend"
    CNam.Add "Maximal"
    CNam.Add "Minimal"
        
    '### Systemfarben auslesen
    For I = 1 To CNam.Count
      CWrt.Add GetSysColor(CNum(I))
    Next I

    '### Farben auf dem Form arrangieren
    ySPC = Label2(0).Height + yGAP
    xSPC = Label1(0).Left + Label1(0).Width _
           - Label2(0).Left + xGAP
    
    Y = Label1(0).Top
    X1 = Label1(0).Left
    X2 = Label2(0).Left
    
    For I = 1 To CNam.Count
      Load Label1(I)
      With Label1(I)
        .Left = X1
        .Top = Y
        .Caption = CNam(I)
        .Visible = True
      End With

      Load Label2(I)
      With Label2(I)
        .Left = X2
        .Top = Y
        .BackColor = CWrt(I)
        .Visible = True
      End With

      If I Mod 12 = 0 Then
        X1 = X1 + xSPC
        X2 = X2 + xSPC
        Y = Label1(0).Top
      Else
        Y = Y + ySPC
      End If
    Next I

    '### Form in der Größe anpassen
    Me.Width = Label1(CNam.Count).Left + _
               Label1(CNam.Count).Width
               
    Me.Height = Me.Height - Me.ScaleHeight + _
                Label2(12).Top + Label2(12).Height _
                + 120
End Sub

Private Sub Label2_Click(Index As Integer)
  '### Farbe auswählen
  CommonDialog1.Color = CWrt(Index)
  CommonDialog1.Color = Label2(Index).BackColor
  CommonDialog1.ShowColor
  
  '### Farben ändern
  Call SetSysColors(1, CNum(Index), CommonDialog1.Color)
  Label2(Index).BackColor = CommonDialog1.Color
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 3 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Hugo am 28.01.2010 um 19:23

Fals man die übrigen Farben auch haben möchte, kann man sie aus der Registrierung auslesen.
Sie stehen hier: "HKEY_CURRENT_USER\Cotrol Panel\Colors"

Kommentar von Jonathan am 03.12.2003 um 13:34

Schöner Tipp
Allerdigns sind nicht alle Farben aufgeführt (2. Titelleistenfarbe), und die Beschriftungen sind z.T. unverständlich (Minimal z.B.)

Kommentar von F.Doerr am 16.11.2003 um 14:37

Damit die Farbe im FarbDialog auch ausgewählt ist, muss man die "Sub Label2_Click" noch wie folgt ergänzen.

Private Sub Label2_Click(Index As Integer)
'### Farbe auswählen
CommonDialog1.Flags = cdlCCRGBInit


MfG
F.Doerr