Visualizzazione dei risultati da 1 a 10 su 10

Hybrid View

  1. #1

    Problema nello spostare un label in base alla posizione del mouse (c# windows forms)

    Problema nello spostare un label in base alla posizione del mouse


    Ciao, vorrei creare un label che mi mostri le coordinate X e Y di un grafico in tempo reale in base alla posizione del mouse. Quindi voglio che il text del label sia aggiornato mostrando i valori x e y, inoltre voglio anche che il label si sposti continuamente, in modo da seguire la posizione del mouse. Per fare ció pensavo di usare l'evento MouseMove, e a dire il vero ci sono anche riuscito. In pratica se muovo il mouse lentamente funziona tutto alla perfezione, il problema si verifica quando muovo il mouse velocemente (o meglio non lentamente, anche muovendolo normalmente dá problemi). Questo é il problema: (vedi allegati)

    Come si vede se muovo il mouse velocemente rimane solo il bordo del label e viene mostrato lungo tutta la traiettoria fatta dal mouse. Quando poi mi fermo con il mouse, allora la grafica si aggiorna in modo corretto, quindi sembra proprio un problema di aggiornamento della grafica che non é abbastanza veloce.
    Consigli?
    Immagini allegate Immagini allegate
    Ultima modifica di Edoardo998; 04-05-2023 a 00:07

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Come hai disegnato il grafico su cui si muove la Label?
    E perché non includere l'informazione direttamente nel grafico, disegnandola come il resto invece di usare la Label?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  3. #3
    In che senso come ho disegnato... il grafico é un controllo "chart" di windows forms, e il grafico l'ho realizzato per punti da codice andando ad inserire i punti uno ad uno (quindi chart1.series........AddXY(...)). Voglio creare un pannello (label) che segua il mouse in tempo reale e mi mostri le coordinate X e Y su cui si trova il mouse in quel momento. Il problema é che si crea quel brutto effetto muovendo il mouse velocemente.
    Lo so che potrei mettere un label fisso da qualche parte, ma voglio che insegua il mouse perché mi sembra piú carino.

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Quote Originariamente inviata da Edoardo998 Visualizza il messaggio
    In che senso come ho disegnato... il grafico é un controllo "chart" di windows forms, e il grafico l'ho realizzato per punti da codice andando ad inserire i punti uno ad uno (quindi chart1.series........AddXY(...)).
    Ecco, questo era il senso.
    Scusa, ma non era né automatico né scontato, seppur probabile, quindi meglio appurarlo.

    Quote Originariamente inviata da Edoardo998 Visualizza il messaggio
    Voglio creare un pannello (label) che segua il mouse in tempo reale e mi mostri le coordinate X e Y su cui si trova il mouse in quel momento. Il problema é che si crea quel brutto effetto muovendo il mouse velocemente.
    Lo so che potrei mettere un label fisso da qualche parte, ma voglio che insegua il mouse perché mi sembra piú carino.
    Il problema è legato al fatto che il controllo del grafico non si ridisegna al passaggio della Label su di esso, e quindi lascia "sporco" la rappresentazione sottostante, fino a quando non viene detto a Windows (o il SO non stabilisce) che deve essere ridisegnata.

    Prova a chiamare il metodo Invalidate() del grafico quando sposti la Label, in modo da scatenare il ridisegno.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  5. #5
    Quote Originariamente inviata da Edoardo998 Visualizza il messaggio
    In che senso come ho disegnato... il grafico é un controllo "chart" di windows forms, e il grafico l'ho realizzato per punti da codice andando ad inserire i punti uno ad uno (quindi chart1.series........AddXY(...)). Voglio creare un pannello (label) che segua il mouse in tempo reale e mi mostri le coordinate X e Y su cui si trova il mouse in quel momento. Il problema é che si crea quel brutto effetto muovendo il mouse velocemente.
    Lo so che potrei mettere un label fisso da qualche parte, ma voglio che insegua il mouse perché mi sembra piú carino.
    Quote Originariamente inviata da alka Visualizza il messaggio
    Ecco, questo era il senso.
    Scusa, ma non era né automatico né scontato, seppur probabile, quindi meglio appurarlo.


    Il problema è legato al fatto che il controllo del grafico non si ridisegna al passaggio della Label su di esso, e quindi lascia "sporco" la rappresentazione sottostante, fino a quando non viene detto a Windows (o il SO non stabilisce) che deve essere ridisegnata.

    Prova a chiamare il metodo Invalidate() del grafico quando sposti la Label, in modo da scatenare il ridisegno.
    Ok grazie, cosí funziona. Ho provato ad usare Invalidate() e dopo Update(). Tuttavia mi chiedevo, c'é un modo per evitare di ridisegnare tutto il grafico, e ridisegnare solo il label? Perché essendoci tanti punti, ridisegnare ogni volta tutto crea lag.

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Quote Originariamente inviata da Edoardo998 Visualizza il messaggio
    Tuttavia mi chiedevo, c'é un modo per evitare di ridisegnare tutto il grafico, e ridisegnare solo il label?
    Se non ridisegni il grafico, rimane l'effetto "sporco" sul video: questo viene "cancellato" proprio grazie al fatto che il ridisegno del grafico traccia lo sfondo e il resto degli elementi, eliminando il "residuo" della Label.

    Per fare tutto in modo più efficiente, non si dovrebbe usare la Label.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

Tag per questa discussione

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 © 2026 vBulletin Solutions, Inc. All rights reserved.