Option Explicit 'This is a sample to build a treeview 'create a new project 'add a textbox (named Text1) 'add a command buton (named Command1) 'add a treview (named Treeview1)
' the tree is not fully created , childs nodes are added when the user expand the node ' to do so a dummy child is created first ' and destroyed when the parent node is expanded ' then childs are added. ' ' the tag property for each node is used to store the pointed page and the position inside the page
Dim Doc As iSED.QuickPDF
Private Sub Command1_Click() Dim strTemp As String 'control if text1 is filled If Trim(Text1) = "" Then MsgBox "Fill a valid Pdf File Name in the textbox" Exit Sub End If 'control if the file exist nd can be accessed On Error Resume Next strTemp = Dir(Text1) On Error GoTo 0 If strTemp = "" Then MsgBox "Ca'nt read the file" Exit Sub End If 'load the pdf lRet = Doc.LoadFromFile(Text1) If lRet = 0 Then MsgBox "The file ca'nt be read" Exit Sub End If 'unencryt If Doc.Encrypted Then Doc.Unencrypt End If GetOutLines End Sub
Private Sub Form_Load() Set Doc = New iSED.QuickPDF Dim lRet As Long TreeView1.Style = tvwTreelinesPlusMinusText TreeView1.LineStyle = tvwRootLines TreeView1.Indentation = 5 lRet = Doc.UnlockKey("Your Key") Doc.SetMeasurementUnits vbPixels Doc.SetOrigin 1 End Sub
Private Sub GetOutLines() 'Get Root Outlines Dim lRet As Long Dim OutId As Long Dim OutText As String Dim OutPage As Long Dim OutDest As Long Dim OutDestPosX As Long Dim Nod As Node Dim DummyChildNod As Node TreeView1.Nodes.Clear If Doc.OutlineCount = 0 Then 'no outlines 'first create a root node Set Nod = TreeView1.Nodes.Add(, , "K0", "BookMarks") Nod.Tag = "1|0" 'create a node for each page For lRet = 1 To Doc.PageCount Set DummyChildNod = TreeView1.Nodes.Add(Nod, tvwChild, , "Page " & CStr(lRet)) DummyChildNod.Tag = CStr(lRet) & "|0" Next Exit Sub End If OutId = Doc.GetFirstOutline If OutId = 0 Then 'security Exit Sub End If 'create then root node OutText = Doc.OutlineTitle(OutId) Set Nod = TreeView1.Nodes.Add(, , "K" & CStr(OutId), OutText) Nod.Tag = GetOutDest(OutId) If Doc.GetFirstChildOutline(OutId) <> 0 Then 'if child exist then create a Dummy node Set DummyChildNod = TreeView1.Nodes.Add(Nod, tvwChild, , "Dummy") DummyChildNod.Tag = "*" End If 'get the others entry a the root level Do While OutId <> 0 OutId = Doc.GetNextOutline(OutId) If OutId = 0 Then Exit Do End If OutText = Doc.OutlineTitle(OutId) Set Nod = TreeView1.Nodes.Add(, , "K" & CStr(OutId), OutText) Nod.Tag = GetOutDest(OutId) If Doc.GetFirstChildOutline(OutId) <> 0 Then 'if child exist then create a Dummy node Set DummyChildNod = TreeView1.Nodes.Add(Nod, tvwChild, , "Dummy") DummyChildNod.Tag = "*" End If Loop End Sub Private Sub GetChildOutLines(NodParent As Node) 'get then childs for this outline Dim lRet As Long Dim OutId As Long Dim OutText As String Dim OutPage As Long Dim OutDest As Long Dim OutDestPosX As Long Dim OutParentId As Long Dim Nod As Node Dim DummyChildNod As Node OutParentId = Val(Mid(NodParent.Key, 2)) Set DummyChildNod = NodParent.Child If DummyChildNod Is Nothing Then 'no childs Exit Sub End If If DummyChildNod.Tag <> "*" Then 'no dummy child=> already expanded Exit Sub End If 'remove the dummy child and 'create the childs TreeView1.Nodes.Remove DummyChildNod.Index OutId = Doc.GetFirstChildOutline(OutParentId) If OutId = 0 Then Exit Sub End If 'create the first child OutText = Doc.OutlineTitle(OutId) Set Nod = TreeView1.Nodes.Add(NodParent, tvwChild, "K" & CStr(OutId), OutText) Nod.Tag = GetOutDest(OutId) If Doc.GetFirstChildOutline(OutId) <> 0 Then 'if child exist then create a Dummy node Set DummyChildNod = TreeView1.Nodes.Add(Nod, tvwChild, , "Dummy") DummyChildNod.Tag = "*" End If 'get the others entry at the same level Do While OutId <> 0 OutId = Doc.GetNextOutline(OutId) If OutId = 0 Then Exit Do End If 'create thers node at the same level OutText = Doc.OutlineTitle(OutId) Set Nod = TreeView1.Nodes.Add(NodParent, tvwChild, "K" & CStr(OutId), OutText) Nod.Tag = GetOutDest(OutId) If Doc.GetFirstChildOutline(OutId) <> 0 Then 'if child exist then create a Dummy node Set DummyChildNod = TreeView1.Nodes.Add(Nod, tvwChild, , "Dummy") DummyChildNod.Tag = "*" End If Loop End Sub
Private Function GetOutDest(OutId As Long) As String 'get page and pos of the destination 'the result will be stored in the tag of each node Dim OutDest As Long Dim OutPage As Long Dim OutDestPosX As Long OutDest = Doc.GetOutlineDest(OutId) OutPage = Doc.GetDestPage(OutDest) OutDestPosX = Abs(ScaleX(Doc.GetDestValue(OutDest, 2), vbPoints, vbMillimeters)) If OutDestPosX < 0 Then OutDestPosX = 0 End If GetOutDest = CStr(OutPage) & "|" & OutDestPosX End Function
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node) 'got a selection on the treeview, 'retrieve the page and position from the top Dim iPosit As Integer Dim PosX As Long Dim Page As Long If Val(Node.Tag) = 0 Then 'security Exit Sub End If iPosit = InStr(Node.Tag, "|") 'retrieve the page ans position inside the page ' Page = Val(Left(Node.Tag, iPosit - 1)) PosX = Val(Mid(Node.Tag, iPosit + 1)) 'modify these line to match your needs MsgBox "Page " & CStr(Page) & " / Vertical position " & CStr(PosX) End Sub Private Sub TreeView1_Expand(ByVal Node As MSComctlLib.Node) 'expand the treeview GetChildOutLines Node End Sub
|