Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    12

    [VB NET] disegnare in picturebox

    ciao a tutti,
    ho il seguente problema.
    Devo visualizzare una linea che segue il mouse in una picturebox che chiamo "immagine". Quando clicco sulla picturebox devo disegnare la linea in modo permanente nel punto cliccato.
    La parte della linea che segue il mouse l'ho fatta e funziona. Ora come fisso la linea quando clicco?
    Ecco il codice:

    Private Sub immagine_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles immagine.Paint
    Dim passo As Integer
    If piazza = True Then
    If Val(FATTORE) <> 0 Then passo = Int(2.5 / FATTORE)
    x2 = x1 : y2 = y1 - passo
    If FATTORE <> 0 Then e.Graphics.DrawLine(Pens.Black, x1, y1, x2, y2)
    End If
    End Sub


    Nell'evento MouseMove della picturebox ho messo
    immagine.refresh

    GRAZIE
    Pazzokli

  2. #2
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Che cos'è piazza?
    Che cos'è FATTORE?
    Questa riga non l'ho capita: x2 = x1 : y2 = y1 - passo

    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    12
    Si scusate, ho dato per scontato un po di cose

    piazza è una variabile boolean che mi serve per abilitare o no la visualizzazione della linea.
    Se la metto a TRUE allora a monitor devo vedere disegnata la linea che segue il mouse nell'evento mouse_move, se e FALSE non visualizzo niente.

    FATTORE è una variabile in cui memorizzo il fattore di conversione tra twip e mm perchè in un textbox metterò i mm di lunghezza della linea che poi con questa formuletta converto in twip per le coordinate
    codice:
    If Val(FATTORE) <> 0 Then passo = Int(2.5 / FATTORE)
    in questo caso ho forzato la lunghezza della linea a 2.5mm
    il valore della lunghezza in twip che ricavo viene assegnato alla variabile passo
    Quindi passo altro non è che la lunghezza della linea in twip

    x1,y1 sono le coordinate a cui punta il mouse
    x2,y2 sono le coordinate di arrivo della linea
    A questo punto per disegnare una linea verticale lunga 2.5mm applico la formula
    codice:
    x2 = x1 : y2 = y1 - passo
    CIAO
    GRAZIE

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Pazzokli
    ... la formula
    codice:
    x2 = x1 : y2 = y1 - passo
    Formula? In che senso ? Queste sono due istruzioni separate, ovvero

    x2 = x1

    y2 = y1 - passo

    E' questo quello che intendi con "formula"?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    12
    esatto, due istruzioni.

  6. #6
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    If FATTORE <> 0 Then e.Graphics.DrawLine(Pens.Black, x1, y1, x2, y2)
    Non capisco il perchè dell'If.

    Altra domanda: x1 e x2 dove vengono dichiarati (con che scope) e dove vengono modificati?

    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    12
    l' IF serve perchè se non c'è ancora un fattore di conversione tra mm e twip non puo disegnare la linea e quindi non esegue l'istruzione di disegno.
    X1 e Y1 sono le coordinate del mouse che si aggiornano nell'evento mouse_move della picturebox


  8. #8
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Un'idea che mi è venuta, che però funziona solo se devi disegnare linee:
    al posto di X1 e X2 e Y1 e Y2 usi una List(Of Point) nella quale imaggazini le varie coordinate delle linee. Poi, nell'evento Paint della Picturebox cicli la lista e disegni ogni linea. Ora lascio alla tua fantiasia il lavoro di implementare la mia idea (se ti piace).

    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

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.