Quantcast
Channel: Visual Basic Tips and Tricks
Viewing all articles
Browse latest Browse all 2212

Utilizzare una RubberBand Line

$
0
0

Ciao a tutti

Devo collegare due panels tra di loro con una RubberBand Line: [panel1]_____[panel2]

a) click su un button di panel1--> Fisso punto di origine. Muovendo il mouse vedo la rubber band disegnarsi

b) click su un button panel2 --> Fisso punto di destinazione

 

1) I panels sono movibili per cui quando vengono riposizionati la RubberBand Line deve "adeguarsi".

2) La RubberBand deve poter essere cancellata per eliminare il collegamento.

Per semplificazione la linea verrà sempre disegnata solo sul form ospitante.

Ho trovato questo codice di partenza che pero ha la pecca di costringere l'utente ad avere il pulsante sx del mouse sempre premuto.

Non avendo esperienza di grafica vi chiedo di supportarmi nello sviluppo. Grazie



------------------------------------------------------------------------------------------------------                   

    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown

        'Esclude l'utilizzo del bottone destro del mouse
        If e.Button <> MouseButtons.Left Then Exit Sub
        'Indica che ho fissato il punto di inizio
        m_Inizio_Disegno_Linea = True
        'Salva le coordinate correnti
        m_Punto_Iniziale = Control.MousePosition
        m_Punto_Mobile = m_Punto_Iniziale

    End Sub
------------------------------------------------------------------------------------------------------

    ' Continue drawing the reversible line.
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove

        ' Esce se non ho fissato il punto di inizio
        If Not m_Inizio_Disegno_Linea Then Exit Sub
        ' Cancella la linea precedente
        ControlPaint.DrawReversibleLine(m_Punto_Iniziale, m_Punto_Mobile, Me.BackColor)
        ' salvo la posizione attuale
        m_Punto_Mobile = Control.MousePosition
        ' Disegno la nuova linea Reversibile
        ControlPaint.DrawReversibleLine(m_Punto_Iniziale, m_Punto_Mobile, Me.BackColor)

    End Sub
------------------------------------------------------------------------------------------------------

    ' Finish drawing the new line.
    Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp

        ' Do nothing if we're not drawing.
        If Not m_Inizio_Disegno_Linea Then Exit Sub
        'm_Inizio_Disegno_Linea = False

        ' Disegna la linea PERMANENTE nel buffer
        ' I punti usati in DrawReversibleLine sono coordinate dello schermo
        ' Per convertirli in coordinate del form uso il metodo PointToClient
        m_BufferGraphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
        m_BufferGraphics.DrawLine(Pens.Blue, Me.PointToClient(m_Punto_Iniziale), Me.PointToClient(m_Punto_Mobile))
        ' Ridisegno per mostrare la nuova linea
        DrawForm(Me.CreateGraphics())

    End Sub
------------------------------------------------------------------------------------------------------

    ' Redraw the saved buffer.
    Private Sub DrawForm(ByVal gr As Graphics)
        If Not (m_BufferBitmap Is Nothing) Then gr.DrawImage(m_BufferBitmap, 0, 0)
    End Sub
------------------------------------------------------------------------------------------------------

    ' Redraw the form.
    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        DrawForm(e.Graphics)
    End Sub

------------------------------------------------------------------------------------------------------






Viewing all articles
Browse latest Browse all 2212