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

C++Builder Discussion :

Activer les "Windows message loop"


Sujet :

C++Builder

  1. #1
    Membre confirmé Avatar de marcootz
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 159
    Par défaut Activer les "Windows message loop"
    Salut,

    Je suis en train d'utiliser les fonctions d'une API fournie avec un driver d'écran tactile. Mon but est de lancer le panneau de calibration de l'écran (4 points) puis de lire et de sauvegarder les paramètres ainsi obtenus.

    J'ai un problème avec la fonction qui lance ce panneau de calibration. Dans la doc de L'API pour cette fonction et il est mis en remarque :

    The caller has to make sure that application has the Windows message loop so that this calibration can work correctly
    Quand j'appelle ma fonction, le panneau de calib se lance bien, mais le système reste figé... Je pense que je doit "activer" les messages loop pour pouvoir redonner la main à mon appli mais je ne trouve pas comment faire. Pouvez vous m'aidez ?

    Merci par avance

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 054
    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 054
    Par défaut
    Dans une application normale, c'est le Run() dans le WinMain
    Dans une application sans utiliser TApplication, je fais ceci

    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
      while (...)
      {
        if (WaitMessage())
        {
          TMsg Msg;
          if (PeekMessage(&Msg, 0, 0, 0, PM_REMOVE))
          {
            switch (Msg.message)
            {
              case WM_QUIT :
     
              break;
     
              case WM_... :
                ...
              break;
            }
          }
        }
      }
    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 confirmé Avatar de marcootz
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 159
    Par défaut
    Merci ShaiLeTroll,

    Par contre dans ton code, a quel endroit lancer ma fonction bloquante ? Juste avant le while ?

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 054
    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 054
    Par défaut
    Si c'est la fonction de l'API qui est bloquante, je vois pas bien comment tu pourrais faire une boucle de message en même temps (sauf dans un thread mais c'est hors de propos à mon avis)

    Dans une application normale, Run() fait ce travail, il n'est pas nécessaire de le faire !

    Qu'est qui est figé, juste ton EXE ou le "système" ?
    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 confirmé Avatar de marcootz
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 159
    Par défaut
    C'est tout le système qui est figé.

    Voici un extrait de l'aide pour ma fonction :
    C'est surtout la dernière ligne qui me fait penser qu'il faut intercepter les messages Windows d'une façon particulière

    BOOL WINAPI DoCalibration (
    HANDLE hFile,
    HWND hParentWnd,
    PVOID pContext,
    MAP_CALLBACK_ROUTINE pCallbackRoutine );

    DoCalibration do 4 points calibration for the touchscreen.

    Parameters

    hFile
    Handle to the open device by CreateDevice.

    hParentWnd
    The parent window.

    pContext
    Caller prepared buffer to be passed to the caller prepared callback routine.

    pCallbackRoutine
    Caller prepared callback routine. Once the calibration is done, the callback routine will be called. The Caller prepared buffer pContext, calibration result information will be passed to this callback routine.

    Remark
    This calibration mapping can be finished successfully only DeviceThread was started with StartDeviceThread . This function creates a calibration window for 4 points calibration. The caller has to make sure that application has the Windows message loop so that this calibration can work correctly.
    Merci !

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 054
    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 054
    Par défaut
    Il y a donc bien un thread à gérer !
    Difficile de t'aider plus, c'est une API, sans connaissance précise de celle-ci et de son comportement, ce n'est pas évident de t'aider

    la pCallbackRoutine est appelé qu'une seule fois ?
    Etrange, un buffer de retour aurait été suffisant

    Si pCallbackRoutine est appelé plusieurs fois (genre à chaque déplacement de souris), essaye un Application->ProcessMessages() mais ça pue la bidouille
    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

  7. #7
    Membre confirmé Avatar de marcootz
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 159
    Par défaut
    La pCallbackRoutine n'est appelé qu'une seule fois, mais je pense que tu as raison il faut bien utiliser un thread pour laisser le programme principal intercepter les messages.
    Je m'en suis finalement sorti en utilisant une autre fonction mais je te remercie pour ton aide.
    A+

Discussions similaires

  1. Désactiver le message "Activer les macros"
    Par Jeannot45 dans le forum VBA Word
    Réponses: 1
    Dernier message: 26/07/2007, 14h03
  2. [C#] Timer sur les évènements des messages Windows
    Par Nullos Oracle dans le forum Windows Forms
    Réponses: 1
    Dernier message: 19/09/2006, 11h33
  3. MyISAM & les accès concurrentiels: le "miracle"
    Par twkjp dans le forum Outils
    Réponses: 3
    Dernier message: 09/09/2005, 17h02
  4. [cr 8.5] comment exploiter les données d'un "array"
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 12
    Dernier message: 09/06/2005, 14h03

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