MadMax4
Messages postés4Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention29 mars 2007
-
28 mars 2007 à 16:18
MadMax4
Messages postés4Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention29 mars 2007
-
29 mars 2007 à 13:00
Bonjour,
J'ai un souci avec l'évènement Paint d'un formulaire.
Je tente de dessiner une bille qui se déplace (genre casse-briques) dans le formulaire en bouclant sur paint et je voudrais pouvoir l'arrêter avec "Escape"
Je teste cette touche avec un keypress mais il semble que l'évènement keypress ne soit jamais intercepté dans mon programme.
J'ai vérifié que la form avait le focus.
Je sèche lamentablement. Est-ce qu'un esprit plus dégourdi que moi aurait une idée ?
merci
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 29 mars 2007 à 12:27
Bonjour
A mon avis c'est que tu fait une boucle sans utiliser de DoEvents (un Do Loop infini dans dessine_bille), Application.DoEvents.
Le mieux serais de faire en sorte que tu vire cette boucle pour la remplacée par un thread ou un truc du genre.
Il est plus facile de batiser quelqu'un que de le convertir.(surtout en programmation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
MadMax4
Messages postés4Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention29 mars 2007 28 mars 2007 à 16:29
Merci Renfield.
Hélas, j'ai pensé à cette possibilité :
le keydown ou keyup n'est pas non plus intercepté dans mon cas.
le keypress sur un simple A donne la même chose !!!
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 28 mars 2007 à 17:06
nb: je ne fais pas de .Net, j'aide a l'aveuglette ^^
dépend de qui a le focus...
en VB6, les Forms possèdent une propriété KeyPreview qui leur permet de recevoir les evenements clavier avant le controle qui a le focus...
MadMax4
Messages postés4Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention29 mars 2007 28 mars 2007 à 17:13
Merci Renfield et HommingPigeon.
J'ai déjà mis cette propriété à True (ça a été un de mes faux espoir ...)
Mais ça ne change rien !
Au cas où, je glisse ci-dessous mon source :
(au passage, l'aspect ludique de l'objectif est trompeur, je cherche seulement à apprendre VB.net en autodidacte : c'est dur !)
*******************************
Public
Class Form2
Private
Sub Form2_paint(
ByVal sender
As System.Object,
ByVal e
As System.Windows.Forms.PaintEventArgs)
Handles
MyBase.Paint
Dim c
As System.Drawing.Color
Dim bas, droite
As
Boolean
Dim bi
As
New bille
Dim largeur, x, y, rebond
As
Integer
'Dim i, j, rebond As Integer
'Dim start, finish As Doublec =
Me.BackColor
Dim pinceau
As
New SolidBrush(c)Randomize()
Dim angle, angle_initial, nombre_alea
As
Singlenombre_alea = Rnd()
bi.dessine_bille(angle, Brushes.Red, pinceau, x, y, largeur, e)
Me.Close()
End
Sub
Private
Sub Form2_KeyPress(
ByVal sender
As System.Object,
ByVal e
As System.Windows.Forms.KeyPressEventArgs)
Handles
MyBase.KeyPress
If e.KeyChar <> Convert.ToChar(Keys.A)
Then
End
End
If
End
Sub
Private
Sub Form2_Load(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles
MyBase.Load
Me.KeyPreview =
True
End
SubEnd
ClassPublic
Class bille
Public
Sub dessine_bille(
ByVal angle
As
Single,
ByVal couleur
As System.Drawing.SolidBrush,
ByVal coul_fond
As System.Drawing.SolidBrush,
ByVal x
As
Integer,
ByVal y
As
Integer,
ByVal largeur
As
Integer,
ByVal e
As System.Windows.Forms.PaintEventArgs)
Dim haut, bas, droite, gauche
As
Boolean
Dim i, j, rebond
As
Integer
Dim start, finish
AsDoublebas Truedroite
True
Do
While rebond < 10
DoForm2.Activate()
If bas
And droite
Theni += 1
' je vais vers la droitej += 1
' je vais vers le bas x CInt(i * Math.Cos(angle))y
CInt(-j * Math.Sin(angle))
End
If
If bas
And gauche
Theni -= 1
' je vais vers la gauchej += 1
' je vais vers le bas x CInt(-i * Math.Cos(angle))y
CInt(-j * Math.Sin(angle))
End
If
If haut
And droite
Theni += 1
' je vais vers la droitej -= 1
' je vais vers le haut x CInt(i * Math.Cos(angle))y
CInt(j * Math.Sin(angle))
End
If
If haut
And gauche
Theni -= 1
' je vais vers la gauchej -= 1
' je vais vers le hautx CInt(-i * Math.Cos(angle))y
CInt(j * Math.Sin(angle))
End
Ife.Graphics.FillEllipse(Brushes.Red, x, y, largeur, largeur)
start = Microsoft.VisualBasic.DateAndTime.Timer
finish = start + 0.01
Do
While Microsoft.VisualBasic.DateAndTime.Timer < finish
Loope.Graphics.FillEllipse(coul_fond, x, y, largeur, largeur)
Loop
Until j = 0
Or y + largeur + 27 >= Form2.Bounds.Height
Or i = 0
Or x + largeur + 10 >= Form2.Bounds.Width