TreeView 2 Text
Permet de sauvegarder le contenu d'une TreeView dans
un fichier text et de le relire par la suite pour remplir
une (autre) TreeView
Cette nouvelle version fonctionne avec un format de fichier INI permetant d'utiliser
les API d'acces direct a ces fichiers
il est possible de sauvegarder les images ainsi que le style de chaque node
L'extention des ces fichiers est TVW, ceci permet d'associer un programme (contenu
dans le zip) pour ouvrir directement des images de TreeView
en double cliquant dessus depuis l'explorateur
Attention contraiment a ce qui ce passe sous WinNT l'API WritePrivateProfileString
ne semble pas acepter les tabulations, j'ai donc remplacé
le séparateur utilisé par un | (Alt Gr + 6), celui ci ne doit
donc pas se trouver dans un des champs text sauvegardés (node.text .tag
.key ...)
comme ce caractère est tres peu utilisé cela ne devrait pas trop
géner
Aucune autre limite la treeview obtenue est la replique exacte de celle sauvegardée
( Sources convertis en 6 couleurs avec mon programme VB to HTML)
'=========================================================================== 'Active Visual Basic 'http://www.fredjust.com '=========================================================================== Private Declare Function GetPrivateProfileString Lib "kernel32" Alias _ "GetPrivateProfileStringA" (ByVal lpApplicationName As String, _ ByVal lpKeyName As String, _ ByVal lpDefault As String, _ ByVal lpReturnedString As String, _ ByVal nSize As Long, _ ByVal lpFileName As String) As Long Private Declare Function WritePrivateProfileString Lib "kernel32" Alias _ "WritePrivateProfileStringA" _ (ByVal lpApplicationName As String, _ ByVal lpKeyName As String, _ ByVal lpString As String, _ ByVal lpFileName As String) As Long
'=========================================================================== ' SAVE A TREEVIEW TO A TVW TEXT FILE '=========================================================================== Public Sub tvSaveToFile(TV As TreeView, ByVal FileName As String, _ Optional SaveNodeStyle As Boolean = False, _ Optional SaveNodeImage As Boolean = False) Dim Neu As Node Dim Tempo As String Dim ImageIndex As Long On Error Resume Next 'erase file if exist Kill FileName 'write file info type WritePrivateProfileString "FileInfo", "Type", "TVW FILE", FileName WritePrivateProfileString "FileInfo", "Version", "1.0", FileName 'write TreeView Style With TV WritePrivateProfileString "TreeView", "Appearance", .Appearance, FileName WritePrivateProfileString "TreeView", "BorderStyle", .BorderStyle, FileName WritePrivateProfileString "TreeView", "Checkboxes", BoolToStr(.Checkboxes), FileName WritePrivateProfileString "TreeView", "FullRowSelect", BoolToStr(.FullRowSelect), FileName WritePrivateProfileString "TreeView", "HideSelection", BoolToStr(.HideSelection), FileName WritePrivateProfileString "TreeView", "ImageList", .ImageList.Name, FileName WritePrivateProfileString "TreeView", "Indentation", .Indentation, FileName WritePrivateProfileString "TreeView", "LabelEdit", .LabelEdit, FileName WritePrivateProfileString "TreeView", "LineStyle", .LineStyle, FileName WritePrivateProfileString "TreeView", "PathSeparator", .PathSeparator, FileName WritePrivateProfileString "TreeView", "Sorted", BoolToStr(.Sorted), FileName WritePrivateProfileString "TreeView", "Style", .Style, FileName WritePrivateProfileString "TreeView", "ToolTipText", .ToolTipText, FileName WritePrivateProfileString "Nodes", "Count", CStr(.Nodes.Count), FileName End With 'write NODES For Each Neu In TV.Nodes With Neu Tempo = .Text If Not .Parent Is Nothing Then Tempo = Tempo & vbTab & .Parent.Index Else Tempo = Tempo & vbTab & "ROOT" End If Tempo = Tempo & vbTab & .Key & vbTab & .Tag & vbTab & BoolToStr(.Sorted) 'write text / parent / key / tag / sorted WritePrivateProfileString "Nodes", "Node" & .Index, Tempo, FileName If SaveNodeImage Then Tempo = TV.ImageList.ListImages(.Image).Index Tempo = Tempo & vbTab Tempo = Tempo & TV.ImageList.ListImages(.SelectedImage).Index Tempo = Tempo & vbTab Tempo = Tempo & TV.ImageList.ListImages(.ExpandedImage).Index 'write image / selectedimage / expandedimage WritePrivateProfileString "Nodes", "Image" & .Index, Tempo, FileName End If If SaveNodeStyle Then Tempo = .ForeColor & vbTab & .BackColor & vbTab & BoolToStr(.Bold) & vbTab & BoolToStr(.Checked) & vbTab & BoolToStr(.Expanded) 'write ForeColor / BackColor / Bold / Checked / Expanded WritePrivateProfileString "Nodes", "Style" & .Index, Tempo, FileName End If End With Next End Subfonction de lecture
'=========================================================================== ' LOAD A TREEVIEW FROM A TVW FILE '=========================================================================== Public Function tvLoadFromFile(TV As TreeView, ByVal FileName As String, _ Optional LoadTvStyle As Boolean = True, _ Optional LoadNodeStyle As Boolean = True, _ Optional LoadNodeImage As Boolean = True) As Long Dim Neu As Node Dim Tempo As String Dim NodesCount As Long Dim Champs Dim i As Long On Error Resume Next 'check file type If ReadIniFile(FileName, "FileInfo", "Type", "") <> "TVW FILE" Then tvLoadFromFile = -1 Exit Function End If With TV .Visible = False .Nodes.Clear 'read TreeView Style If LoadTvStyle Then .Appearance = ReadIniFile(FileName, "TreeView", "Appearance", .Appearance) .BorderStyle = ReadIniFile(FileName, "TreeView", "BorderStyle", .BorderStyle) .Checkboxes = ReadIniFile(FileName, "TreeView", "Checkboxes", .Checkboxes) .FullRowSelect = ReadIniFile(FileName, "TreeView", "FullRowSelect", .FullRowSelect) .HideSelection = ReadIniFile(FileName, "TreeView", "HideSelection", .HideSelection) .Indentation = ReadIniFile(FileName, "TreeView", "Indentation", .Indentation) .LabelEdit = ReadIniFile(FileName, "TreeView", "LabelEdit", .LabelEdit) .LineStyle = ReadIniFile(FileName, "TreeView", "LineStyle", .LineStyle) .PathSeparator = ReadIniFile(FileName, "TreeView", "PathSeparator", .PathSeparator) .Sorted = ReadIniFile(FileName, "TreeView", "Sorted", .Sorted) .Style = ReadIniFile(FileName, "TreeView", "Style", .Style) .ToolTipText = ReadIniFile(FileName, "TreeView", "ToolTipText", .ToolTipText) End If End With NodesCount = ReadIniFile(FileName, "Nodes", "Count") 'read Nodes For i = 1 To NodesCount Tempo = ReadIniFile(FileName, "Nodes", "Node" & i) Champs = Split(Tempo, vbTab) If Champs(1) = "ROOT" Then Set Neu = TV.Nodes.Add(, , , Champs(0)) Else Set Neu = TV.Nodes.Add(CLng(Champs(1)), tvwChild, , Champs(0)) End If With Neu .Key = Champs(2) .Tag = Champs(3) .Sorted = CBool(Champs(4)) 'read image node If LoadNodeImage Then Tempo = ReadIniFile(FileName, "Nodes", "Image" & i) Champs = Split(Tempo, vbTab) .Image = CLng(Champs(0)) .SelectedImage = CLng(Champs(1)) .ExpandedImage = CLng(Champs(2)) End If 'read style node If LoadNodeStyle Then Tempo = ReadIniFile(FileName, "Nodes", "Style" & i) Champs = Split(Tempo, vbTab) .ForeColor = Champs(0) .BackColor = Champs(1) .Bold = Champs(2) .Checked = Champs(3) .Expanded = Champs(4) End If End With Next TV.Visible = True tvLoadFromFile = Err.Number End Function