cs_gozzer
Messages postés6Date d'inscriptionjeudi 15 septembre 2005StatutMembreDernière intervention 8 novembre 2007
-
30 oct. 2007 à 16:27
cs_gozzer
Messages postés6Date d'inscriptionjeudi 15 septembre 2005StatutMembreDernière intervention 8 novembre 2007
-
8 nov. 2007 à 09:02
Bonjour,
Je ne suis pas du tout aguerri en programmation sous VB mais j'ai déjà réussi à écrire quelques lignes qui me permettent d'afficher une Image (Picture box dans une form) tout le temps au premier plan. J'ai aussi réussi à faire en sorte de pouvoir la déplacer sur le bureau à l'aide de la souris.
Là où j'ai du mal, c'est que j'ai besoin qu'elle se déplace toute seule de manière aléatoire (et non sacadée) sur toute la surface de mon écran...
J'ai trouvé beaucoup de pistes sur ce site mais je n'ai réussi à en faire aboutir aucune...
Quelqu'un aurait il la solution ?
Voici ce que j'ai ecrit:
Option
Explicit
'declaration
des constantes
Private
Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal
hWndInsertAfter As Long, ByVal X As Long, Y, ByVal cx As Long, ByVal cy As
Long, ByVal wFlags As Long) As Long
Const
HWND_TOPMOST = -1
'Const
HWND_NOTOPMOST = -2
Const
SWP_NOMOVE = &H2
Const
SWP_NOSIZE = &H1
Const
TOPMOST_FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Private Sub
Form_Load()
Dim WindowRegion As Long
'Propriétés de la picture box
Picture1.AutoRedraw = True
Picture1.AutoSize = True
Picture1.BorderStyle = 0
Picture1.ScaleMode = 3
'Position de la
picture box
Picture1.top 0: Picture1.left 0
Brosske
Messages postés98Date d'inscriptionjeudi 25 novembre 2004StatutMembreDernière intervention12 août 20101 6 nov. 2007 à 11:57
Alors, ajoute un timer sur le form, l'event timer1_timer sera appelé arès chaque x milisecondes. Dans l'event tu mets le bout de code qui déplace un peu le form du style.
dans le form-load :
offsetx=10
offsety=10
dans l'event Timer1_timer:
me.left=me.left+offsetx
me.top=me.top+offsety
'controle si le form ne dépasse pas l'écran:
if me.left<0 or (me.left+me.width)>screen.width then offsetx=-offsetx
if me.top<0 or (me.top+me.heigt)>screen.height then offsety=-offsety
et si tu veux vraiment que le premier emplacement soit bien, il faut changer ton bout de code comme suivant :
Me.Left = Rnd * Screen.Width - me.with-11
Me.Top = Rnd * Screen.Height - me.height-11 'je retire encore 11 pour avoir une réserve
cs_gozzer
Messages postés6Date d'inscriptionjeudi 15 septembre 2005StatutMembreDernière intervention 8 novembre 2007 6 nov. 2007 à 15:25
Oki,
Merci pour ton aide F.M. mais je crois que j'ai encore besoin de tes conseils...
Voici ce que j'ai compris de ta deuxième réponse:
-----------------------------------------------------------------
Option Explicit
Dim offsetx As Byte
Dim offsety As Byte
_________________________________________________
End Sub
_________________________________________________
Private Sub Timer1_Timer()
Me.Left = Me.Left + offsetx
Me.Top = Me.Top + offsety
'controle si le form ne dépasse pas l'écran:
If Me.Left < 0 or (Me.Left + Me.Width) > Screen.Width Then offsetx = -offsetx
If Me.Top < 0 or (Me.Top + Me.Height) > Screen.Height Then offsety = -offsety
End Sub
_________________________________________________
Et evidemment, ma form ne bouge pas d'un poil ?!
Je suis sur que j'ai oublié un truc mais je ne vois plus quoi...
cs_gozzer
Messages postés6Date d'inscriptionjeudi 15 septembre 2005StatutMembreDernière intervention 8 novembre 2007 6 nov. 2007 à 16:37
Mille merci...effectivement ça tourne! Enfin, ça se déplace!
Le seul "hic" se situe au niveau des lignes que tu as écrites pour le moment où la form va dépasser l'écran: quand la form touche un bord, au lieu de changer de sens j'ai un message d'erreur:
Erreur d'exécution '6':
Dépassement de capacité
et offsetx = -offsetx se retrouve surligné en jaune... ?