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

Langage Delphi Discussion :

Déclenchement inattendu de l'événement OnPaint


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 44
    Points
    44
    Par défaut Déclenchement inattendu de l'événement OnPaint
    Bonjour tout le monde

    J'ai un petit souci quand j'appuie sur les flèches du clavier ( et uniquement celles-ci ) qui me déclenchent l'événement OnPaint qui me redessine toute la fenêtre alors qu'a priori cela ne devrait pas le faire.

    J'ai du coup essayé d'intercepter l'événement appuie sur une touche FormKeyPress ou FormKeyDown ce que j'arrive à présent à faire mais y aurait-il une commande pour empêcher l'événement OnPaint qui se déclenche ensuite ?

    Je vous remercie par avance de votre réponse et vous souhaite une très bonne journée

    A bientôt

    Laurent CUSSAC

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 381
    Points : 2 995
    Points
    2 995
    Par défaut
    Vendredi soir ? Dernier jour de congés ? c'est peut-être pour ça que je ne comprends pas trop la question.
    Suis-je le seul ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 44
    Points
    44
    Par défaut
    Bonsoir

    Pour tenter d'être plus clair, lorsque j'appuie sur la flèche du haut ou du bas par exemple, cela déclenche l'événement OnPaint de la fiche, ce que je ne comprends pas. D'où ma question qui est peut-on éviter cela ?

    Je vous remercie par avance de votre réponse et vous souhaite un agréable week-end.

    Bonne soirée

    Laurent CUSSAC

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 381
    Points : 2 995
    Points
    2 995
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm5.FormPaint(Sender: TObject);
    begin
      caption := datetimetostr(now);
    end;
    J'ai testé ça et même en appuyant sur toutes les touches du clavier, ça ne déclenche pas l'évènement.
    Il y a forcément un bout de code qui provoque ça quelque part.

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par Papy214 Voir le message
    J'ai testé ça et même en appuyant sur toutes les touches du clavier, ça ne déclenche pas l'évènement.
    Il y a forcément un bout de code qui provoque ça quelque part.
    Ou alors la fiche/forme est plus grande que l'écran ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 44
    Points
    44
    Par défaut
    Bonjour

    Merci beaucoup pour vos réponses.

    La fiche n'est pas plus grande que l'écran : en fait j'ai remarqué qu'en appuyant sur la flèche du haut par exemple, on change le composant ( en l’occurrence des boutons BitBtn sur ma fiche ) qui reçoit la focalisation et je pense que c'est cela qui doit entraîner un appel à la fonction OnPaint de la fenêtre. En effet, mon application contient des dizaines de fenêtres et ce problème apparaît pour chacune d'entre elles ( le source de chacune d'entre elles est très différent ).

    Qu'en pensez-vous ?

    Je vous souhaite une très bonne journée

    Laurent CUSSAC

  7. #7
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 381
    Points : 2 995
    Points
    2 995
    Par défaut
    Et en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm5.FormShow(Sender: TObject);
    begin
      Self.OnKeyDown := nil;
    end;
    Le FomrShow de la fenêtre qui le nécessite bien sur.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 44
    Points
    44
    Par défaut
    Bonjour

    Merci pour votre réponse mais le problème persiste :-(

    En fait, tous les composants de la fenêtre restent affichés mais par exemple, tout ce qui a été affiché avec canvas.TextOut(..) disparait dès que j'appuie sur une des 4 flèches.

    Phénomène très étrange ....

    Très bonne journée à vous

    Laurent CUSSAC

  9. #9
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 381
    Points : 2 995
    Points
    2 995
    Par défaut
    et en ajoutant ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     ....
     private
        procedure CMDialogKey(var AMessage: TCMDialogKey); message CM_DIALOGKEY;
      end;
     
    var
      Form5: TForm5;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm5.CMDialogKey(var AMessage: TCMDialogKey);
    begin
      if AMessage.CharCode in [VK_LEFT, VK_RIGHT, VK_DOWN, VK_UP] then
        AMessage.Result := 0
      else
      begin
        AMessage.Result := 1;
        inherited;
      end;
    end;

  10. #10
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    j'ai d'abord testé sous D6 pour ne rien voir...puis sous XE6 et en effet le changement de focalisation provoque un OnPaint du parent; tout cela est lié à la gestion des thèmes. Le simple fait de passer la souris sur un TButton provoque un OnPaint de la fiche.

    cependant si le texte affiché sur le canvas disparaît, c'est qu'il n'est pas dessiné - comme il se doit - dans l'événement OnPaint, c'est à dire au moment ou la fiche DOIT se dessiner.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 44
    Points
    44
    Par défaut
    Bonsoir

    Merci pour toutes vos réponses : effectivement Paul, je n'avais pas implémenté l'événement OnPaint() car je ne pensais pas que le fait d'appuyer sur une touche flèche puisse déclencher le OnPaint() de la fiche. Du coup, j'ai tout reprogrammé les OnPaint() de toutes mes fenêtres et cela fonctionne nickel maintenant.

    Bonne soirée à vous tous.

    Bien cordialement

    Laurent CUSSAC

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

Discussions similaires

  1. Déclenchement cyclique d'un évènement VBA
    Par black-metale dans le forum VBA Access
    Réponses: 7
    Dernier message: 13/06/2013, 00h27
  2. Problème avec l'évènement « OnPaint »
    Par Eric_M dans le forum VB.NET
    Réponses: 7
    Dernier message: 03/05/2011, 10h21
  3. Réponses: 8
    Dernier message: 15/02/2011, 02h28
  4. Problème de délai dans l'événement OnPaint
    Par mtloper dans le forum Composants VCL
    Réponses: 4
    Dernier message: 19/02/2008, 18h26
  5. Capturer l'évènement onPaint d'un TLabel
    Par nicolos dans le forum C++Builder
    Réponses: 7
    Dernier message: 04/11/2004, 19h45

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