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

Programmation système Discussion :

Gestion des messages système (besoin de précision sur la)


Sujet :

Programmation système

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 732
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 732
    Points : 15 137
    Points
    15 137
    Par défaut Gestion des messages système (besoin de précision sur la)
    Bonjour,

    Ma question est assez générique mais comme je code en Pascal les exemples seront dans ce langage, je pense qu'il est assez compréhensible, j'espère que vous ne m'en voudrez pas.

    Ayant fait des recherches récemment, je suis tombé sur des bouts de code qui, pour moi, ont un fonctionnement opposé, je dirais, alors si une âme charitable pouvait éclaircir cette histoire, ça m'arrangerait.

    Concernant la gestion des messages, j'ai trouvé
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.WndProc(var Msg: TMessage);
    begin
      inherited;
      //
      // gestion de mes messages
      if Msg = WM_...
    end;
    mais j'ai aussi trouvé
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.WndProc(var Msg: TMessage);
    begin
      // gestion de mes messages
      if Msg = WM_...
      //
      inherited; // important to forward messages to default handlers
    end;
    Quelle est l'approche juste concernant la position en début ou fin de proc de cet inherited ?

    Question subsidiaire : ces exemples sont basés sur l'utilisation de WndProc, mais on en trouve aussi beaucoup basés sur procedure TForm1.DefaultHandler(var Msg);
    Ce cours présente un joli croquis qui, pour moi, explique mal ou pas assez, toujours est-il que je ne sais pas exactement ce que je dois utiliser.

    Dernière question : j'ai besoin de mettre en place une gestion perso de messages basés sur WM_USER+x
    Faut-il que j'aille interférer avec la gestion système et tri dedans comme avec les deux exemples précédents, ou puis-je mettre en place un truc perso genre
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.RecupMessagesPerso(var Msg);
    begin
      // gestion de mes messages
      if Msg = WM_...
      //
      // inherited; // plus besoin de ça ?
    end;
    Merci de vos lumières,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Franchement je n'ai pas l'habitude du subclassing de fenêtres, où la nécessité se présente d'appeler la fonction parente avant ou après avoir traité les messages. Dans les fenêtres habituelles, on n'appelle la fonction par défaut que pour les messages qu'on ne traite pas soi-même, ce qui donnerait un truc de ce genre:
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.WndProc(var Msg: TMessage);
    begin
      // gestion de mes messages
      if Msg = WM_...
      else if Msg = WM_...
      else if Msg = WM_...
      //
      else 
        inherited;
    end;

    D'une manière plus générale, on peut dire que ça dépend des messages. Pour certains (par exemple, ceux d'initialisation) on peut avoir intérêt à appeler le parent d'abord (comme c'est le cas dans les constructeurs), alors que pour des messages de fin de vie ce sera l'inverse. On peut même imaginer certaines overrides nécessitant un traitement avant et après...

    Résultat, on aurait plutôt quelque chose de ce type (je préviens, je ne connais pas le pascal):
    Code pseudo-pascal : 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
    procedure TForm1.WndProc(var Msg: TMessage);
    begin
      booleanOrWhatever bIntercept = false;
    
      // gestion de mes messages (préfixe)
      if Msg = WM_...
      else if Msg = WM_...
      else if Msg = WM_...
      //
      if not bIntercept
       inherited;
    
      // gestion de mes messages (postfixe)
      if Msg = WM_...
      else if Msg = WM_...
      else if Msg = WM_...
    end;
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 732
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 732
    Points : 15 137
    Points
    15 137
    Par défaut
    Bonjour,

    et merci de ton retour.

    Pour ne rien te cacher, ne voyant rien venir ici j'ai crossposté dans le forum Delphi où je sais qu'il y a des pointures "système" et où j'ai eu plus de retours.

    Maintenant, pour quelqu'un qui ne connait pas le Pascal, je trouve que tu t'en débrouilles bien, , juste un truc (d'après un posteur Delphi) : il serait mieux d'utiliser une construction à base de case of plutôt que de if ... then ... else if ..., je crois que l'équivalent en C c'est switch();
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par Jipété Voir le message
    juste un truc (d'après un posteur Delphi) : il serait mieux d'utiliser une construction à base de case of plutôt que de if ... then ... else if ..., je crois que l'équivalent en C c'est switch();
    En effet, et en C j'aurais effectivement utilisé un switch(), mais je ne connaissais pas la syntaxe équivalente en Pascal.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/10/2006, 23h36
  2. [GUI] Gestion des messages d'erreurs
    Par agent007se dans le forum C++
    Réponses: 11
    Dernier message: 28/07/2006, 20h52
  3. gestion des messages d'erreurs
    Par keibenoit dans le forum Access
    Réponses: 2
    Dernier message: 31/05/2006, 14h49
  4. [debutant]gestion des messages des exceptions
    Par maxvador dans le forum Langage
    Réponses: 4
    Dernier message: 03/02/2006, 14h55
  5. Gestion des message windows dans les threads
    Par billyboy dans le forum Windows
    Réponses: 5
    Dernier message: 06/10/2003, 17h25

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