Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  TreeView - Steuerelement

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
  
PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
Autor Thema:  TreeView - Steuerelement (3748 mal gelesen)
Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


Sehen Sie sich das Profil von Dirk.B an!   Senden Sie eine Private Message an Dirk.B  Schreiben Sie einen Gästebucheintrag für Dirk.B

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2021/2022
CAD+T
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 13. Mai. 2007 18:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


TreeView_01.jpg

 
Hallo zusammen!

Da mich das Steuerelement TreeView interessiert bin ich dabei mal so einiges auszuprobieren.
Ich möchte den Eintrag eines TreeViews zur Laufzeit ändern z.B. einen Pfad C:\Temp eingeben und dieser soll als Vorlage gespeichert werden.
Was muß ich da tun?

Ferner wäre es schön, wenn das entsprechende ChildNode erst beim anklicken eines CommandButton zur Konfiguration sichtbar wird.

Hier der vorläufige Code:

Code:

Dim RootNode As MSComctlLib.Node
Dim xNode As MSComctlLib.Node
Dim xNode1 As MSComctlLib.Node
Dim xNode2 As MSComctlLib.Node

TVStartMask.Nodes.Clear
TVStartMask.ImageList = StartMask.ImageList1

Set RootNode = TVStartMask.Nodes.Add(Text:="Blöcke", Image:=1, SelectedImage:=2)
    RootNode.Tag = "Blöcke"
    Set xNode = TVStartMask.Nodes.Add(RootNode.Index, tvwChild, Text:="Beleuchtung", Image:=1, SelectedImage:=2)
    xNode.Tag = "Beleuchtung"
        Set xNode1 = TVStartMask.Nodes.Add(xNode.Index, tvwChild, Text:="Deckenstrahler", Image:=1, SelectedImage:=2)
        xNode1.Tag = "Deckenstrahler"
            Set xNode2 = TVStartMask.Nodes.Add(xNode1.Index, tvwChild, , Image:=4, SelectedImage:=3)
            xNode2.Expanded = True


Genau gesagt geht es um diese Zeile:

Code:

Set xNode2 = TVStartMask.Nodes.Add(xNode1.Index, tvwChild, , Image:=4, SelectedImage:=3)
xNode2.Expanded = True

Vielen Dank im voraus für Eure Hilfe.

Gruß

Dirk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

Beiträge: 1360
Registriert: 24.07.2002

erstellt am: 13. Mai. 2007 19:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich

Hi Dirk,

Speicher den Pfad doch in der Registry bzw. in einer .ini-Datei. Das kannst dann ja nach belieben ändern.

Wenn du das Child-Node nicht sichtbar haben willst kannst du doch einfach die Eigenschaft expanded von true auf false setzen und nur das Parent-Node wird dir angezeigt.

Weiter Infos zum Treeview-Steuerelement findest du z.B. hier.

Edit: Kleiner Nachtrag:

Wenn du das Child-Node an ein bestimmtes Parent-Node anhängen willst, musst du dich durch die Nodes des Treeview-Elements bis zu dem bestimmten Node durchhangeln und dort das Child-Node anhängen.

Gruß, Carsten

