IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++/CLI Discussion :

Sur quel évènement doit on rafraîchir une image?


Sujet :

C++/CLI

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut Sur quel évènement doit on rafraîchir une image?
    Bonjour,

    Je pose ma question ici parce que je programme en C++/CLI ..

    Ce n'est peut-être pas le bon endroit, j'ai cherché un peu partout et je ne trouve pas de réponse ..

    Voilà le problème:

    J'ai un dessin fait par des Drawline dans une pictureBox ...

    J'ai écrit le logiciel de tel sorte que le dessin peut être très vite et facilement redessiné.

    Bon mais je ne trouve pas un évènement simple pour décider quand le redessiner.

    Je traque la souris et si elle sort puis rentre de nouveau dans la pictureBox, ça redessine ... donc sur ce point c'est bon ...

    Par contre si je clique sur un item du menu dans la partie supérieure, je me retrouve avec un beau pavé blanc

    Je ne vais quand même retracer sur un MouseMove ... sinon on retrace en permanence ..

    Donc y a t-il un évènement bien particulier lié à pictureBox qui permettrait de la redessiner juste quand il le faut?

    De plus au moment du FormLoad, mon dessin apparaît une fraction de seconde et disparaît ..
    Je ne trouve pas pourquoi ..
    Auriez vous une idée?

    Merci d'avance

    Bonne soirée
    Jean-Louis

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Bonsoir,

    Bon, j'ai trouvé l'évènement "Paint" qui a l'air de faire ce que je veux ...

    Mais car il y a un mais !!

    Je ne comprends pas pourquoi je dois retarder légèrement l'action en utilisant un timer.

    Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private: System::Void pictureBox1_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) 
    		 {
    			 Rafraichir();
    		 }
    ça merde ...

    J'ai dû faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private: System::Void pictureBox1_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) 
    		 {
    			 timer1->Enabled = true;
    		 }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			 Rafraichir();
    			 timer1->Enabled = false;
    		 }
    Le timer est réglé au minimum à savoir 1 milliseconde ...
    Est ce normal?

    Bonne soirée

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Bon, je suis un peu en retard.

    C'est le bon évènement.

    Il n'y pas besoin de Timer.

    Qu'est qui "merde" ?

    Il y a quoi dans le code de la méthode "Rafraichir" ?

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut evenement pour redessiner le picturebox
    bonjour,
    1/sache une chose d'abord que le picturebox est tres mal adapte au dessin et qu'il est fait beaucoup plus pour les images.
    voila son tort pour le drawing a cause s'il vous plait de sa propriete image.
    parce que avec lui on doit dessiner dans un bitmap et mettre à jour a chaque fois sa propriete image pour le redessiner quand le contenu du bitmap change(sa propriete image doit recevoir =bitmap) .
    2/deuxieme tort il ne dispose de scrollbars

    maintenant pour l'evenement redessiner du picturebox il s'impose de rafraichir la propriete image à chaque fois qu'on modifie le bitmap .Cela arrive de modifier le bitmap dans lequel nous dessinons lorsque:
    1-nous sommes "en train de dessiner" (mousemove) une nouvelle figure.
    2-nous avons "termine de dessiner" (mouseup) une nouvelle figure.
    3-nous sommes en train de "resizer" le controle window qui contient le picturebox.

    maintenant essaie de transpose ton code de dessin dans un simple usercontrole,le coup du bitmap à gerer disparait et avec lui disparait la maj
    picturebox.image=bitmap disparait.
    1/c'est un de gagner
    2/tout ce que tu dessine se fait directement sur le background du controle et il est persistant.ton "blanc" disparaitra.
    2/tu gagne les scrollbar qui n'existe pas dans picturebox et avec la possibilite de zoomer

    maintenant mieux encore plus avant pour une application de dessin pro ,tu dois suivre un modele "eprouve de drawing" (pattern).
    1/separe la dession des figures du controle utilise.
    -utilise une classe figure ancetre qui possede une propriete Paint(g as eventpaintargs)
    -definit une bonne fois pour toutes les proprietes des figures communes.
    -des classes herites de la figure ancetre pour l'implementation des proprietes et methodes qui sont toujours specifiques (type de shape).

    2/dans le controle
    -definit une liste des figures dessinees pour les memoriser et les redessiner ou supprimer une figure quand le besoin de mettre à jour le controle s'impose.

    -geres mousedow, mais surtout mousemove et mouseup ou tu demande à chaque figure:
    - d'execute sa methode Paint pour lui demander de se dessiner dans le controle (monrect.paint(g as eventpaintargs),-monellipse.paint(g as eventpaintargs))
    -ajoute la nouvelle figure à la liste des figures.
    -rafraichis le controle Me.Invalidate pour le mettre à jour.

    voila un minimum de regles auquel il faut s'astreindre en matiere de dessin.
    bon code....

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/05/2009, 19h28
  2. Réponses: 1
    Dernier message: 01/05/2007, 17h43
  3. Rafraîchir une image
    Par HwRZxLc4 dans le forum Langage
    Réponses: 4
    Dernier message: 06/04/2007, 15h45
  4. quel est le type pour une image?
    Par kitiara999 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 06/12/2006, 18h07
  5. Rafraîchir une Image (reload) affichée dans un panel
    Par svirlot dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 09/05/2006, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo