|
Ein Knoten-Element eines TreeView-Steuerelements bietet leider
keine eigene Enabled-Eigenschaft an. Aber immerhin können Sie die
Vordergrundfarbe eines Elements auf die Farbe setzen, mit der vom
System gesperrte Elemente allgemein angezeigt werden (vbGrayText).
Und Sie können auch das Symbol (Image) eines Elements auf ein die
Sperrung signalisierendes Symbol umschalten. Da allerdings keine
echte Sperrung erfolgt, müssen Sie schon selbst an den in Frage
kommenden Stellen prüfen, ob ein Element gesperrt oder nicht
dargestellt ist.
Zur Prüfung der Sperrung stellen Sie einfach fest, ob die
Vordergrundfarbe vbGrayText ist oder nicht:
Public Function NodeEnabled(Node As Node) As Boolean
NodeEnabled = Not CBool(Node.ForeColor = vbGrayText)
End Function
Das Setzen der Sperrung ist ein wenig aufwändiger. Der Prozedur
EnableNode übergeben Sie zunächst das betreffende Knoten-Element
und den gewünschten Enabled-Status.
Im nächsten optionalen Parameter geben Sie die Vordergrundfarbe
an, wenn das Element Enabled dargestellt werden soll. Sie können
hier aber auch eine der beiden SaveForeColorConstants angeben. Die
Konstante sfcWindowText (-1) gibt an, dass die in den
Bildschirmeigenschaften (und im TreeView standardmäßig
vorgegebene) Fenstertext-Farbe (vbWindowText) verwendet werden soll
(Voreinstellung). Sie können aber auch festlegen, dass der Wert der
Vordergrundfarbe beim sperren in der Tag-Eigenschaft des Elements
abgelegt wird, indem Sie bei jedem Aufruf die Konstante sfcStoreInTag
(-2) übergeben.
Im optionalen Parameter SetImage legen Sie fest, ob auch das
Symbol des Element den Sperrstatus anzeigen soll. Das entsprechende
Symbol muss dann natürlich auch in der dem TreeView zugeordneten
Imageliste enthalten sein. Am einfachsten ist es, wenn Sie für
dieses Symbol den gleichen Namen als Schlüssel verwenden wie für
das ungesperrte Symbol, und diesem nur einen Präfix voranstellen,
etwa die Zeichenfolge "dis". Sie können aber
auch eine beliebige andere Zeichenfolge wählen, die Sie dann im
letzten optionalen Parameter übergeben müssen (Voreinstellung ist hier
"dis").
Public Enum SaveForeColorConstants
sfcWindowText = -1
sfcStoreInTag = -2
End Enum
Public Sub EnableNode(Node As Node, _
ByVal New_Enabled As Boolean, _
Optional ByVal ForeColor As Long = sfcWindowText, _
Optional ByVal SetImage As Boolean, _
Optional DisabledPrefix As String = "dis")
Dim nEnabled As Boolean
nEnabled = NodeEnabled(Node)
Select Case nEnabled
Case New_Enabled
Case False
With Node
If SetImage Then
.Image = Mid$(.Image, Len(DisabledPrefix) + 1)
End If
If ForeColor > sfcWindowText Then
.ForeColor = ForeColor
ElseIf ForeColor = sfcWindowText Then
.ForeColor = vbWindowText
Else
.ForeColor = .Tag
End If
End With
Case True
With Node
If SetImage Then
.Image = DisabledPrefix & .Image
End If
If ForeColor < sfcWindowText Then
.Tag = .ForeColor
End If
.ForeColor = vbGrayText
End With
End Select
End Sub
|