[Diese Nachricht wurde von Carsten1210 am 13. Mai. 2007 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


Sehen Sie sich das Profil von Dirk.B an!   Senden Sie eine Private Message an Dirk.B  Schreiben Sie einen Gästebucheintrag für Dirk.B

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2021/2022
CAD+T
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 19. Mai. 2007 21:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Bild_01.jpg


Bild_02.jpg

 
Hallo Carsten!
Hallo Forum!

Mit dem Eintrag in die Registry ist OK, nur habe ich folgendes Problem dabei.
Aus der Case Auflistung wird nur der letzte übernommen, siehe dazu  auch die Bildchen.

Code:

Private Sub CmdbKonfig_Click() ' Ordner-Auswahl-Dialog aufrufen
    Dim oShell As Object
    Dim oFolder As Object
   
    Set oShell = CreateObject("Shell.Application")
    Set oFolder = oShell.BrowseForFolder(0, "Bitte einen Ordner auswählen", 1)

    Dim regfpad As String
    Dim Wert As String
    Dim a

Select Case xNode2.Tag
    Case "DeckenstrahlerKF"
        TVStartMask.SelectedItem.Text = oFolder.Self.Path
        regfpad = "HKEY_CURRENT_USER\Software\Autodesk\DB_Blockverwaltung\DeckenstrahlerKF"
        Wert = TVStartMask.SelectedItem.Text
        a = RegWrite(regfpad, Wert, "REG_SZ")

    Case "LeuchtstofflampenKF"
        TVStartMask.SelectedItem.Text = oFolder.Self.Path
        regfpad = "HKEY_CURRENT_USER\Software\Autodesk\DB_Blockverwaltung\LeuchtstofflampenKF"
        Wert = TVStartMask.SelectedItem.Text
        a = RegWrite(regfpad, Wert, "REG_SZ")
 
    Case "NV_StrahlerKF"
        TVStartMask.SelectedItem.Text = oFolder.Self.Path
        regfpad = "HKEY_CURRENT_USER\Software\Autodesk\DB_Blockverwaltung\NV_StrahlerKF"
        Wert = TVStartMask.SelectedItem.Text
        a = RegWrite(regfpad, Wert, "REG_SZ")

End Select
End Sub


Ferner die Frage, wie lese ich die Eintragungen aus der Registry unter UserForm_Initialize() in die entsprechenden xNode2.Text Zeilen ein?

Gruß

Dirk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

Beiträge: 1360
Registriert: 24.07.2002

erstellt am: 20. Mai. 2007 19:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich

Hi Dirk,

Wenn nur der letzte Reg-Eintrag ausgeführt wird, dann wird wahrscheinlich bei allen Treeview-Nodes der Tag-Eintrag der selbe sein. Sonst kann ich mir das nicht erklären.
Die Pfadeinträge kannst du doch dort einlesen, wo du die Nodes zum Treeview hinzufügst.

Poste doch einfach den Code oder schick mir den Mal per E-Mail zu. Dann schaue ich da mal drüber.

Gruß, Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


Sehen Sie sich das Profil von Dirk.B an!   Senden Sie eine Private Message an Dirk.B  Schreiben Sie einen Gästebucheintrag für Dirk.B

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2021/2022
CAD+T
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 21. Mai. 2007 21:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi!

Fällt vielleicht dazu jemand noch etwas ein:

Code:

Private Sub CmdbKonfig_Click() ' Ordner-Auswahl-Dialog aufrufen
    Dim oShell As Object
    Dim oFolder As Object
   
    Set oShell = CreateObject("Shell.Application")
    Set oFolder = oShell.BrowseForFolder(0, "Bitte einen Ordner auswählen", 1)

    Dim regfpad As String
    Dim Wert As String
    Dim a
   
    Dim NTagName As String
    NTagName = TVStartMask.SelectedItem.Tag

    TVStartMask.SelectedItem.Text = oFolder.Self.Path
    regfpad = "HKEY_CURRENT_USER\Software\Autodesk\DB_Blockverwaltung\???NTagName???"
    Wert = TVStartMask.SelectedItem.Text
    a = RegWrite(regfpad, Wert, "REG_SZ")
End Sub


Gruß

Dirk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 21. Mai. 2007 23:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich

Hallo Dirk,

da sind für uns einige Unbekannte. Ohne kompletten Code geht es schlecht.
 

Zitat:
Original erstellt von Dirk.B:
Code:

Private Sub CmdbKonfig_Click() ' Ordner-Auswahl-Dialog aufrufen
    Dim oShell As Object
    Dim oFolder As Object
   
    Set oShell = CreateObject("Shell.Application")
    Set oFolder = oShell.BrowseForFolder(0, "Bitte einen Ordner auswählen", 1)

    Dim regfpad As String
    Dim Wert As String
    Dim a

Select Case xNode2.Tag
    Case "DeckenstrahlerKF"
        TVStartMask.SelectedItem.Text = oFolder.Self.Path
        regfpad = "HKEY_CURRENT_USER\Software\Autodesk\DB_Blockverwaltung\DeckenstrahlerKF"
        Wert = TVStartMask.SelectedItem.Text
        a = RegWrite(regfpad, Wert, "REG_SZ")

    Case "LeuchtstofflampenKF"
        TVStartMask.SelectedItem.Text = oFolder.Self.Path
        regfpad = "HKEY_CURRENT_USER\Software\Autodesk\DB_Blockverwaltung\LeuchtstofflampenKF"
        Wert = TVStartMask.SelectedItem.Text
        a = RegWrite(regfpad, Wert, "REG_SZ")
 
    Case "NV_StrahlerKF"
        TVStartMask.SelectedItem.Text = oFolder.Self.Path
        regfpad = "HKEY_CURRENT_USER\Software\Autodesk\DB_Blockverwaltung\NV_StrahlerKF"
        Wert = TVStartMask.SelectedItem.Text
        a = RegWrite(regfpad, Wert, "REG_SZ")

End Select
End Sub




Wo kommt denn xNode2 her ? Es müsste doch das ParentNode des selektierten sein !?
Vielleicht solltest es vorher noch zuweisen.

set xNode2 = TVStartMask.SelectedItem.parent

Stelli


------------------
Warum lisp'eln wenn's auch anders geht. 
www.ib-stelberg.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

Beiträge: 1360
Registriert: 24.07.2002

erstellt am: 22. Mai. 2007 12:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich

Hi Dirk,

Wie schon oben gesagt, ohne ein wenig mehr bzw. den kompletten Code kann man hier wenig sagen. Was gibt die denn "xNode2.Tag" zurück, wenn vor dem Select Case mal eine msgbox xNode2.tag setzT?!
Wie Wilfried schon geschrieben hat, müsstest du da eigentlich auf das ParentNode des ausgewählten Nodes abfragen.

Gruß, Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


Sehen Sie sich das Profil von Dirk.B an!   Senden Sie eine Private Message an Dirk.B  Schreiben Sie einen Gästebucheintrag für Dirk.B

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2021/2022
CAD+T
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 23. Mai. 2007 08:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Carsten!
Hallo Wilfried!

Mit dem schreiben in die Registry habe ich hinbekommen:

Code:

Private Sub CmdbKonfig_Click() ' Ordner-Auswahl-Dialog aufrufen
    Dim oShell As Object
    Dim oFolder As Object
   
    Set oShell = CreateObject("Shell.Application")
    Set oFolder = oShell.BrowseForFolder(0, "Bitte einen Ordner auswählen", 1)

    Dim regfpad As String
    Dim Wert As String
    Dim a
   
    TVStartMask.SelectedItem.Text = oFolder.Self.Path
    regfpad = "HKEY_CURRENT_USER\Software\Autodesk\DB_Blockverwaltung\" & TVStartMask.SelectedItem.Tag
    Wert = TVStartMask.SelectedItem.Text
    a = RegWrite(regfpad, Wert, "REG_SZ")
End Sub


Nun habe ich folgende Einträge unter:
HKEY_CURRENT_USER\Software\Autodesk\DB_Blockverwaltung

Name Typ Wert
DeckenstrahlerKF REG_SZ C:\Blockpfad1
StrahlerKF REG_SZ C:\Blockpfad2
LeuchtenKF REG_SZ C:\Blockpfad3

erzeugt.

Wie weise ich diese nun beim Start meines Programms über

Code:

Public Sub UserForm_Initialize()
Dim regpfad As String
Dim Wert As String
regpfad = TVStartMask.Node?.Tag = DeckenstrahlerKF =  C:\Blockpfad1
etc.
End Sub

noch zur Info:
Registry lesen:

Code:

Public Function RegRead(Path As String) As String
    Dim ws As Object
    On Error GoTo ErrHandler
    Set ws = CreateObject("WScript.Shell")
    RegRead = ws.RegRead(Path)
Exit Function
ErrHandler:
    RegRead = ""
End Function

Registry schreiben:

Code:

Public Function RegWrite(ByVal Path As String, ByVal Value As String, _
                Optional ByVal Typ As String = "REG_SZ") As Boolean
    Dim ws As Object
    On Error GoTo ErrHandler
    Set ws = CreateObject("WScript.Shell")
    ws.RegWrite Path, Value, Typ
    RegWrite = True
Exit Function
ErrHandler:
    RegWrite = False
End Function

Habt Ihr da ne Idee?

Gruß

Dirk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

Beiträge: 1360
Registriert: 24.07.2002

erstellt am: 23. Mai. 2007 08:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich

Hi Dirk,

Du befüllst doch irgendwo dein Treeview mit Daten. Da musst du dann auch beim befüllen an den richtigen Stellen(Child-Nodes) deine Daten aus der Registry einsetzen.

Wo ist da das Problem?!

Gruß, Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


Sehen Sie sich das Profil von Dirk.B an!   Senden Sie eine Private Message an Dirk.B  Schreiben Sie einen Gästebucheintrag für Dirk.B

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2021/2022
CAD+T
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 24. Mai. 2007 16:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi Carsten!

So fülle ich das TreeView nun mit den Eintragungen aus der Registry:

Code:

Private Sub UserForm_Initialize()
'---TreeView mit Inhalten füllen------------------------------------
Dim RootNode As MSComctlLib.Node
Dim xNode As MSComctlLib.Node
Dim xNode1 As MSComctlLib.Node
Dim xNode2 As MSComctlLib.Node

Dim regfpad(2) As String
regfpad(0) = "HKEY_CURRENT_USER\Software\Autodesk\DB_Blockverwaltung\DeckenstrahlerKF"
regfpad(1) = "HKEY_CURRENT_USER\Software\Autodesk\DB_Blockverwaltung\LeuchtstofflampenKF"
regfpad(2) = "HKEY_CURRENT_USER\Software\Autodesk\DB_Blockverwaltung\NV_StrahlerKF"

TVStartMask.Nodes.Clear
TVStartMask.ImageList = StartMask.ImageList1

Set RootNode = TVStartMask.Nodes.Add(Text:="Blöcke", Image:=1, SelectedImage:=2)
    RootNode.Tag = "Blöcke"
    Set xNode = TVStartMask.Nodes.Add(RootNode.Index, tvwChild, Text:="Beleuchtung", Image:=1, SelectedImage:=2)
    xNode.Tag = "Beleuchtung"
        Set xNode1 = TVStartMask.Nodes.Add(xNode.Index, tvwChild, Text:="Deckenstrahler", Image:=1, SelectedImage:=2)
        xNode1.Tag = "Deckenstrahler"
            Set xNode2 = TVStartMask.Nodes.Add(xNode1.Index, tvwChild, Text:=RegRead(regfpad(0)), Image:=4, SelectedImage:=3)
            'Set xNode2 = TVStartMask.Nodes.Add(xNode1.Index, tvwChild, Text:=RegRead(regfpad), Image:=4, SelectedImage:=3)
            xNode2.Tag = "DeckenstrahlerKF"
        Set xNode1 = TVStartMask.Nodes.Add(xNode.Index, tvwChild, Text:="Leuchtstofflampen", Image:=1, SelectedImage:=2)
        xNode1.Tag = "Leuchtstofflampen"
            Set xNode2 = TVStartMask.Nodes.Add(xNode1.Index, tvwChild, Text:=RegRead(regfpad(1)), Image:=4, SelectedImage:=3)
            'Set xNode2 = TVStartMask.Nodes.Add(xNode1.Index, tvwChild, Text:=RegRead(regfpad), Image:=4, SelectedImage:=3)
            xNode2.Tag = "LeuchtstofflampenKF"
        Set xNode1 = TVStartMask.Nodes.Add(xNode.Index, tvwChild, Text:="NV Strahler", Image:=1, SelectedImage:=2)
        xNode1.Tag = "NV_Strahler"
            Set xNode2 = TVStartMask.Nodes.Add(xNode1.Index, tvwChild, Text:=RegRead(regfpad(2)), Image:=4, SelectedImage:=3)
            'Set xNode2 = TVStartMask.Nodes.Add(xNode1.Index, tvwChild, Text:=RegRead(regfpad), Image:=4, SelectedImage:=3)
            xNode2.Tag = "NV_StrahlerKF"


Siehst Du da noch eine Vereinfachung?

Gruß

Dirk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

Beiträge: 1360
Registriert: 24.07.2002

erstellt am: 24. Mai. 2007 20:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich

Hi Dirk,

da du es ja mit dem Befüllen der Treeview-Nodes hinbekommen hast, dürften ja nun keine Probleme mehr vorhanden sein, oder?!
Wenn du doch noch irgendwo ein Problem hast, kannst du es ja posten.

Edit: Und bitte füll mal deine Sysinfo aus, damit keine unnötigen Fragen aufkommen.

Gruß, Carsten

[Diese Nachricht wurde von Carsten1210 am 24. Mai. 2007 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


Sehen Sie sich das Profil von Dirk.B an!   Senden Sie eine Private Message an Dirk.B  Schreiben Sie einen Gästebucheintrag für Dirk.B

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2021/2022
CAD+T
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 28. Mai. 2007 13:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


TreeView.zip

 
Hallo zusammen!

Da mich das TreeView - Steuerelement mit seinen Möglichkeiten sehr interessiert, stelle ich mal ein kleines Programm ins Forum.
Vielleicht kann mir dadurch zu folgenden Punkten jemand noch weiter helfen bzw. einige Tipps geben:

- Könnte man, wenn ja - wie -, den Aufbau des Programms vereinfachen?
- Ich möchte, daß das letzte Node (xNode2) beim füllen des TreeView
  nicht angezeigt wird, sondern erst, wenn man auf den Button
  Konfiguration klickt?
- Wie könnte man über eine Button oder durch klick auf einen Node
  zur Laufzeit ein Parent- oder ein Childnode hinzufügen?

Vielleicht hat je noch jemand generell Anregungen zu diesem Steuerelement.

Über Hilfe bzw. Tipps würde ich mich wie immer sehr freuen.

Gruß

Dirk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

Beiträge: 1360
Registriert: 24.07.2002

erstellt am: 28. Mai. 2007 13:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich

Hi Dirk,

Hab nur mal schnell drüber geschaut, da ist mir folgendes aufgefallen:

Du musst bei dem "Konfigurationsbutton" erst testen, ob das Node wirklich eine Ordnerauswahl / Pfadangabe sein soll oder nicht. Bei deiner DVB kann ich überall eine Ordnerauswahl treffen und das steht dann in deinem Treeview. Wenn kein Ordner in den Dialog aufgerufen wird (Bei Abbruch des Dialogs) bricht dein Programm ab, da die Variable leer übergeben wird.
Die Registry-Sachen (Und alle oft genutzten Dinge) würde ich in eine Bibliothek ausgliedern und per Verweise einbinden. Dann brauchst hier nur einmal was ändern, wenn nötig. Und nicht in jede DVB reinschauen, wo diese Funktion drin ist.

Was meinst du mit den Anzeigen des letzten Nodes?! Reicht es da nicht, das das übergeordnete Parent-Node auf False in der Eigenschaft .Expanded (xNode.Expanded = True oder False) steht?!
Du solltest dir vielleicht auch mal in der IDE anschauen, was für Ereignisse (Click, Expand, Collapse usw.) es für das Treeview-Steuerelement gibt. Das sollte dir dann weiterhelfen.

Gruß, Carsten

Edit: Hier noch ein Link zum Thema Arbeiten mit dem Treeview-Steuerelement.

[Diese Nachricht wurde von Carsten1210 am 28. Mai. 2007 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

Beiträge: 1360
Registriert: 24.07.2002

AutoCAD ACA 2024
Solidworks 2022 Sp5
Enterprise PDM 2022 Sp5
Pascam Woodworks
Visual Studio 2017 Pro
Windows 10 64Bit
Dell Precision 3660
Intel Core i9-12900K
32 GB Arbeitsspeicher
2x Dell U2415

erstellt am: 28. Mai. 2007 16:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich

Hi Dirk,

Noch etwas, was mir aufgefallen ist:
Du hast zwei verschieden Reg-Pfade in deinem Beispiel (Wird wohl bei dem Endprodukt geändert sein).
Du kannst die Variable "a" als Boolean definieren, Variablen mit undefinierten Datentypen ist nicht so dolle.
Die Userform solltest du vielleicht auch Größenmäßig anpassbar machen. Dann kann man die Pfade auch komplett sehen. Ein Beispiel gibt es hier im Forum.

Das wäre fürs erste einmal alles, was mit aufgefallen ist.

Gruß, Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 28. Mai. 2007 17:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich


TreeView_Test.zip

 
Hallo Dirk,

hab mal ein wenig was in der DVB geändert.

Du sollest überlegen oder mal schreiben wie der Benutzer denn den Pfad angeben soll.

In der DVB habe ich mal eine Variante in der der Pfad in eine Textbox geschrieben wird und da geändert wird.
Eine andere Variante ist über einen Wechselschalter die Pfade im Treeview ein- und auszublenden. (Diese Variante ist nur im Ansatz vorhanden).

Die "Verwaltung" der Regpfade habe ich auch geändert um so unterschiedliche Schreibvarianten zu vermeiden.
Da von abgesehen finde ich es nicht gut im Pfad HKEY_CURRENT_USER\Software\Autodesk der Software zu arbeiten. Da würde ich schon einen eignenen nehmen.

Code:
Dim StammRegPfad As String
StammRegPfad = "HKEY_CURRENT_USER\Software\Autodesk\TreeVier_Test\"

TVStartMask.Nodes.Clear
TVStartMask.ImageList = StartMask.ImageList1
TVStartMask.LabelEdit = tvwManual

Set RootNode = TVStartMask.Nodes.Add(Text:="Blöcke", Image:=1, SelectedImage:=2)
    Set NodeTag = New cls_NodeTag
    NodeTag.Art = Nodeart.Root
    NodeTag.Pfad = ""
    NodeTag.Titel = "Blöcke"
    Set RootNode.Tag = NodeTag
   
    Set xNode = TVStartMask.Nodes.Add(RootNode, tvwChild, Text:="Beleuchtung", Image:=1, SelectedImage:=2)
    NodeTag.Art = Nodeart.Kapitel
    NodeTag.Pfad = ""
    NodeTag.Titel = "Beleuchtung"
    Set xNode.Tag = NodeTag
        Set xNode1 = TVStartMask.Nodes.Add(xNode, tvwChild, Text:="Deckenstrahler", Image:=1, SelectedImage:=2)
        Set NodeTag = New cls_NodeTag
        NodeTag.Art = Nodeart.Item
        NodeTag.Titel = "Deckenstrahler"
        NodeTag.RegPfad = StammRegPfad & NodeTag.Titel
        NodeTag.Pfad = RegRead(NodeTag.RegPfad)
        Set xNode1.Tag = NodeTag


Als nächsten Schritt würde ich an deiner Stelle das Befüllen des Treeviews ändern. Du arbeitest jedes Node für sich ab. Besser wäre es, wenn du eine Auflistung aus einer INI Datei oder einen XML File lesen würdest und danach deinen Treeview aufbaust. Dann brauchst du bei Erweiterungen nur noch die Datei und nicht das Programm ändern.

Wilfried Stelberg

[EDIT 29.05.07: Dateianhang geändert
es war ein Fehler in der Deklaration]

------------------
Warum lisp'eln wenn's auch anders geht.  
www.ib-stelberg.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


Sehen Sie sich das Profil von Dirk.B an!   Senden Sie eine Private Message an Dirk.B  Schreiben Sie einen Gästebucheintrag für Dirk.B

Beiträge: 534
Registriert: 25.11.2003

erstellt am: 28. Mai. 2007 20:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Carsten!
Hallo Wilfried!

Ich bin grad erst wieder zu Hause.
Vielen Dank erst einmal für Eure Antworten.
Diese werde ich mir morgen mal genauer anschauen.

Gruß

Dirk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


Sehen Sie sich das Profil von Dirk.B an!   Senden Sie eine Private Message an Dirk.B  Schreiben Sie einen Gästebucheintrag für Dirk.B

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2021/2022
CAD+T
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 12. Aug. 2007 14:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Test.zip

 
Hallo Wilfried!
Hallo Carsten!

Leider war ich die letzten 2 Monate bzgl. VBA zu nichts gekommen, da diese Zeit recht chaotisch war.
Ab morgen bin dann erst einmal 1 Wochen im Urlaub.
Gestern Abend hatte ich mal Zeit, mich um das TreeView zu kümmern.
Wilfried, Dein Programm ist das was ich meinte bzw. erreichen wollte.

Zu der INI Datei habe ich bzgl. schreiben und bearbeiten unter vb@rchiv folgendes gefunden:

http://www.vbarchiv.net/workshop/workshop17.php

Den Source Code habe ich mal versucht in VBA umzusetzen.
Dies funktioniert auch, bis auf das automatische befüllen der UserForm.

Könnte man da nicht auch die Supportpfade mit ablegen?

Wozu ich noch nichts gefunden habe bzw. ein Problem habe, ist das auslesen aus der INI - Datei in das
TreeView.

Ich hoffe Ihr könnt mir mal wieder helfen?

Vielen Dank im voraus.

Gruß

Dirk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

Beiträge: 1360
Registriert: 24.07.2002

erstellt am: 12. Aug. 2007 16:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich

Hi Dirk,

Hier mal ein Beispiel, wie du an die Support-Pfade kommst:

Code:
Sub GetSupportPath()
Dim mySupportPath As String
mySupportPath = ThisDrawing.Application.preferences.Files.SupportPath
MsgBox mySupportPath
Dim myplotpath As String
myplotpath = ThisDrawing.Application.preferences.Files.PrinterConfigPath
MsgBox myplotpath
End Sub

Du Solltest dann aber auch ein Abgleich machen, welches Profil gerade aktuell ist, nicht das du Werte im falschen Profil schreibst / änderst.


Gruß, Carsten

Edit:
Du hast doch schon die Funktion "GetIniString", wo du die Sektion und die Ini_datei mitgibst. Dort kannst du doch den Pfad direkt rauslesen und dem entsprechenden node im TreeView zuweisen. Das dürfte doch nicht so schwierig sein. Oder verstehe ich da was falsch?!

Mit dieser Zeile bekommst du im Treeview auch den Pfad aus der Ini-Datei:

nodetag.Pfad = GetIniString("Leuchten", "Halogen", "", "C:\Blockverwaltung.ini", 32767)

[Diese Nachricht wurde von Carsten1210 am 12. Aug. 2007 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


Sehen Sie sich das Profil von Dirk.B an!   Senden Sie eine Private Message an Dirk.B  Schreiben Sie einen Gästebucheintrag für Dirk.B

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2021/2022
CAD+T
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 21. Aug. 2007 21:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen!

Erst noch einmal Danke für Eure Hilfe.
Mit dem Tool zum schreiben bzw. bearbeiten einer INI Datei funktioniert soweit gut.

Wie befüll ich denn nun das TreeView, wie in dem TreeView_Test von Stelli1 beschrieben mit dem Inhalt aus der INI Datei?

INI-Datei:
[Scharniere]
Holz=J:\AutoCAD_2007\DB_Tuning\Bloecke\Scharniere
Glas=J:\AutoCAD_2007\DB_Tuning\Bloecke\Scharniere
[Schlösser]
Holz=J:\AutoCAD_2007\DB_Tuning\Bloecke\Schloesser
Glas=J:\AutoCAD_2007\DB_Tuning\Bloecke\Schloesser
[Verbindungen]
Holz=J:\AutoCAD_2007\DB_Tuning\Bloecke\Verbinder
Glas=J:\AutoCAD_2007\DB_Tuning\Bloecke\Verbinder

Gruß

Dirk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

Beiträge: 1360
Registriert: 24.07.2002

erstellt am: 22. Aug. 2007 06:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich

Hi Dirk,

Hast du folgendes aus meiner letzten Antwort mal ausprobiert?!

Zitat:
nodetag.Pfad = GetIniString("Leuchten", "Halogen", "", "C:\Blockverwaltung.ini", 32767)

Probier das mal aus und melde dich nochmal dazu. Ich komme erst heute Abend wieder dazu, das nach zu schauen. Vielleicht schaffst du es ja auch alleine.

Gruß, Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


Sehen Sie sich das Profil von Dirk.B an!   Senden Sie eine Private Message an Dirk.B  Schreiben Sie einen Gästebucheintrag für Dirk.B

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2021/2022
CAD+T
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 22. Aug. 2007 10:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Test.zip

 
Hallo Carsten!
Hallo Forum!

Zitat:

nodetag.Pfad = GetIniString("Leuchten", "Halogen", "", "C:\Blockverwaltung.ini", 32767)

Hiermit komme ich nicht klar.
Ich habe ja einmal meinen INIEditor und einmal mein TreeView_Test.
In dem TreeView_Test habe ich bzw. Wilfried ja die Nodes manuel erstellt und die Pfadzuweisung erfolgt ja über die Registry.
Wenn ich Wilfried ja richtig verstanden habe,

Zitat:

Als nächsten Schritt würde ich an deiner Stelle das Befüllen des Treeviews ändern. Du arbeitest jedes Node für sich ab. Besser wäre es, wenn du eine Auflistung aus einer INI Datei oder einen XML File lesen würdest und danach deinen Treeview aufbaust. Dann brauchst du bei Erweiterungen nur noch die Datei und nicht das Programm ändern.

sollen die Eintragungen aus der INI - Datei automatisch geladen werden.
Das heist für mich, alles was die Registry betrifft aus dem TreeView_Test entfernen.
Dann müßte ich ja wie bei dem INIEditor die API zur INI im Modul integrieren.

Code:

Public Declare Function WritePrivateProfileString Lib _
  "kernel32" Alias "WritePrivateProfileStringA" _
  (ByVal lpApplicationName As String, _
  ByVal lpKeyName As Any, ByVal lpString As Any, _
  ByVal lpFileName As String) As Long

Public Declare Function GetPrivateProfileString Lib _
  "kernel32" Alias "GetPrivateProfileStringA" _
  (ByVal lpApplicationName As String, _
  ByVal lpKeyName As Any, ByVal lpDefault As String, _
  ByVal lpReturnedString As String, ByVal nSize As Long, _
  ByVal lpFileName As String) As Long

' Eintrag aus INI-Datei lesen
Public Function GetIniString(ByVal Sektion As String, _
  ByVal Titel As String, ByVal Vorgabe As String, _
  ByVal INIFile As String, _
  Optional ByVal nSize As Integer = 256) As String
 
  Dim lResult As Long
  Dim sValue As String
 
  sValue = Space$(nSize)
  lResult = GetPrivateProfileString(Sektion, Titel, _
    Vorgabe, sValue, nSize, INIFile)
  GetIniString = Left$(sValue, lResult)
End Function


Das habe ich probiert, aber es funktioniert nicht.

Kann man das TreeView nicht ähnlich wie die ListBox aus der INI - Datei füllen?
Nur wie bekommt man die Struktur, wie in Wilfrieds TreeView_Test hin?

Wenn da jemand einen Lösungsansatz hat wäre ich dankbar.

Ich werde mal weiter probieren.

Vielen Dank im voraus.

Gruß

Dirk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


Sehen Sie sich das Profil von Dirk.B an!   Senden Sie eine Private Message an Dirk.B  Schreiben Sie einen Gästebucheintrag für Dirk.B

Beiträge: 534
Registriert: 25.11.2003

erstellt am: 24. Aug. 2007 07:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen!

Ich komme mit meinem Problem des automatischen befüllens des TreeView's nicht weiter.
Dieses ist der letzte Stand meiner Versuche:

Code:

Private Sub TVAktu_Click()
Dim xNode As Node
Dim strSections As String
Dim strTitel As String
Dim strVorgabe As String
Dim Section() As String
Dim i As Integer

TVStartMask.Nodes.Clear

strSections = GetIniString(vbNullString, "", "", INIFile, 32767)
strTitel = GetIniString(strSections, vbNullString, "", INIFile, 32767)
strVorgabe = GetIniString(strSections, strTitel, vbNullString, INIFile, 32767)

If strSections <> "" Then
    Section = Split(strSections, Chr$(0))

    With TVStartMask.Nodes
        For i = 0 To UBound(Section) - 1
            .Add Section(i), Image:=1, SelectedImage:=2
        Next i
    End With
End If
End Sub


Aus der INI - Datei werden nun zwar die Sectionen wie z.B.
Scharniere
Schlösser
Verbinder
gefiltert, aber wie erstelle ich daraus nun automatisch die Parent - Nodes und wie aus dem Titel bzw. Vorgabe die Childnodes?

Kann mir da jemand helfen?

Danke

Gruß

Dirk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 24. Aug. 2007 10:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich

Hallo Dirk,

hier mal ein Beispiel. Leg dir ein Formular an un erzeuge die drei Controls und füge den Code ein.

Code:

''  ## Formular mit Treeview = Treeview
'                  Textfeld = txt_IniDatei
'                  Button  = BT_FillTreeView

Private Sub BT_FillTreeview_Click()
    Dim vlst_IniDatei As String
    Dim olcl_IniDatei As New cls_Info_INIDATEI
    Dim vlva_TopicList As Collection
    Dim vlva_Topic As Variant
    Dim vlva_KeyList As Variant
    Dim vlva_Key As Variant
    Dim vlst_Value As String
   
    Dim olct_RoorNode As Node
    Dim olct_TopicNode As Node
    Dim olct_KeyNode As Node
   
    ' Ini Datei lesen
    vlst_IniDatei = Me.txt_IniDatei.Text
    olcl_IniDatei.iniDatei = vlst_IniDatei
   
    ' Treeview leeren
    Me.TreeView.Nodes.Clear
    ' Rootnode anlegen
    Set olct_Rootnode = Me.TreeView.Nodes.Add(, tvwFirst, "Root", "IniDatei")
   
    ' Kapitelliste lesen
    Set vlva_TopicList = olcl_IniDatei.Themenliste
   
    ' Alle Kapitel durchlaufen
    For Each vlva_Topic In vlva_TopicList
        ' Ein Node für das Kapitel anlegen
        Set olct_TopicNode = Me.TreeView.Nodes.Add(olct_Rootnode, tvwChild, , CStr(vlva_Topic))
       
        ' Die Werteliste lesen
        Set vlva_KeyList = olcl_IniDatei.Detailliste(CStr(vlva_Topic))
        For Each vlva_Key In vlva_KeyList
            ' Sub Node
            Set olct_KeyNode = Me.TreeView.Nodes.Add(olct_TopicNode, tvwChild, , CStr(vlva_Key))
            ' Wert lesen
            vlst_Value = olcl_IniDatei.DetailWert(CStr(vlva_Topic), CStr(vlva_Key))
            olct_KeyNode.Tag = vlst_Value
            ' Als Text anzeigen
            olct_KeyNode.Text = CStr(vlva_Key) & " = " & vlst_Value
        Next vlva_Key
    Next vlva_Topic
   
End Sub



Leg noch ein Klassenmodul mit dem Namen "cls_Info_IniDatei" an und koier den unten stehenen Code rein.
Code:

''' #### Klassenmodul: cls_Info_IniDatei
Option Explicit

Private vlin_InfoArt As Integer '(0= INI  ;  1= XML)
Private vlst_Dateiname As String

Private Declare Function WritePrivateProfileString Lib _
  "kernel32" Alias "WritePrivateProfileStringA" _
  (ByVal lpApplicationName As String, _
  ByVal lpKeyName As Any, ByVal lpString As Any, _
  ByVal lpFileName As String) As Long

Private Declare Function GetPrivateProfileString Lib _
  "kernel32" Alias "GetPrivateProfileStringA" _
  (ByVal lpApplicationName As String, _
  ByVal lpKeyName As Any, ByVal lpDefault As String, _
  ByVal lpReturnedString As String, ByVal nSize As Long, _
  ByVal lpFileName As String) As Long
Private Function GetIniString(ByVal Section As String, _
    ByVal Titel As String, ByVal Vorgabe As String, _
    ByVal INIFile As String, _
    Optional ByVal nSize As Integer = 256) As String
 
    Dim lResult As Long
    Dim sValue As String
 
    sValue = Space$(nSize)
    lResult = GetPrivateProfileString(Section, Titel, Vorgabe, sValue, nSize, INIFile)
    GetIniString = Left$(sValue, lResult)
End Function
 
Property Let iniDatei(Dateiname As String)
    vlst_Dateiname = Trim(Dateiname)
    If vlst_Dateiname <> "" Then
        If UCase(Right(vlst_Dateiname, 4)) = ".INI" Then
            vlin_InfoArt = 0
        ElseIf UCase(Right(vlst_Dateiname, 4)) = ".XML" Then
            vlin_InfoArt = 1
        Else
            MsgBox "Unbekannte Dateiendung"
        End If
    End If
End Property
Property Get iniDatei() As String
    iniDatei = vlst_Dateiname
End Property
Property Get InfoArt() As Integer
    InfoArt = vlin_InfoArt
End Property
Property Get Themenliste() As Collection
    Dim tempCol As New Collection
    Dim tempVar As Variant
    Dim tempArray As Variant
    Dim i As Integer
       
    tempVar = GetIniString(vbNullString, vbNull, vbNull, vlst_Dateiname, 32767)
    If Len(tempVar) > 0 Then
        tempArray = Split(tempVar, Chr(0))
        For i = 0 To UBound(tempArray)
            If tempArray(i) <> "" Then
              tempCol.Add tempArray(i)
            End If
        Next i
    End If
   
    Set Themenliste = tempCol
End Property
Property Get Detailliste(Thema As String) As Collection
    Dim tempCol As New Collection
    Dim tempVar As Variant
    Dim tempArray As Variant
    Dim i As Integer
   
    tempVar = GetIniString(Thema, vbNullString, vbNull, vlst_Dateiname, 32767)
    If Len(tempVar) > 0 Then
        tempArray = Split(tempVar, Chr(0))
        For i = 0 To UBound(tempArray)
            If tempArray(i) <> "" Then
              tempCol.Add tempArray(i)
            End If
        Next i
    End If
   
    Set Detailliste = tempCol

End Property
Property Get DetailWert(Thema As String, Detail As String) As String
    Dim tempStr As String
   
    DetailWert = GetIniString(Thema, Detail, "", vlst_Dateiname)
   
End Property



Eine IniDatei ist in der Anlage. Du kannst aber auch jede andere nehmen.

Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


Sehen Sie sich das Profil von Dirk.B an!   Senden Sie eine Private Message an Dirk.B  Schreiben Sie einen Gästebucheintrag für Dirk.B

Beiträge: 534
Registriert: 25.11.2003

erstellt am: 25. Aug. 2007 12:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Wilfried!

Läuft prima.
Ich habe den Code zwar in seinen Zusammenhängen noch nicht wirklich
verstanden , aber ich arbeite daran.

Deswegen noch eine Frage bzw. Bitte, was müßte ich ändern, damit das TreeView wie folgt aussieht ohne das tvwFirst "IniDatei":

Scharniere
    -
    -    Holz
    -      -
    -      -  J:\AutoCAD_2007\DB_Tuning\Bloecke\Scharniere
    -
    -    Glas
            -
            -  J:\AutoCAD_2007\DB_Tuning\Bloecke\Scharniere

Schlösser
    -
    -    Holz
    -      -
    -      -  J:\AutoCAD_2007\DB_Tuning\Bloecke\Schlösser
    -
    -    Glas
            -
            -  J:\AutoCAD_2007\DB_Tuning\Bloecke\Schlösser
etc.

Vielen Dank im voraus und ein schönes WE.

Gruß

Dirk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

Beiträge: 1360
Registriert: 24.07.2002

AutoCAD ACA 2024
Solidworks 2022 Sp5
Enterprise PDM 2022 Sp5
Pascam Woodworks
Visual Studio 2017 Pro
Windows 10 64Bit
Dell Precision 3660
Intel Core i9-12900K
32 GB Arbeitsspeicher
2x Dell U2415

erstellt am: 25. Aug. 2007 13:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich

Hi Dirk,

Du kannst bei Wilfried im Code noch ein AddNode einbauen:

Code:
Set olct_KeyNode = Me.TreeView.Nodes.Add(olct_TopicNode, tvwChild, , CStr(vlva_Key))
Set olct_KeyNode2 = Me.TreeView.Nodes.Add(olct_KeyNode, tvwChild, , vlst_Value)

   

Und so sollte dein Treeview aussehen, oder?!

Gruß, Carsten

[Diese Nachricht wurde von Carsten1210 am 25. Aug. 2007 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 25. Aug. 2007 17:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich


Testini.xml.txt

 
Hallo Dirk,

und wen es sonst noch interessiert 

Da ich im Moment ein wenig mit XML machen muss hab ich interessehalber mal meine gewonnen Erkenntnisse in die Objektklasse eingebaut.

Wir im Beispielprogramm kann dann sowohl mit der INI als auch mit der XML Datei arbeiten.

Code:

'' ### Klassenmodul: cls_Info_IniDatei
'' !! Verweis auf Microsoft XML, v4.0 eintragen !!!

Option Explicit

Private vlin_InfoArt As Integer '(0= INI  ;  1= XML)
Private vlst_Dateiname As String

Private Declare Function WritePrivateProfileString Lib _
  "kernel32" Alias "WritePrivateProfileStringA" _
  (ByVal lpApplicationName As String, _
  ByVal lpKeyName As Any, ByVal lpString As Any, _
  ByVal lpFileName As String) As Long

Private Declare Function GetPrivateProfileString Lib _
  "kernel32" Alias "GetPrivateProfileStringA" _
  (ByVal lpApplicationName As String, _
  ByVal lpKeyName As Any, ByVal lpDefault As String, _
  ByVal lpReturnedString As String, ByVal nSize As Long, _
  ByVal lpFileName As String) As Long
 
Private xmldoc As New MSXML2.DOMDocument40
 
Private Function GetIniString(ByVal Section As String, _
    ByVal Titel As String, ByVal Vorgabe As String, _
    ByVal INIFile As String, _
    Optional ByVal nSize As Integer = 256) As String
 
    Dim lResult As Long
    Dim sValue As String
 
    sValue = Space$(nSize)
    lResult = GetPrivateProfileString(Section, Titel, Vorgabe, sValue, nSize, INIFile)
    GetIniString = Left$(sValue, lResult)
End Function
 
Property Let iniDatei(Dateiname As String)
    vlst_Dateiname = Trim(Dateiname)
    If vlst_Dateiname <> "" Then
        If UCase(Right(vlst_Dateiname, 4)) = ".INI" Then
            vlin_InfoArt = 0
        ElseIf UCase(Right(vlst_Dateiname, 4)) = ".XML" Then
            vlin_InfoArt = 1
            xmldoc.Load vlst_Dateiname
        Else
            MsgBox "Unbekannte Dateiendung"
        End If
    End If
End Property
Property Get iniDatei() As String
    iniDatei = vlst_Dateiname
End Property
Property Get InfoArt() As Integer
    InfoArt = vlin_InfoArt
End Property
Property Get Themenliste() As Collection
    Dim xml_root As MSXML2.IXMLDOMNode
    Dim xml_topic As MSXML2.IXMLDOMNode
    Dim xml_Topics As MSXML2.IXMLDOMNodeList
   
    Dim tempCol As New Collection
    Dim tempVar As Variant
    Dim tempArray As Variant
    Dim i As Integer
       
    If vlin_InfoArt = 1 Then
        ' Lese alle Themen
        Set xml_Topics = xmldoc.selectNodes("//Treeview/Topic")
        For Each xml_topic In xml_Topics
            tempCol.Add xml_topic.Attributes(0).Text
        Next xml_topic
    Else
        tempVar = GetIniString(vbNullString, vbNull, vbNull, vlst_Dateiname, 32767)
        If Len(tempVar) > 0 Then
            tempArray = Split(tempVar, Chr(0))
            For i = 0 To UBound(tempArray)
                If tempArray(i) <> "" Then
                  tempCol.Add tempArray(i)
                End If
            Next i
        End If
    End If
    Set Themenliste = tempCol
End Property
Property Get Detailliste(Thema As String) As Collection
    Dim xml_topic As MSXML2.IXMLDOMNode
    Dim xml_Keys As MSXML2.IXMLDOMNodeList
    Dim xml_Key As MSXML2.IXMLDOMNode
   
    Dim tempCol As New Collection
    Dim tempVar As Variant
    Dim tempArray As Variant
    Dim i As Integer
   
    If vlin_InfoArt = 1 Then
        ' Das gewünschte Kapitel suchen
        Set xml_topic = xmldoc.selectSingleNode("//Treeview/Topic[@Name='" & Thema & "']")
        ' Alle Knoten sind Keys
        Set xml_Keys = xml_topic.childNodes
        For Each xml_Key In xml_Keys
            tempCol.Add xml_Key.Attributes(0).Text
        Next
    Else
        ' Alle Einträge des Themas lesen
        tempVar = GetIniString(Thema, vbNullString, vbNull, vlst_Dateiname, 32767)
        If Len(tempVar) > 0 Then
            tempArray = Split(tempVar, Chr(0))
            For i = 0 To UBound(tempArray)
                If tempArray(i) <> "" Then
                  tempCol.Add tempArray(i)
                End If
            Next i
        End If
    End If
    Set Detailliste = tempCol

End Property
Property Get DetailWert(Thema As String, Detail As String) As String
    Dim xml_Node As MSXML2.IXMLDOMNode
   
    If vlin_InfoArt = 1 Then
        ' Wert lesen
        Set xml_Node = xmldoc.selectSingleNode("//Treeview/Topic[@Name='" & Thema & "']/Key[@Name='" & Detail & "']")
        DetailWert = xml_Node.Attributes.getNamedItem("Value").Text
    Else
        DetailWert = GetIniString(Thema, Detail, "", vlst_Dateiname)
    End If
   
End Property



Du kannst ja mal den Code austauschen für diese Klasse austauschen und mal mit angehängter XML Datei probieren. Eigentlich geht es damit wesentlich einfacher und es ist flexibler.


Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

Beiträge: 1360
Registriert: 24.07.2002

erstellt am: 25. Aug. 2007 17:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich

Hi Wilfried,

Mal wieder Hut ab. 
Es muss aber noch erwähnt werden, das dort ein Verweis auf auf Microsoft XML, v6.0 o.ä. gesetzt werden muss, damit es funktioniert.

Gruß, Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP



Anzeige:Infos zum Werbeplatz >>

Local CRS CAD APP für GIS, Vermessung und Kartografie, AEC - Architektur-, Ingenieur- und Bauwesen, Allgemeine Werkzeuge

Mit crsTools Local CRS können Georeferenzierte Lagepläne aus verschiedenen Koordinatensystemen (UTM, Gauß-Krüger) in ein praktisch verzerrungsfreies, lokales Koordinatensystem transformiert werden. Und wieder zurück. Man arbeitet also mit realen, der Örtlichkeit entsprechenden, Längen und Maßen.

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 26. Aug. 2007 14:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Dirk.B 10 Unities + Antwort hilfreich


Testini.xml.txt

 
Hallo zusammen,

hab noch eine Variante. Mit der XML Datei braucht man eigentlich keine Klasse mehr. Da reduziert sich das Ganze auf ein paar Zeilen. Hab mal die xml Datei ein wenig erweitert. Dann können auch gleich die Symbole mit geladen werden.

Code:

'' !! Verweis auf Microsoft XML nicht vergessen !!
Private Sub CommandButton1_Click()
    Dim IniDatei As String
    Dim xmlDoc As New MSXML2.DOMDocument
    Dim xmlTopic As MSXML2.IXMLDOMNode
    Dim xmlKey As MSXML2.IXMLDOMNode
    Dim RootNode As Node
    Dim TopicNode As Node
    Dim KeyNode As Node
    Dim ValueNode As Node
       
    IniDatei = "c:\temp\testini.xml"
   
    xmlDoc.Load IniDatei
   
    TreeView.ImageList = ImageList1
    TreeView.Nodes.Clear
    Set RootNode = TreeView.Nodes.Add(, tvwFirst, , IniDatei, CInt(xmlDoc.selectSingleNode("//Treeview").Attributes.getNamedItem("Image").Text))
    RootNode.Expanded = True
   
    For Each xmlTopic In xmlDoc.selectNodes("//Treeview/Topic")
        Set TopicNode = TreeView.Nodes.Add(RootNode, tvwChild, , xmlTopic.Attributes.getNamedItem("Name").Text, CInt(xmlTopic.Attributes.getNamedItem("Image").Text), CInt(xmlTopic.Attributes.getNamedItem("SelImage").Text))
        TopicNode.Tag = "TOPIC"
        For Each xmlKey In xmlTopic.childNodes
            Set KeyNode = TreeView.Nodes.Add(TopicNode, tvwChild, , xmlKey.Attributes.getNamedItem("Name").Text, CInt(xmlKey.Attributes.getNamedItem("Image").Text), CInt(xmlKey.Attributes.getNamedItem("SelImage").Text))
            KeyNode.Tag = "KEY"
            Set ValueNode = TreeView.Nodes.Add(KeyNode, tvwChild, , xmlKey.Attributes.getNamedItem("Value").Text, CInt(xmlKey.Attributes.getNamedItem("ValImage").Text))
            ValueNode.Tag = "VALUE"
        Next xmlKey
        TopicNode.Expanded = True
    Next xmlTopic
   
End Sub

Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht. 
www.ib-stelberg.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz