Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    191

    [VB2008]Selezionare linea...

    Ciao a tutti, sono riuscito tramite questo codice trovato in giro per il web, a disegnare delle linee:
    ' True while we are drawing the new line.
    Private m_Drawing As Boolean

    ' Buffer for erasing rubberband lines.
    Private m_BufferBitmap As Bitmap
    Private m_BufferGraphics As Graphics

    ' The mouse position.
    Private m_X1 As Integer
    Private m_Y1 As Integer
    Private m_X2 As Integer
    Private m_Y2 As Integer

    ' Start drawing a rubberband line.
    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
    ' Do nothing if this isn'tthe left mouse button.
    If e.Button <> MouseButtons.Left Then Exit Sub
    m_Drawing = True

    ' Save a snapshot of the form.
    SaveSnapshot()

    ' Save the current mouse position.
    m_X1 = e.X
    m_X2 = e.X
    m_Y1 = e.Y
    m_Y2 = e.Y
    End Sub

    Private Sub SaveSnapshot()
    Dim new_bitmap As Bitmap

    ' Make a new bitmap that fits the form.
    new_bitmap = New Bitmap(Me.Size.Width, Me.Size.Height, Me.CreateGraphics())
    m_BufferGraphics = Graphics.FromImage(new_bitmap)

    ' Clear the new bitmap.
    m_BufferGraphics.Clear(Me.BackColor)

    ' Copy the existing bitmap's contents into
    ' the new bitmap.
    If Not (m_BufferBitmap Is Nothing) Then
    m_BufferGraphics.DrawImage(m_BufferBitmap, 0, 0)
    End If

    ' Save the new bitmap and graphics objects.
    m_BufferBitmap = new_bitmap
    End Sub

    ' Continue drawing the rubberband line.
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
    ' Do nothing if we're not drawing.
    If Not m_Drawing Then Exit Sub

    ' Save the new point.
    m_X2 = e.X
    m_Y2 = e.Y

    ' Erase the previous line.
    DrawForm(Me.CreateGraphics())

    ' Draw the new line directly on the form.
    Me.CreateGraphics().DrawLine( _
    Pens.Gray, m_X1, m_Y1, m_X2, m_Y2)
    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

    ' 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_Drawing Then Exit Sub
    m_Drawing = False

    ' Save the new point.
    m_X2 = e.X
    m_Y2 = e.Y

    ' Draw the new line permanently on the buffer.
    m_BufferGraphics.DrawLine( _
    Pens.Blue, m_X1, m_Y1, m_X2, m_Y2)

    ' Redraw to show the new line.
    DrawForm(Me.CreateGraphics())
    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

    Il mio problema è ora, come posso fare per selezionare una linea, e magari cliccando il tasto canc cancellarla?...Grazie mille a tutti...

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Sbagliare è umano, perseverare è diabolico.

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da Pirelli72
    Se non si hanno risposte da dare, è inutile intervenire.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Si scusa ma era per fare tornare in cima alla lista il Thread!
    Sbagliare è umano, perseverare è diabolico.

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da Pirelli72
    Si scusa ma era per fare tornare in cima alla lista il Thread!
    Questo lo fa l'autore della discussione, se interessato, altrimenti la situazione diventa ingestibile.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    191
    Nessuno sa come posso fare?

  7. #7
    Dovresti impostare la questione in maniera diversa; attualmente tu disegni le linee e le mantieni in memoria tutte insieme come una bitmap; per poterle selezionare/eliminare dovresti conservare invece le loro coordinate (ad esempio in un contenitore List) e ridisegnarle quando necessario; ad ogni click dovresti fare un controllo per vedere se per le coordinate cliccate passa una linea, eventualmente selezionarla (ridisegnandola in un colore diverso) e consentire di eliminarla (rimuovendo le sue coordinate dalla lista e ridisegnando il tutto).
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Per fare quello che chiedi devi seguire il consiglio di Mitaly, memorizzare le coordinate dei punti e cancelllare la linea che hai selezionato, intercettando la posizione del puntatore se questo si trova sopra una particolare linea...

    Per proseguire con la tua idea di realizzare un CAD ti consiglio di consultare la guida MSDN : GDI+

    Ciao

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    191
    Uhm, questa idea era venuta in mente anche a me, l'unico problema è che con quel codice per fare la linea bisogna tenere il mouse pressato e poi rilasciarlo nel punto in cui si vuole che la linea finisca, e cosi non riesco a memorizzare le coordinate finali...Come posso fare per far si che per fare la linea, devo fare un primo click, poi spostarmi da un altra parte, rifare un secondo click, e che la linea mi appaia?

  10. #10
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    bè immagino che tu possa intercettare l'evento mouse up per le coordinate finali

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.