node diagram

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • pavlaras
    New Member
    • Jun 2006
    • 4

    node diagram

    hi all
    its been a while since i've worked on a VB program and im currently facing difficulties with the following code.I'm trying to create a diagram with nodes which you can manipulate and enter data.So far the program creates the nodes with numbered text by dragging the node and moves them by right click them.I want to be able to go back and delete any node i want plus to be able to access the nodes(enter text,extra form with info that the user will give)
    If you can provide pointers or links to example code or literature, it
    would be appreciated.

    image control-index property 0

    ' [ Class1 ] ------------------------------------------------
    Option Explicit

    Public X As Long
    Public Y As Long
    Public Text As String
    Public Handle As Image

    Again Thanks
    Public Kids As New Collection


    Friend Sub RenderLines(Sur face As Variant)
    Dim Item As Class1
    'Connect lines first, then do circles/text
    For Each Item In Kids
    Surface.Line (X, Y)-(Item.X, Item.Y), vbBlack
    Item.RenderLine s Surface
    Next
    End Sub

    Friend Sub RenderText(Surf ace As Variant)
    Dim Item As Class1
    ' draw the circles and text
    Surface.Circle (X, Y), 500, vbBlack
    Surface.Current X = X - Surface.TextWid th(Text) \ 2
    Surface.Current Y = Y - Surface.TextHei ght(Text) \ 2
    Surface.Print Text;

    For Each Item In Kids
    Item.RenderText Surface
    Next
    Handle.Move X - 500, Y - 500, 1000, 1000
    End Sub

    Public Function Locate(ByVal Index As Long) As Class1
    Dim kid As Class1
    Dim test As Class1
    ' reutrns the class whose handle has a certain Index
    If Handle.Index = Index Then
    Set Locate = Me
    Else
    For Each kid In Kids
    Set test = kid.Locate(Inde x)
    If Not test Is Nothing Then
    Set Locate = test
    Exit For
    End If
    Next
    End If
    End Function




    ' [ Form1 ] -------------------------------------------------------
    Option Explicit
    Private Node As Class1
    Private Drawing As Boolean
    Private StartX As Long, StartY As Long
    Private OldX As Long, OldY As Long
    Private StartNode As Class1


    Private Sub Form_DragDrop(S ource As Control, X As Single, Y As Single)
    DropIt Source, X, Y
    End Sub

    Private Sub Form_Load()
    Me.FillStyle = vbFSSolid
    Me.FillColor = vbWhite
    Me.DrawWidth = 2
    Set Node = NewItem(ScaleWi dth \ 2, ScaleHeight \ 2, "Root", Image1(0))
    End Sub

    Private Sub Form_Paint()
    Node.RenderLine s Me
    Node.RenderText Me
    End Sub

    Private Sub Image1_DragDrop (Index As Integer, Source As Control, X As Single, Y As Single)
    Dim img As Image
    Set img = Node.Locate(Ind ex).Handle
    DropIt Source, img.Left + X, img.Top + Y
    End Sub

    Private Sub Image1_MouseDow n(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = vbLeftButton Then
    'Select Draw Mode
    Drawing = True
    DrawMode = vbInvert
    DrawStyle = vbDot
    'Store start values
    Set StartNode = Node.Locate(Ind ex)
    StartX = StartNode.X
    StartY = StartNode.Y
    OldX = X + StartNode.Handl e.Left
    OldY = Y + StartNode.Handl e.Top
    Else
    OldX = X
    OldY = Y
    Node.Locate(Ind ex).Handle.Drag vbBeginDrag
    End If
    End Sub

    Private Sub Image1_MouseMov e(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim XX As Long, YY As Long
    If Drawing Then
    ' Convert Image click to Form coordinates
    XX = X + StartNode.Handl e.Left
    YY = Y + StartNode.Handl e.Top
    'Erase old line
    Line (StartX, StartY)-(OldX, OldY), vbBlack
    'Draw new line
    Line (StartX, StartY)-(XX, YY), vbBlack
    OldX = XX
    OldY = YY
    End If
    End Sub

    Private Sub Image1_MouseUp( Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Drawing Then
    Drawing = False
    DrawMode = vbCopyPen
    DrawStyle = vbSolid
    ' Create a new Image control, make it visible
    Load Image1(Image1.C ount)
    Image1(Image1.C ount - 1).Visible = True
    ' Add a new item to the node
    Node.Locate(Ind ex).Kids.Add NewItem(X + StartNode.Handl e.Left, _
    Y + StartNode.Handl e.Top, CStr(Image1.Cou nt - 1), _
    Image1(Image1.C ount - 1))
    Refresh
    End If
    End Sub

    Private Function NewItem(ByVal X As Long, ByVal Y As Long, Text As String, Handle As Image) As Class1
    Set NewItem = New Class1
    With NewItem
    .X = X
    .Y = Y
    .Text = Text
    Set .Handle = Handle
    End With
    End Function

    Private Sub DropIt(Source As Image, ByVal X As Long, ByVal Y As Long)
    Dim This As Class1
    ' Drops item
    Set This = Node.Locate(Sou rce.Index)
    This.X = X - (OldX - 500)
    This.Y = Y - (OldY - 500)
    Source.Drag vbEndDrag
    Refresh
    End Sub
Working...