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 :

Comment échanger des données entre 2 applications Delphi7 ?


Sujet :

Langage Delphi

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Août 2003
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 207
    Points : 91
    Points
    91
    Par défaut Comment échanger des données entre 2 applications Delphi7 ?
    Bonjour à tous,


    J' ai 2 appli A et B et je jouhaite que A reçoive un message windows en provenance de B

    j'ai donc lu le tutorial sur l'échange de données entre 2 applications et ça ne marche pas.

    Voici le code des 2 appli

    Application A - Celle qui reçoit le message Windows
    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
    28
    29
    30
    31
    32
     
     
    ...
      public
      procedure DefaultHandler(var WinMSG); override;
      end;
     
    var
      Form1: TForm1;
      WM_MESSAGE_FMS, WM_MESSAGE_FRE: integer;
     
     
    implementation
    {$R *.dfm}
     
    procedure TForm1.DefaultHandler(var WinMSG);
    begin
    inherited DefaultHandler(WinMSG);
     
    if (TMessage(WinMSG).Msg = WM_MESSAGE_FRE)
    then Begin
         Label_MSG.Caption :=  IntToStr(TMessage(WinMSG).WParam);
         Label_MSG.Update;
         end;
    end;
     
    // Création fiche
    procedure TMAIN.FormCreate(Sender: TObject);
    begin
    WM_MESSAGE_FMS := RegisterWindowMessage('WM_MESSAGE_FMS');
    WM_MESSAGE_FRE := RegisterWindowMessage('WM_MESSAGE_FRE');
    end;

    Application B - Celle qui envoie le message Windows

    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
    28
    29
    30
    31
    32
    33
     
    ...
     
      public
      WM_MESSAGE_FMS, WM_MESSAGE_FRE: integer;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
     
    procedure TForm1.pb_MSGClick(Sender: TObject);
    var
       h: THandle;
    begin
    h := FindWindow(nil, PChar('Application A'));
    if h = 0
       then ShowMessage('Le receveur (application A) est inactif')
    else Begin
         SendMessage(h, WM_MESSAGE_FRE, 121, 0);
         end;
    end;
     
    // Création fiche
    procedure TMAIN.FormCreate(Sender: TObject);
    begin
    WM_MESSAGE_FMS := RegisterWindowMessage('WM_MESSAGE_FMS');
    WM_MESSAGE_FRE := RegisterWindowMessage('WM_MESSAGE_FRE');
    end;

    Qu'est ce que je n'ai pas compris ?


    Merci d'avance pour vos réponses.

    Wilco

  2. #2
    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
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    Faut pas initialiser tes messages avec une valeur? Du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WM_MESSAGE_FMS:=WM_USER+1;
    à vérifier...
    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

  3. #3
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    Je suppose que tu parles de cet article:
    http://alphomega.developpez.com/EchangeVal/
    J'ai souvent utilisé cette méthode. Je vais essayer de t'expliquer rapidement comment je l'utilise.
    Voici un exemple de code que j'utilise souvent et qui me semble le plus "facile" à mettre en oeuvre :

    ENVOI DU MESSAGE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Var
      WM_TEST_ENVOI: Integer;
     
    {----------------------------------------------------------------}
    Procedure TForm1.Button1Click(Sender: TObject);
    Begin
      WM_TEST_ENVOI := RegisterWindowMessage('WM_TEST_ENVOI');
      PostMessage(HWND_BROADCAST, WM_TEST_ENVOI, 100, 200);
    End;
    Le message doit avoir une valeur constante. On utilise en général la fonction RegisterWindowMessage. L'application qui émet le message doit soit envoyer le message à toutes les applications (avec HWND_BROADCAST), soit spécifier l'handle de l'application de destination. Autrement dit, il est préférable de connaître l'handle des applications qui communiquent.
    -> Application.Handle
    Utilise PostMessage (ou SendMessage) pour l'envoi du message -> F1 pour plus de détails sur les fonctions.

    RECEPTION DU MESSAGE
    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
    Var
      WM_TEST_ENVOI: Integer;
     
    {----------------------------------------------------------------}
    Procedure TForm1.FormCreate(Sender: TObject);
    Begin
      WM_TEST_ENVOI := RegisterWindowMessage('WM_TEST_ENVOI');
      Application.OnMessage := ProcMess;
    End;
     
     
    {----------------------------------------------------------------}
    Procedure TForm1.ProcMess(Var msg: TMsg; Var Handled: boolean);
    Begin
      If (msg.message = WM_TEST_ENVOI) Then
        ShowMessage(
          'Message test reçu!' + #13#10 + 
          'wparam : ' + IntToStr(msg.wparam) + #13#10 +
          'lparam : ' + IntToStr(msg.lparam) );
    End;
    Tu peux soit créer un évènement (comme dans ton code actuel), soit utiliser une procédure de récepetion des messages définie avec Application.OnMessage comme dans l'exemple ci-dessus. Cette procédure receptionne tous les messages destinés à l'application. On peut y récupérer par exemple les messages de la souris et du clavier entre autres, sans oublier les paramètres wparam et lparam passés avec le message...

    Sinon, un autre moyen pour réceptionner les messages est d'utiliser une boucle avec GetMessage ou PeekMessage.

    J'espère t'avoir éclairé, à+
    De retour parmis vous après 10 ans!!

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Août 2003
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 207
    Points : 91
    Points
    91
    Par défaut Merci Sub0
    Quel bohneur ce forum

    Un grand merci à toi Sub0.


    J'ai mis en application ta méthode et ça marche



    Wilco

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

Discussions similaires

  1. Comment synchroniser des données entre plusieurs applications
    Par DotNET74 dans le forum Windows Phone
    Réponses: 8
    Dernier message: 13/05/2013, 07h23
  2. Comment échanger des données entre Filemaker et MySQL ?
    Par Mister Paul dans le forum Autres
    Réponses: 3
    Dernier message: 14/06/2007, 11h54
  3. [ADO.Net][VB.NET] Comment copier des données entre deux BDD différentes ?
    Par maddog2032 dans le forum Accès aux données
    Réponses: 6
    Dernier message: 06/06/2005, 11h01
  4. Comment récuperer des données entrées au clavier?
    Par Elisée A. dans le forum MFC
    Réponses: 2
    Dernier message: 13/02/2004, 07h22

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