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 :

SendMessage vs MDI


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 22
    Points : 23
    Points
    23
    Par défaut SendMessage vs MDI
    Bonjour à tous et à toute,

    J'ai deux éxecutables. Le premier envoie un message, le second le réceptionne.
    Celui qui fait la réception est une application MDI.

    Ca marche à moitié,

    le problème est que dès que j'ai une fenetre fille (dans celui qui réceptionne) et que cette dernière est maximisé, ça ne fonctionne plus.


    -----------------------------------------
    celui qui envoie un message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var
     h: THandle;
     atom_Envoye: Atom;
    begin
     Code:='exemple';
     atom_Envoye := GlobalAddAtom(PChar(Code));
     h := FindWindow(nil, PChar('CeluiQuiReceptionne'));
     if h = 0 then
      ShowMessage('CeluiQuiReceptionne est inactif')
     else
      SendMessage(h, WM_GO_DEMO, atom_Envoye, 0);
    end;
    -----------------------------------------
    celui qui réceptionne

    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
    procedure TMainForm.DefaultHandler(var msg);
    var
     TexteRecu: PChar;
     atom_recu: atom;
    begin
     if TMessage(msg).Msg = WM_GO_DEMO then begin
        // le numéro identifiant l'atom se trouve dans WParam
        atom_recu := TMessage(msg).WParam;
        GetMem(TexteRecu, 256);
        GlobalGetAtomName(atom_recu, TexteRecu, 256);
        //ici on traite TexteRecu...
        GlobalDeleteAtom(atom_recu);
        FreeMem(TexteRecu);
        TMessage(Msg).Result:=200;
       end
       else inherited DefaultHandler(Msg); 
    end;

    ----------------------------------
    J'ai aussi essayé avec le mais sans résultat.

    Si quelqu'un a une idée.

    Merci à tous et à toute

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    J'ai une application MDI avec les fenetres filles maximisées et aucun problème.

    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
     
    public
        procedure DefaultHandler(var Message); override;
    ....
    ....
    procedure TMainForm.DefaultHandler(var Message);
    Begin
    ///
       inherited DefaultHandler(Message);
     
       If TMessage(Message).Msg = Msg_Close then begin
       Application.Terminate;
       end;
     
    end;

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 22
    Points : 23
    Points
    23
    Par défaut
    J'ai fais rapido une application MDI avec le "New Project" de Delphi et j'ai le même problême???

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Je viens de faire un essai et ca marche très bien meme lorsque le fiche fille est maximisée. Maintenant, il faut bien faire attention que lorsque la fenetre fille est maximisée, son Caption s'ajoute au Caption de la fenetre Parente (Je suppose que tu l'as bien vu ).

    Par contre un truc assez étrange est que si j'envoie un message à une fenetre dont son Caption se tremine par un numéro , ca ne va pas ?




    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
    24
    25
    26
    27
     
    //Envoi
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      SendMessage(FindWindow(nil,'Form1'),Msg_Close,0,0);
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Msg_Close := RegisterWindowMessage('Msg_Close');
    end;
     
    //recept
    procedure TForm1.DefaultHandler(var Message);
    Begin 
    /// 
       inherited DefaultHandler(Message); 
     
       If TMessage(Message).Msg = Msg_Close then begin
       ShowMessage('coucou'); 
       end;
     
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Msg_Close := RegisterWindowMessage('Msg_Close');
    end;
    Donc si le Caption de la fenetre parente de l'application réceptrice se termine par un chiffre (Ex Form1), ca ne va pas ! Si maintenant je mets une lettre après ce chiffre ou que je l'enlève (Ex Form1x ou Form) là, ca marche ! Etrange ca !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 22
    Points : 23
    Points
    23
    Par défaut
    . Maintenant, il faut bien faire attention que lorsque la fenetre fille est maximisée, son Caption s'ajoute au Caption de la fenetre Parente (Je suppose que tu l'as bien vu ).
    "ben non" j'avais pas vu ça!!

    Si je comprend bien c'est pour cela que ca ne marche pas.

    Le problême est que je ne peux pas savoir quel sera le caption de la fenêtre fille. Y a t-il moyen de contourner le problême du FindWindow?

    merci portu

  6. #6
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Une solution pas trés élégante consisterait à obtenir via un repeat ou un while sur la fonction "FindwindowEx" avec comme indication de caption la valeur NULL.
    Cela permet de parcourir la liste des fenêtre du desktop.
    En utilisant la fonction "GetWindowText", on obtient le caption de chaque fenétre et on a trouvé dès qu'il est identique au caption désiré (si non maximized) ou dès qu'il le contient (si maximized).

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 22
    Points : 23
    Points
    23
    Par défaut [Resolu] SendMessage vs MDI
    Ouais Graffito!
    J'ai utilisé la fonction EnumWindows pour avoir la liste des fenetres; je peux ainsi trouver la bonne!

    Merci

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

Discussions similaires

  1. [VB6] [MDI] Signaler la fermeture d'une fille à la mère
    Par cpri1shoot dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 13/04/2004, 08h57
  2. [MDI] comment fermer la bonne fenêtre enfant ?
    Par KThrax dans le forum Langage
    Réponses: 5
    Dernier message: 01/09/2002, 09h42
  3. MDI sans MFC, possible ?
    Par delire8 dans le forum MFC
    Réponses: 4
    Dernier message: 17/06/2002, 07h38
  4. pb fenêtre MDI
    Par dédé dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/06/2002, 18h41
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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