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

Composants VCL Delphi Discussion :

[WndProc] inhiber Message


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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
    Par défaut [WndProc] inhiber Message
    Salut à tous
    Dans un composant de mon cru (un PageControl), je surcharge WndProc.
    Dans celle-ci, j'intercepte la création et la destruction de page...
    Pour la création pas de problème, ça marche
    Par contre, pour la destruction, j'aimerais faire une méthode CloseQuery comme pour les fiches MDI...
    J'ai donc tout mis en place mais je bloque sur quelque chose:
    dans WndProc, pour TC_DELETEITEM (effacement de page), je lance d'abord DoPageCloseQuery qui est une de mes fonctions définie comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure TMachin.DoClosePageQuery(var CanClose:boolean);
    Vous l'aurez compris, le CanClose sert à savoir si oui ou non, la page peut être affacée...
    Or si j'ai CanClose à false, je ne sais pas comment faire pour inhiber le message d'effacement de la page...
    J'ai essayé Mesg.Result:=-1 mais ça ne fait rien...
    Si quelqu'un a une idée...
    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

  2. #2
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Dans ton titre tu parles de wndproc.

    C'est effectivement la boucle de gestion des messages.

    J'ai entendu dire que si on capte un message, on doit le relancer sinon il est perdu (un peut comme les exceptions)

    Donc si tu surcharge WndProc et que tu traite le message et ensuite un inherited devrais marcher .. ou bien declarer une procedure qui repond au message WM_XXX

  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
    Par défaut
    Oui d'accord mais comment inhiber ce message?
    Je veux pouvoir dire "Oui traite ce message et supprime la page" ou "Non ne traite pas ce message et laisse la page"...
    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 Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    qui donne l'ordre de déstruction de la page???

  5. #5
    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
    Par défaut
    Ben l'utilisateur lorsqu'il dit:
    PageControlEx.Pages[i].Destroy;
    Mais comme je voudrais faire un composant réutilisable, je voudrais que la détection soit automatique...
    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

  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
    Par défaut
    Citation Envoyé par Clorish
    ou bien declarer une procedure qui repond au message WM_XXX
    Ca j'y avait pas pensé... Quel talent ce Clorish
    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 Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    ou surcharge la procedure Destroy la tu peut faire ton teste ou meme envoyé un message personalisé comme CloseQuery qui selon sa réponse tu réagie

  8. #8
    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
    Par défaut
    Non je ne peux pas faire comme ça parce que c'est le Destroy du PageControl et non du TabSheet... Et je suis obligé de garder les TTabSheet tels quels sinon je ne pourrais plus les utiliser dans mon PageControl...
    J'arrive à intercepter la suppression d'une Page (TCM_DELETEITEM) mais pas à lui dire "Non, ne la supprime pas même si tu as reçu ce message"...
    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

  9. #9
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    Citation Envoyé par Pedro204
    Ben l'utilisateur lorsqu'il dit:
    PageControlEx.Pages[i].Destroy;
    il y as surment une destoy quelque part pour l'aplé comme sa ,,Non??
    ou j'ai raté quelque chose

  10. #10
    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
    Par défaut
    Oui il y en a un mais il n'est pas surchargeable... Sinon c'est trop facile
    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

  11. #11
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    dans l'aide de delphi
    Détruit une instance de TTabSheet.

    destructor Destroy; override;

    Description

    N'appelez pas Destroy directement à l'exécution. Appelez plutôt Free. Free vérifie que la feuille à onglet n'a pas la valeur nil avant d'appeler Destroy. Destroy retire la feuille à onglet du contrôle pages puis appelle la méthode héritée Destroy.
    alors cache destroy et free a l'utilisateur ,
    crée une autre procedure comme delete qui dans celle si tu apel free
    comme sa tu peut faire tes testes et meme envoyé un message comme qoi il va se détruire(oui ou non)

  12. #12
    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
    Par défaut
    Oui je sais bien tout ça mais le problème c'est que je ne peux pas faire ça.
    Je m'explique:
    Si je fais comme ça, je dois créer un nouvel objet dérivé de TTabSheet. Or TPageControl n'accepte que des TTabSheet... Donc je ne peux pas le faire... A moins qu'il y ait une méthode que je ne connaisse pas (ce qui ne m'étonnerais guère )...
    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

  13. #13
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    la source donnée par borland n'est pas pour regardé seulement

  14. #14
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Par défaut
    la source donnée par borland n'est pas pour regardé seulement
    Ca se discute. Modifier la VCL pour en faire sa version est plus source de problèmes qu'apporteur de solutions (portabilité, compatibilités avec les versions suivantes...). Modifier la VCL, pour moi, c'est franchement une option crade.

  15. #15
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    pas le source mais une copie
    en créant TPagePedro204

  16. #16
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    tu as déjà:
    http://www.developpez.net/forums/viewtopic.php?t=338428
    alors pourqoi tu as changer de sujet??? ou qoi

  17. #17
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Non je ne peux pas faire comme ça parce que c'est le Destroy du PageControl et non du TabSheet... Et je suis obligé de garder les TTabSheet tels quels sinon je ne pourrais plus les utiliser dans mon PageControl...
    Pourquoi ca ?
    C'est le principe de l'heritage des classes ....
    Tu peut creer un descendant de TTabSheet que tu nome TTabsheetEX avec ton destructeur surchargé.

    Tu les crees et tu peut les enregistrer dans un PAge control .... puisqu'il heritent de TTabSheet.
    Seulement a partir de ton pagecontrol tu ne peut les manipuler que sous la forme de TTabSheet mais pas genant puisque tu ne rajoute pas de methdoes explicitement appeles mais que des surcherges Et meme si cela te gene, tu pourra toujours caster tes TtabSheet en TTabSheetEX apres un test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If TabSheet.InheritsFrom(TTabsheetEX) Then TTabSheetEX(TabSheet).MaProcTabSheetEX;

  18. #18
    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
    Par défaut
    Salut et merci pour les réponses
    Citation Envoyé par edam
    la source donnée par borland n'est pas pour regardé seulement
    Je suis entièrement d'accord avec Reisubar... Je m'interdit de modifier quoi que ce soit la-dedans...
    Citation Envoyé par edam
    tu as déjà:
    http://www.developpez.net/forums/viewtopic.php?t=338428
    alors pourqoi tu as changer de sujet??? ou qoi
    Parce que c'est pas tout à fait le même sujet... Ca porte sur un TPedroPageControl (et pas TPagePedro204 ) mais pas sur le même problème... Comme les problèmes étaient différents, j'ai préféré faire un autre post...
    Citation Envoyé par Clorish
    Et meme si cela te gene, tu pourra toujours caster tes TtabSheet en TTabSheetEX apres un test
    Oui je sais mais je voudrais que l'utilisateur du composant n'aie pas à s'occuper de quoi que ce soit... Si je fais comme tu dis, à chaque fois que l'utilisateur du composant récupère un TTabSheet, il devra caster et ça, je ne veux pas...
    Oui mais
    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

  19. #19
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    Citation Envoyé par edam
    pas le source mais une copie
    en créant TPagePedro204

  20. #20
    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
    Par défaut
    Je sais j'y ai pensé aussi mais il faudrait alors que je parte de TCustomTabControl...
    Ca commence à faire beaucoup! Il faudrait que je "convertisse" TCustomTabControl, TPageControl et TTabSheet... Surtout dans un code que je ne comprends pas trop la plupart du temps...
    J'ai donc écarté assez vite cette solution...
    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

Discussions similaires

  1. Inhiber un message d'alerte
    Par Rodolphe_1940 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/05/2008, 16h02
  2. Réponses: 1
    Dernier message: 16/01/2008, 12h07
  3. Message pour touche Shift inhibée
    Par Jacques-Henri dans le forum Sécurité
    Réponses: 5
    Dernier message: 11/10/2007, 21h19
  4. Inhiber les messages WM_COMMAND
    Par biz2000 dans le forum Windows
    Réponses: 2
    Dernier message: 20/09/2006, 18h33
  5. Gestion du message WM_SYSCOLORCHANGE avec WndProc
    Par yousserr dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 29/07/2005, 08h59

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