none
la fenêtre form1, lors de l'execution du programme, ne peut pas se déplacer sur le bureau et un sablier aparaît lorsque je survole avec la souris RRS feed

  • Question

  • Bonjours à tous, je suis débutant sous visual basic express et je trace des rectangles des lignes des ellipses sur une image *.gif de terrain de rugby (form1) pour faire une simulation de jeu. Maintenant, je voudrais utiliser la souris et le clavier pour cliker sur des buttons au préalablement inclus dans form1, ou créer un évènement clavier pour ouvrir des menus ou listes etc..(dessiner dans une picturebox...) et ainsi créer les options de choix de jeux etc.. Seulement je suis sous windows 7 64 bits et pour utiliser toutes les options du déboggeur (déjà la modification du code lors de la mise en pause du programme) il faut une machine virtuelle pour windows 7 32 bits ainsi j'ai plus de propriétés utilisables du bébuggeur. Malgré le passage en 32 bits mon form1, lors de l'exécution du programme, reste intouchable par la souris: on ne peut ni déplacer ni réduire la fenêtre et le sablier s'affiche au survol de la fenêtre, donc, impossible de pointer la picturebox, le button et autre. De même, si mon code est bon, les évènements clavier ne fonctionnent pas, me semble t'il? (je lui demande de beeper quant j'appuie sur entrée et rien ne marche). Est - ce une erreur de code? Est-ce une incompatibilité de visual basic express avec mon ordinateur? Et comment peut-on remédier au problème.

      
    mardi 12 juin 2012 17:53

Toutes les réponses

  • Bonjour,

    Je crois bien que le 64 accepte le 32, ceci vient peut être de ton code, à voir...

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    mardi 12 juin 2012 21:18
  • Voilà le bout de code avec une picturebox et un keypress:

    Et voilà ce que ça donne quand le programme est en cours, sauf que le pointeur de la souris est un sablier (ne se voit pas à la capture d'écran!?.)!


    La fenêtre form1 reste figée lors de l'exécution du programme. Quand je clique sur picturebox rien ne beepe, pareil quand j'appuie sur entrée:rien. Mon code est-il opérationnel? Faut-il changer le forme du pointeur? 

    Merci pour vos réponses déjà envoyées et les autres à venir!


    • Modifié Galibert lundi 29 octobre 2012 19:57
    mercredi 13 juin 2012 01:21
  • Bonjour Galibert , suite,

    Alors déjà, pour pouvoir récupérer le code dans le forum (ici), il faut le copier coller en activant au dessus l'avant dernier icône "insérer le bloc de code" (en texte bulle), car avec une image on est obligé pour tester de recopier tout ton code. De même si tu es satisfait d'une réponse tu peux lui donner des points en cliquant en haut à gauche de cette dernière dans le petit rectangle contenant une flèche verte ver le haut.

    Concernant le BEEP, depuis après XP je n'arrive plus à faire tourner cette fonction (beep du haut-parleur interne), tout du moins sur portable. J'ai déjà posé la question sans avoir, je crois bien, de réponse substantielle, c'est une sorte de mystère ; à l'instar du BEEP d'ailleurs, la fonction qui permet d'envoyer un certain temps une certaine fréquence au haut-parleur interne n'a pas l'air de mieux marcher, ni sous vb6 (???) Pour ma part j'ai résolu ceci en affichant la zone concernée en rouge une seconde par exemple, puis en la remettant d'origine, ce qui fait comprendre à l'utilisateur que l'objet voit rouge, mais bon, dans une picture ça ferait désordre. Une solution peut être de lancer l'objet son et de lui faire jouer un son prédéfini par toi, hum :o)

    Pour ce qui concerne ton code, en effet, quand je l'ai lancé il fonctionnait à peu près comme tu le décris, je crois (car je ne suis pas très performant en graphique vbNet, venant de vb6 bien plus simple en la matière), donc je crois qu'il faut que tu fasses toutes tes fonctions d'affichage dans ou via la procédure évènementielle PAINT. Ceci si tu dois changer l'affichage, ou encore masquer la fenêtre, soit par déplacement, soit par modification de sa taille ; en quelques mots le graphique est à régénérer de force dans cette procédure à chaque fois qu'il est masqué lato sensu. Par contre, si tu n'avais rien à toucher au graphique comme susdit, il resterait stable simplement en injectant l'image dans le LOAD par exemple...

    Voici un code un peu épuré, qui pour le moment fonctionne (à part le BEEP), ainsi tu pourras voir si en 64 bits il tourne aussi, je pense que "oui":

    Option Explicit On
    Public Class Form1
      Dim PreviousPoint As Point
      Dim ThePen As New Pen(Color.Red)
    
      Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'PictureBox1.Image = My.Resources.terrain
      End Sub
    
      Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        If Asc(e.KeyChar) <> 13 Then Exit Sub
        Beep()
        MsgBox("beep")
      End Sub
    
      Sub PictureBox1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
        Dim NewPoint As New Point(e.X, e.X)
        Dim PreviousPoint As New Point
        Beep()
        MsgBox("beep")
      End Sub
    
      Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        PictureBox1.Image = My.Resources.terrain
        'e.Graphics.DrawImage(My.Resources.terrain, 0, 0)
      End Sub
    
    End Class

    Ce qui donne ceci :

    Petite précision : ton terrain en vert, est-il en image sur la form, ou destiné à être dans la pictureBox que tu présentes comme vide en somme ?

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire



    • Modifié EhJoe jeudi 14 juin 2012 06:47 rajout 1
    mercredi 13 juin 2012 06:54
  • Salut, en fait je cherche à faire bouger des images, joueurs et ballon, sur une photo de terrain de rugby (image *.gif). Je les fait se déplacer: remettre en profondeur quand ils attendent la balle avancer quand ils ont le ballon (pour les attaquants) et en ligne à hauteur du dernier pied du joueur du maul (pour les défenseurs) ils avancent quand le ballon et libéré. Je dessine aussi  des formes (des lignes des carrés avec e.Graphics.DrawImage(...) et e.Graphics.DrawLine(...)) ce qui d'après moi, n'est possible que dans 

    Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint

    Par contre pour donner un effet de mouvement je superpose une image de terrain sur une image de terrain dessinée puis de dessiner dessus (je ne connait pas le code pour faire comme un cls en QuickBasicExtended qui effacerait les dessins sur form1_paint)

    Comme je ne contrôle pas la vitesse d'exécution de mon programme je fais un thread.sleep(400) avant de réafficher une image de terrain et de dessiner dessus des joueurs qui on bouger par rapport à leur position antérieure, pour ralentir en fait.

    J'ai remplacer la picturebox, ehjoe, par un button Menu pour voir juste, histoire de maîtriser un évènement click de la souris mais il est vrai que la combinaison images dessinées de terrain avec des joueurs sur une picturebox avec récupération des coordonnées de la position d'éléments sur le terrains donc, reste à méditer pour plus tard.

    • Modifié Galibert vendredi 29 juin 2012 14:16
    vendredi 29 juin 2012 13:56