Visual Basic – Snimanje i prikaz sadržaja iz TreeView-a

Kako izvesti da snimate sadržaj kontrole TreeView-a i kako da „napunite“ TreeView podacima? Ovo ćemo izvesti pomoću „Contents“ osobine, objekta „PropertyBag“ (VB6). Kod sadrži dve javne rutine (Sub) zvane „SaveTree“ i „LoadTree„. „SaveTree“ procedura ima 3 argumenta:

  • file name – naziv fajla sa putem gde će biti snimljen fajl sa sadržajem TreeView-a
  • root node – naziv čvora, drveta od koje želite da počnete snimanje
  • SaveTree procedura poziva „private Sub“ nazvan „FillPropBag“ koji ima zadatak da popuni „PropertyBag“ (i to radi rekurzivno).
„LoadTree“ iam dva argumenta:file name – fajl koji želite da napunite i TreeView – koje drvo želite da popunite. Smestite sledeći kod u BAS module ili još bolje u Class module.

Private Sub FillPropBag(pb As PropertyBag, _
tvw As MSComctlLib.TreeView, Root As MSComctlLib.Node)

   Static nCount As Long
   Dim nde As MSComctlLib.Node
   Dim nIndex As Long

   If pb Is Nothing Then
   Set pb = New PropertyBag
   nCount = 0
   pb.WriteProperty „NumberOfNodes“, tvw.Nodes.Count, 0
   End If
   On Error Resume Next
   pb.WriteProperty „Text“ & nCount, Root.Text
   nIndex = Root.Parent.Index
   If nCount = 0 Then
   nIndex = 0
   End If
   pb.WriteProperty „Parent“ & nCount, nIndex, 0
   pb.WriteProperty „Key“ & nCount, Root.Key, „“
   pb.WriteProperty „Index“ & nCount, Root.Index, 0
   pb.WriteProperty „Image“ & nCount, Root.Image, vbEmpty
   pb.WriteProperty „SelectedImage“ & nCount, _
    Root.SelectedImage, vbEmpty
   Set nde = Root.Child
   If nde Is Nothing Then
   Set nde = Root.Next
   If nde Is Nothing Then
    Exit Sub
   End If
   End If
   nCount = nCount + 1
   FillPropBag pb, tvw, nde
End Sub
Public Sub SaveTree(sFilename As String, _
   tvw As MSComctlLib.TreeView, Root As MSComctlLib.Node)

    Dim pb As PropertyBag
    Dim bArr() As Byte
    Dim iFile As Integer

   FillPropBag pb, tvw, Root
   iFile = FreeFile
   Open sFilename For Binary Access Write As #iFile
   bArr = pb.Contents
   Put #iFile, , bArr
   Close #iFile
End Sub

Public Sub LoadTree(sFilename As String, _
   tvw As MSComctlLib.TreeView)
   Dim pb As PropertyBag
   Dim bArr() As Byte
   Dim iFile As Integer
   Dim nde As MSComctlLib.Node
   Dim nCount As Long
   Dim nNumOfNodes As Long
   Dim nIndex As Long
   Dim sText$, sKey$
   Dim nParent As Long
   Dim vImage, vSelectedImage

   iFile = FreeFile
   Open sFilename For Binary Access Read As #iFile
   ReDim bArr(LOF(iFile)) As Byte
   Get #iFile, , bArr
   Close #iFile
   Set pb = New PropertyBag
   pb.Contents = bArr
   tvw.Nodes.Clear
   nNumOfNodes = pb.ReadProperty(„NumberOfNodes“, 0)
   If nNumOfNodes = 0 Then
     Exit Sub
   nd If
 Do While nCount <nNumOfNodes
    nParent = pb.ReadProperty(„Parent“ & nCount, 0)
    nIndex = pb.ReadProperty(„Index“ & nCount, 0)
    sKey = pb.ReadProperty(„Key“ & nCount, „“)
    sText = pb.ReadProperty(„Text“ & nCount, „“)
    vImage = pb.ReadProperty(„Image“ & nCount, vbEmpty)
    vSelectedImage = pb.ReadProperty(„SelectedImage“ _
    & nCount, vbEmpty)
    If nParent Then
    tvw.Nodes.Add tvw.Nodes(nParent), tvwChild, sKey, _
      sText, vImage, vSelectedImage
    Else
     tvw.Nodes.Add , , sKey, sText, vImage, vSelectedImage
    End If
     nCount = nCount + 1
   Loop
End Sub

Pratite Krstaricu na www.krstarica.com