Bonjour,
J'ai surchargé la fonction WndProc et je reçois des codes que je ne trouve pas dans Winapi.Messages
Exemple Msg contient 45108 ($B034)
Où peut-on trouver la signification de de ces messages ?
merci
Bonjour,
J'ai surchargé la fonction WndProc et je reçois des codes que je ne trouve pas dans Winapi.Messages
Exemple Msg contient 45108 ($B034)
Où peut-on trouver la signification de de ces messages ?
merci
0x8000 à 0xBFFF c'est les messages internes à l'application
cherche donc WM_APP + $3034
Cela me semblerait bizarre mais ça peut être aussi WM_USER + $7034 puisque de 0x0400 à 0x7FFF c'est aussi des messages internes
Je pense que c'est CM_SHOWHINTCHANGED (+34) puisque Vcl.Controls.CM_BASE = $B000
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
les message $B0xx c'est CM_BASE + $xx, ici CM_INVALIDATE = CM_BASE + 52;
c'est un message interne à Delphi pour propager Invalide
Oups, je me suis fait avoir par le non-hexa du CM_BASE + ... du coup c'est plutôt CM_INVALIDATE comme indiqué par Paul
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
ha super, merci.
Je m'étais limité à l'unité Winapi.messages... alors qu'il y a aussi des messages VCL dans vcl.controls.
Existerait-il un moyen d'afficher le nom du message ? une fonction qui permettrait de faire ça ? afin d'éviter de calculer l'offset (ex: CM_BASE) et de chercher dans les fichiers
Cela doit se trouver des fonctions MsgToString mais elles seront forcément incomplètes puisqu'il faut faire manuellement un recensement des messages
Voir le TColor et Vcl.Graphics.ColorToIdent, les couleurs nommées sont toutes recensées dans un tableau
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
je viens de publier une unité que je mets à jours de temps à autre
https://github.com/tothpaul/MessageNames
Merci Paul !
J'ai rajouté cette unité à mon projet.
Je vais pouvoir trouver quel est le message qui freeze l'appli quelques secondes.
Et en complément, il est possible de récupérer le nom des messages définis par RegisterWindowMessage (messages entre $C000 et $FFFF) en scrutant la table atomique.
Ces messages partagent la même table que les formats du presse-papier, on utilise une fonction relative à ce dernier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function GetRegisteredWindowMessageName(aMsg :integer) :string; begin SetLength(Result, 100); SetLength(Result, GetClipboardFormatName(aMsg, PChar(Result), Length(Result))); end;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager