Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    malfunzionamento evento mousemuve

    Ciao,

    volevo sapere perchè, e come si fa a evitare questo problema:

    codice:
    Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    
    if button then
    PSet (X, Y)
    end if
    end sub
    il problema è che quando si disegna, e si traccia qualche linea velocemente, il computer non mi colora tutti i punti su cui sono passato, ma soltanto alcuni, perciò deduco che l'evento mouse muve non funziona poi così bene. allora ho pensato che l'ideale sarebbe inserire un cronometro che viene azionato dall'evento mouse douwn e he viene disazionato dall'evento mouse up.
    il problema è che sull'evento timer dovrei scrivere: pset (x,y), ma non so le coorinate del puntatore. come faccio a trovarle?

    grazie

  2. #2
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    non serve impostare timer vari

    basta cambiare metodo per il tracciamento della linea.

    usa 2 eventi: MouseDown e MouseMove

    codice:
    Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Me.PSet (X, Y)
    End Sub
    
    Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Me.Line -(X, Y)
    End Sub
    così dovrebbe andare

    Boolean

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    All'interno di un altro sito - ma purtroppo non ricordo dove - questa problematica veniva risolta attraverso l'uso di hook di sistema intercettando i movimenti del mouse.

    Magari ci si può basare su questa ipotesi per effettuare ricerche mirate...

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  4. #4
    Ciao..potresti anche fare in modo che il mouse disegni esclusivamente quando il tasto (destro o sinistro) è premuto, ma questo dipende dalle tue esigenze (io le ebbi quindi feci così

    codice:
    Dim pressione As Boolean
    
    Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    pressione = True
    'procedura per il disegno
    End Sub
    
    Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If pressione = True Then
    'procedura per il disegno
    End If
    End Sub
    
    Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    pressione = False
    End Sub
    ciao..

  5. #5
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    in effetti, il mio codice si potrebbe integrare con quello scritto da MDE

    codice:
    Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button <>1 Then Exit Sub
    Me.PSet (X, Y)
    End Sub
    
    Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button <>1 Then Exit Sub
    Me.Line -(X, Y)
    End Sub
    Boolean

  6. #6
    Ciao Boolean, auguri di buon 2006..

    Il tuo codice è migliore del mio (in quanto più preciso, sintetico); in effetti io all'epoca avevo fatto uso di una variabile booleana in quanto avevo associato il disegno non solo alla pressione del button del mouse ma anche alla pressione di un commandbutton.

    ciao

    MDE2005

  7. #7
    ciao,

    grazie di tutti questi consigli, con line -(x,y) mi trovo bene, ma per le mie esigenze vorrei un qualcosa che controlli con molta più precisione x,y.
    in effetti, se ho capito bene, line -(x,y) mi crea una linea con l'ultimo punto rilevato dall'evento mousemuve, perciò non è molto preciso (come ripeto secondo le mie esigenze).

    comunque volevo sapere se esiste un modo per sapere in qualsiasi momento le coordinate del puntatore.

    grazie

  8. #8
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    prova a dare un'occhiata alla funzione API GetCursorPos, la trovi nel visualizzatore API di VB o su internet

    bada bene che questa funzione, però, restituisce le coordinate relative *allo schermo*, non al form, e in pixel.

    Boolean

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.