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

Delphi Discussion :

WndProc, Registerwindowmessage & composant


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Ludo_360
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Par défaut WndProc, Registerwindowmessage & composant
    bonjour,

    J'ai un soucis avec les messages windows...

    Je souhaite éviter l'utilisation de timer qui me permettaient à une application1 de vérifier qu'une application2 était ouverte ou fermée. Je veux donc envoyer un message à la fermeture de mon application2 qui permmettra de lancer une procedure dans l'application1.
    Seulement voilà, mon application1 est une application qui utilise déjà WndProc, et qui contient des composants que j'ai modifiés: ce sont eux qui doivent recevoir ce message windows, mais à l'execution il y a une erreur de handle.

    Ma question est: Peut-on utiliser les messages windows avec un composant?

    Voici le code correspondant:
    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
     
    [...]
    uses
      [...], U_Mes_MonAppli;     // ici sont référencés les messages autres que ceux déjà prévus par windows
    [...]
    type
       TMonComposant= class(composant dérivé du memo)
    [...]
    protected
    [...]
    procedure WndProc(var Msg: TMessage); override;
    [...]
    implementation
    [...]
    constructor TMonComposant.Create(AOwner: TComponent);
    begin
       inherited;
       WM_DisplayKeyboard:= RegisterWindowMessage('dispkeyboard');
    end;
    [...]
    procedure TMonComposant.WndProc(var Msg: TMessage);
    Begin
       If (Msg.Msg = WM_DisplayKeyboard) then doenter;
    End;
    merci

    ludo

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 041
    Par défaut
    Qui va recevoir le Message ?
    le SendMessage il est fait quel Handle ? la Form, le Memo, l'Application ???
    comment obtiens-tu ce Handle (avec un FindWindow ?)

    Qui lance l'application ?
    si c'est APP1 qui lance APP2, avec un Thread qui fait un OpenProcess et un WaitForSingleObject, tu peux avoir l'information sur l'execution ...
    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

  3. #3
    Membre éclairé Avatar de Ludo_360
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Par défaut
    Jamais encore utilié les threads.. mais va falloir y penser puisque ça règle la pluparts des problèmes de ce genre apparemment.

    En gros:
    APP1 créé les composants de sa fiche
    Si clique sur le composant en question APP2 est lancée.
    Si APP2 fermée alors le composant de APP1 doit recevoir une info

    ludo

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 041
    Par défaut
    Ouais exactement le bon cas !

    Bon, pour le Thread, tu fais créé un thread via les menus, tu fais une class fonction CallAPP2 qui est construit le thread en suspend, renseigne le nom de l'exe, tu fais un Event, met FreeOnTerminate à True (voir ici pour l'event) et fait un resume
    ton execute ressemble à ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function TAPP2Starter.Execute(): Boolean;
    var
       StartupInfo: TStartupInfo;
       ProcessInfo: TProcessInformation;
    begin
       GetStartupInfo(StartupInfo);
       Result := CreateProcess(PChar(FAPP2Name), nil, nil, nil, True, 0, nil, PChar(ExtractFileDir(FAPP2Name)), StartupInfo, ProcessInfo);
       if Result then
       begin
          WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
       end;
       Synchronize(DoEnd);
    end;
    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

  5. #5
    Membre éclairé Avatar de Ludo_360
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Par défaut
    Lol oky bah comme ça je suis sur de le faire! merci, je vais quand même faire un tour à la faq voir les possiblités des thread et commencer par la base

    ludo

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/06/2002, 00h15
  2. Existe t'il un composant permettant de jouer un son wav?
    Par scorpiwolf dans le forum C++Builder
    Réponses: 5
    Dernier message: 20/06/2002, 14h10
  3. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10
  4. Installer ses composants
    Par Geronimo dans le forum C++Builder
    Réponses: 14
    Dernier message: 18/06/2002, 14h51
  5. Re-dimensionnement automatique de composants
    Par ludo_7 dans le forum C++Builder
    Réponses: 10
    Dernier message: 16/05/2002, 16h35

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