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

Delphi Discussion :

Problème de dessin sur une form


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 23
    Points
    23
    Par défaut Problème de dessin sur une form
    Bonjour à tous,

    Voila mon problème : je n'arrive pas à dessiner sur une form juste après sa création, exemple simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     tmaform.boutonClick(...)
     begin
     ...
         maform.canvas.draw(...);      -->  Fonctionne 
     end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     tmaform.create(...)
     begin
     ...
        maform.canvas.draw(...);      -->  Ne fonctionne pas.
     end;
    La form n'est pas complètement initialisée dans le 2ème cas ( du moins c'est ce que je suppose ), ce qui expliquerais le problème.

    Cela dit, je n'ai trouvé aucun moyen SIMPLE de contourner le problème, cad en utilisant ni timer, ni autre bricolage.

    Merci de vous pencher sur le problème.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 190
    Points : 179
    Points
    179
    Par défaut
    Bonjour,
    Tu peux passer par l'intermédiaire de l'événement OnShow.
    Par contre si tu comptes utiliser par la suite la propriété Visible de ta form, il faut prévoir un tag pour te spécifier si ton dessin a déjà été dessiner.
    Cordialement,
    Benjamin

  3. #3
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    En général, si tu veux dessiner dans une Form, il faut le faire dans son évènement OnPaint. Sinon, dès que tu fais passer une autre fenêtre dessus, tu perds tout ce que tu as dessiné
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 190
    Points : 179
    Points
    179
    Par défaut
    Effectivement, tu as tout à fait raison Pedro.
    Désolé.

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    Oui j'ai aussi testé le .OnShow de la form, qui bizaremment ne me donne rien.

    Mais comme le dit Pedro, il faut utiliser le onPaint, et il y a effectivement une difference fondamentale !
    Merci Pedro !

    En plus, pour mon application, il fallait absolument que cela soit persistant ( boutons persos ) et je n'y avait même pas reflechit !

    Bon, je me lance dans le onPaint. Merci les gars, Mission accomplie.

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Alchemist
    Oui j'ai aussi testé le .OnShow de la form, qui bizaremment ne me donne rien.
    Non ce n'st pas bizarre du tout: lorsqu'elle s'affiche, la fiche se ... redessine. Donc comme je te l'ai dit, tu perds tout ce que tu as dessiné...
    Citation Envoyé par Alchemist
    Mais comme le dit Pedro, il faut utiliser le onPaint, et il y a effectivement une difference fondamentale !
    Merci Pedro !
    Mais avec plaisir
    Citation Envoyé par Alchemist
    Bon, je me lance dans le onPaint.
    Attention à ne pas tomber dans le même piège que moi lorsque j'ai découvert OnPaint: ne pas utiliser de Refresh/Invalidate/Repaint/etc. dedans: ces méthodes appellent Paint qui déclenche OnPaint => Boucle inifinie
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 160
    Points : 167
    Points
    167
    Par défaut Rappel à l'ordre!
    histoire de conclure avec un vieux (mais neanmoins interessant) article pour les débutants voici un lien qui explique "grosso merdo" ... "Ordre d'exécution des différentes procédures dans Delphi"

    http://perso.orange.fr/bardou/michel...eexecution.htm

    Ce qui est un bon complement a ce fil, je trouve...

  8. #8
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    Merci DarkVadr pour cette page intéressante car tout ceci est peu ou mal expliqué dans l'aide de Delphi.

    Au fait, l'utilisation du OnPaint a très bien fonctionné, si bien que j'ai (pratiquement) terminé mon projet sur le point graphique:

    - Gestion de boutons sans objets (directement dessinés sur la form) avec deux images, une pour l'etat 'normal' et une pour l'etat 'appuyé'.

    Pas trop pratique à gérer (notemment la nécessité de modifier plusieurs procédures lors de l'ajout d'un bouton), ils sont néanmoins assez souple d'utilisation, et personnalisable à souhait.

    - Gestion d'une fiche annexe de configuration et de son déplacement.

    J'ai encore un petit problème avec les coins arrondis de mes boutons car issus de Jpg, je n'arrive pas à les rendre transparents.
    Mais l'interface étant fonctionnelle et pas désagréable, je me pencherais sur le problème plus tard.

    Merci à tous pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. dessin sur une form: problème et mouvement
    Par Lnmex dans le forum Windows Forms
    Réponses: 24
    Dernier message: 02/10/2009, 20h25
  2. problème dessin sur une image
    Par mirinda dans le forum Débuter
    Réponses: 2
    Dernier message: 30/01/2009, 20h00
  3. [débutant] problème d'image sur une form
    Par Anthony17 dans le forum Delphi
    Réponses: 3
    Dernier message: 21/11/2006, 14h49
  4. Dessiner un rectangle sur une forme
    Par Neo41 dans le forum MFC
    Réponses: 6
    Dernier message: 13/08/2005, 01h08
  5. [Servlet] [Image] Dessiner sur une image
    Par gaia_dev dans le forum 2D
    Réponses: 5
    Dernier message: 01/09/2004, 17h11

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