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 :

Bloquer ou rediriger é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 Bloquer ou rediriger événement OnPaint
    Bonjour tout le monde

    J'ai cherché sur le forum mais je n'ai pas trouvé si on pouvait empêcher, bloquer ou rediriger l'événement onpaint d'une tform ? En effet, pour mon application, je ne souhaite pas que le contenu de la fenêtre soit redessinée lors d'un déplacement de celle-ci ?

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

    Laurent CUSSAC

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 885
    Points : 11 403
    Points
    11 403
    Billets dans le blog
    6
    Par défaut
    Il suffit je pense de faire ton propre TForm.OnPaintl qui testera si la fiche se déplace et dans le cas où elle ne se déplace pas, déclenchera la méthode ancestrale.

  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
    Merci pour votre réponse.

    Cela m'a l'air d'être la bonne solution mais comment déclarer cette procédure OnPaint dans ma TForm pour qu'elle soit justement appelée lors d'un rafraîchissement de fenêtre ? quels sont les arguments qu'il faut déclarer ?
    Est-il possible le cas échéant de définir pour la méthode Paint la zone que l'on souhaite rafraichir ? ( j'ai essayé ceci MyRgn := CreateRectRgn(10,10,20,20);
    SelectClipRgn(MaForme.Canvas.Handle,MyRgn); mais cela ne fonctionne pas, toute la form se redessine )

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

    Laurent CUSSAC

  4. #4
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Il suffit je pense de faire ton propre TForm.OnPaintl qui testera si la fiche se déplace et dans le cas où elle ne se déplace pas, déclenchera la méthode ancestrale.
    Dans la mesure du possible (et c'est souvent possible), il ne faut pas affecter un événement vers soi-même. Principalement car quelqu'un peut affecter cet événement à une autre procedure, auquel cas ton traitement sera chuinté. Dans la majorité (tous ?) des composants VCL, tu aura une procedure virtuelle correspondant à l'evenenement. La plupart du temps ces procedures ne font qu'un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if Assigned(MonEvenement) then
      MonEvenement(Self);
    dans ton cas, il faut que tu surcharge le Paint :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TForm1 = class(TForm)
    protected
      procedure Paint; override;
      ...
    end;
    mais ca ne fonctionnera certainement pas car ne pas appeller le inherited empechera juste l'evenement OnPaint d'etre lancé.

    La solution je pense serait de surcharger le message, et ne pas appeller le inherited selon le cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    TForm1 = class(TForm)
    protected
      procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
    end;
     
    ...
     
    procedure WMPaint(var Message: TWMPaint);
    begin
      if not DeplacementEnCours then
        inherited;
    end;

  5. #5
    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
    Un grand merci à vous, cela fonctionne nickel à présent !!!!!

    Bonne fin de soirée

    Laurent CUSSAC

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/02/2011, 02h28
  2. [PHP 5.0] Bloquer et rediriger un appel de page ajax
    Par johnson95 dans le forum Langage
    Réponses: 9
    Dernier message: 09/09/2010, 16h28
  3. Bloquer tous les événements d'un calque div
    Par SpIrIt505050 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/11/2009, 10h46
  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