ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 18.05.2000

Diese Seite wurde zuletzt aktualisiert am 18.05.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Bunte Bäume

Zurück...


Anzeige

(-hg) mailto:hg_treeviewbackcolor@aboutvb.de

Für TreeView-Steuerelemente bietet Visual Basic keine BackColor-Eigenschaft an, über die Sie die Hintergrundfläche durchgehend einfärben könnten. Lediglich ab Visual Basic 6 können Sie die Hintergrundfarbe jedes einzelnen Knotens festlegen.

Wie so oft können Sie aber auch hier auf das API zurückgreifen. Über die API-Funktion MSDN Library - API SendMessageSendMessage und der Nachricht MSDN Library - API TVM_SETBKCOLORTVM_SETBKCOLOR teilen Sie dem TreeView-Steuerelement die gewünschte Hintergrundfarbe mit. Allerdings hat das TreeView-Steuerelement in Visual Basic 6 (aus MSCOMCTL.OCX) einen kleinen Bug, der sich anscheinend nicht beheben lässt: Der Hintergrund wird teilweise nicht vollständig eingefärbt (siehe Illustration), wenn die Verzweigungslinien angezeigt werden (Wert der Style-Eigenschaft größer 4). In Visual Basic 5 (COMCTL32.OCX) gibt es dagegen keine Probleme.


Über das API lässt sich der Hintergrund eines TreeView-Steuerelements leicht einfärben. In der Version aus Visual Basic 6 wird der Hintergrund jedoch nicht sauber eingefärbt, wenn die Verzweigungslinien angezeigt werden.

Die notwendigen Deklarationen lauten für beide Versionen gleich:

Private Declare Function SendMessage Lib "user32" _
 Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
 ByVal wParam As Long, lParam As Any) As Long
Public Declare Function OleTranslateColor Lib "oleaut32.dll" _
 (ByVal lOleColor As Long, ByVal lHPalette As Long, _
 ByRef lColorRef As Long) As Long

Private Const TVM_SETBKCOLOR = 4381&

Die API-Funktion MSDN Library - API OleTranslateColorOleTranslateColor benötigen wir, um die Konstanten der Systemfarben in die tatsächlichen Farbwerte umzusetzen (siehe Systemfarben-Dolmetscher"Systemfarben-Dolmetscher").

Die Hilfsfunktion für die 5er-Version des TreeView-Steuerelements kann sich darauf beschränken, die Hintergrundfarbe der gegebenenfalls verbundenen ImageList auf die gewünschte Hintergrundfarbe zu setzen, eine übergebene Systemfarbe gegebenenfalls umzusetzen und die besagte Nachricht abzusenden. Sie übergeben das betreffende TreeView-Steuerelement und optional die gewünschte Hintergrundfarbe - voreingestellt ist die Systemfarbe vbWindowBackground.

Public Sub TreeViewBackColor(tvw As TreeView, _
 Optional ByVal BackColor As OLE_COLOR = vbWindowBackground)
  Dim nIL As ImageList
  Dim nBackColor As Long
  
  With tvw
    Set nIL = tvw.ImageList
    If Not (nIL Is Nothing) Then
      nIL.BackColor = BackColor
    End If
    OleTranslateColor BackColor, 0&, nBackColor
    SendMessage .hwnd, TVM_SETBKCOLOR, 0, ByVal nBackColor
  End With
End Sub

Der Aufwand für die 6er-Version des TreeView-Steuerelements ist dagegen ein wenig höher. Zunächst wird hier ebenfalls die Hintergrundfarbe der ImageList nachgeführt. Wegen einer weiteren Unsauberkeit (um nicht von einem weiteren Bug zu sprechen) muss die Style-Eigenschaft vorübergehend auf 0 gesetzt und nach dem Senden der Nachricht wieder restauriert werden. Dazu kommt, dass die Hintergrundflächen der Knoten nicht mehr automatisch mit eingefärbt werden, da Sie in der 6er-Version ja beliebig einzeln gesetzt werden können. Über den zusätzlichen optionalen Parameter NodesBackColor geben Sie an, ob die Knoten nicht eingefärbt werden sollen (False) - die Voreinstellung ist True. Beim Hinzufügen von weiteren Knoten nach dem Einfärben sollten Sie daran denken, deren Hintergrundfarbe ebenfalls auf die Hintergrundfarbe zu setzen. Falls Sie von der Möglichkeit Gebrauch machen wollen, einzelne Knoten abweichend einzufärben, werden Sie die Funktion wohl modifizieren müssen. Da aber die Bedingungen für die Einfärbungen von den Gegebenheiten Ihrer Anwendung abhängen, lässt sich da kaum ein allgemeingültiges Beispiel aufzeigen.

Public Sub TreeViewBackColor(tvw As TreeView, _
 Optional ByVal BackColor As OLE_COLOR = vbWindowBackground, _
 Optional ByVal NodesBackColor As Boolean = True)

  Dim nNode As Node
  Dim nIL As ImageList
  Dim nBackColor As Long
  Dim nStyle As Long
  
  With tvw
    Set nIL = tvw.ImageList
    If Not (nIL Is Nothing) Then
      nIL.BackColor = BackColor
    End If
    nStyle = .Style
    OleTranslateColor BackColor, 0&, nBackColor
    SendMessage .hwnd, TVM_SETBKCOLOR, 0, ByVal nBackColor
    .Style = 0
    .Style = nStyle
    If NodesBackColor Then
      For Each nNode In .Nodes
         nNode.BackColor = BackColor
      Next nNode
    End If
  End With
End Sub

Beispiel-Projekte für VB 5 und VB 6 (treeviewbackcolor.zip - ca. 8,9 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer