Paint del form senza rinfrescare completamente

sabato 07 gennaio 2012 - 16.25
Tag Elenco Tags  C#  |  VB.NET  |  .NET 3.5  |  .NET 4.0

maurizio79 Profilo | Junior Member

Ciao a tutti. Ho creato un'applicazione WinForms molto semplice che utilizza un controllo timer per chiamare il metodo Refresh del form e ridisegnarvi sopra ad intervalli regolari una riproduzione della finestra di un' altra applicazione tramite il metodo Graphics.CopyFromScreen(...). Tutto funziona benissimo solo che ogni volta il contenuto del form viene prima "azzerato" e poi ricreato, creando uno sfarfallio molto antipatico. L' effetto che vorrei ottenere invece è quello di una sorta di video. Pensavo che la soluzione potrebbe essere quella di evitare la fase di "azzeramento" ma non riesco a capire se la cosa è possibile e come.


Ciao e grazie, Maurizio

Jeremy Profilo | Guru

Ciao Maurizio.
Il Refresh ricorsivo del Form, crea inevitabilmente l'effetto che lamenti.
Se mostri un pò di codice in più, sono sicuro che si riuscirebbe a trovare una soluzione alternativa.
Nello specifico, non credo che tu abbia bisogno di eseguire continuamente il Refresh del Form.

Facci sapere. . .
Ciao

maurizio79 Profilo | Junior Member

Nessun problema, cerco di semplificare al massimo la logica applicativa e scrivere solo il sodo. La proprietà Interval del timer è impostata su 100 in genere:

Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Paint_Form(e)
End Sub
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
Me.Refresh()
End Sub
Private Sub Paint_Form(e As System.Windows.Forms.PaintEventArgs)
Dim rect As New RECT()
'Dopo di che creo l' oggetto RECT che contiene le dimensioni della finestra attiva sullo schermo e poi:
Me.Width = rect.Right - rect.Left
Me.Height = rect.Bottom - rect.Top
e.Graphics.CopyFromScreen(New Point(rect.Left, rect.Top), _
New Point(0, 0), New Size(Me.Width, Me.Height))
End Sub


Ciao e grazie, Maurizio

Jeremy Profilo | Guru

Ciao Maurizio.
Ho modificato un pò il codice
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Il risultato, potrebbe non essere quello che ti serve, ma ti propone un modo diverso per raggiungere l'oggetto Graphics del Form e dovrebbe mostrarti come è possibile eliminare l'effetto sfarfallio del form.

Rimango comunque a disposizione per ulteriori info.

Facci sapere...
Ciao

maurizio79 Profilo | Junior Member

E invece il risultato è esattamente quello che cercavo.... Grazie mille! Ho capito dove sbagliavo.

Ciao e grazie, Maurizio
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5