| |  | 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
  
 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 / zitieren --> Unities abgeben:         
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.NodeTVStartMask.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
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 13. Mai. 2007 19:12 <-- editieren / zitieren --> Unities abgeben:          Nur für Dirk.B
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
  
 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 / zitieren --> Unities abgeben:         
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
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 20. Mai. 2007 19:57 <-- editieren / zitieren --> Unities abgeben:          Nur für Dirk.B
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
  
 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 / zitieren --> Unities abgeben:         
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.
    
 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 / zitieren --> Unities abgeben:          Nur für Dirk.B
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
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 22. Mai. 2007 12:49 <-- editieren / zitieren --> Unities abgeben:          Nur für Dirk.B
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
  
 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 / zitieren --> Unities abgeben:         
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
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 23. Mai. 2007 08:53 <-- editieren / zitieren --> Unities abgeben:          Nur für Dirk.B
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
  
 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 / zitieren --> Unities abgeben:         
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.NodeDim 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
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 24. Mai. 2007 20:19 <-- editieren / zitieren --> Unities abgeben:          Nur für Dirk.B
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
  
 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 / zitieren --> Unities abgeben:         
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
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 28. Mai. 2007 13:20 <-- editieren / zitieren --> Unities abgeben:          Nur für Dirk.B
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
   
 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 / zitieren --> Unities abgeben:          Nur für Dirk.B
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.
    
 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 / zitieren --> Unities abgeben:          Nur für Dirk.B
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
  
 Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 28. Mai. 2007 20:46 <-- editieren / zitieren --> Unities abgeben:         
|
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
  
 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 / zitieren --> Unities abgeben:         
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
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 12. Aug. 2007 16:33 <-- editieren / zitieren --> Unities abgeben:          Nur für Dirk.B
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
  
 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 / zitieren --> Unities abgeben:         
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
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 22. Aug. 2007 06:52 <-- editieren / zitieren --> Unities abgeben:          Nur für Dirk.B
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
  
 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 / zitieren --> Unities abgeben:         
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 LongPublic 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
  
 Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 24. Aug. 2007 07:27 <-- editieren / zitieren --> Unities abgeben:         
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.
    
 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 / zitieren --> Unities abgeben:          Nur für Dirk.B
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_FillTreeViewPrivate 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 ExplicitPrivate 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
  
 Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 25. Aug. 2007 12:48 <-- editieren / zitieren --> Unities abgeben:         
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
   
 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 / zitieren --> Unities abgeben:          Nur für Dirk.B
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.
    
 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 / zitieren --> Unities abgeben:          Nur für Dirk.B
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
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 25. Aug. 2007 17:54 <-- editieren / zitieren --> Unities abgeben:          Nur für Dirk.B
|

| |
Stelli1 Moderator Verm.-Ing.
    
 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 / zitieren --> Unities abgeben:          Nur für Dirk.B
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 >>)
 |