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 :

Problème : DUnit et Mouse_Event()


Sujet :

Delphi

  1. #1
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 207
    Points : 133
    Points
    133
    Par défaut Problème : DUnit et Mouse_Event()
    Bonjour à tous !

    Je suis actuellement en train de mettre en place une batterie de test DUNIT pour application. Je cherche à simuler le clique sur l'onglet d'un TabControl.
    J'ai créer une fonction qui positionne la souris sur cette onglet et qui lance un clique (mouse_event()). CEtte fonction marche très bien dans un simple projet avec deux form toute bête. Mais dés que j'effectue ce teste avec DUnit le clique ne s'effectue plus.

    Voilà le code de ma fonction

    Signature :
    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    procedure SimulateClickOnTabSheet(PageControl : TPageControl;
                                                     TabSheet    : TTabSheet);

    Implémentation;
    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 TestDUNIT.SimulateClickOnTabSheet(PageControl : TPageControl;
                                                                    TabSheet    : TTabSheet);
    var
      TabBounding    : TRect;
      TabBoundingCor : TPoint;
    begin
      //Test que l'on ne puisse pas changer d'onglet lorsque l'on est en mode d'insertion
      TabBounding := PageControl.TabRect(TabSheet.PageIndex);
     
      TabBoundingCor := PageControl.ClientToScreen(TabBounding.TopLeft);
     
      Mouse.CursorPos := TabBoundingCor;
      Application.ProcessMessages;
     
      Mouse_Event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
    end;
    Et pour l'appelle de cette fonction je le fait de cette manière :
    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      FFormAvecTab.Show;
      SimulateClickOnTabSheet(FFormAvecTab.pxyPageControlDetails,
                                         FFormAvecTab.pxyTabSheetDetail);
      Check(FFormAvecTab.pxyPageControlDetails.ActivePage = FFormAvecTab.pxyTabSheetDetail,'BEAU ça a marché');

    Une Bière à celui qui trouve la solution à ce problème !!
    @@++

  2. #2
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    il faut également relacher virtuellement le bouton avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
    non ?
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  3. #3
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 207
    Points : 133
    Points
    133
    Par défaut
    Non pas pour le clique sur un TabSheet d'un page contrôle.

    D'autant plus que cela fonctionne très bien lorsque l'on sort du contexte DUnit,
    et que meme avec un boutton simple cela ne fonctionne pas en DUnit.
    @@++

  4. #4
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Citation Envoyé par Seboubou86
    Non pas pour le clique sur un TabSheet d'un page contrôle.

    D'autant plus que cela fonctionne très bien lorsque l'on sort du contexte DUnit,
    et que meme avec un boutton simple cela ne fonctionne pas en DUnit.
    bon, cela me parait quand meme curieux de pas relacher le bouton...

    Sinon, tu peux essayer de positionner le curseur avec SetCursorPos plutot qu'avec Mouse.CursorPos

    D'autre part tu peux également tenter via les messages:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sendmessage(HAppli, WM_LBUTTONDOWN, MK_LBUTTON, y shl 16 + x);
    SendMessage(HAppli, WM_LBUTTONUP, 0, 0);
    éventuellement avec PostMessage également (le PostMessage n'attend pas le retour...)
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  5. #5
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 207
    Points : 133
    Points
    133
    Par défaut
    Pour ce qui est du clique sur le TabSheet, le test est très simple.
    Tu prend un PageControl avec plusieurs Onglet.
    Tu cliques sur un des onglets en gardant enfoncé le bouton de la souris (MOUSE_DOWN).Le TabSheet sur lequel tu clique s'affiches.

    Pour la position du curseur les deux méthodes fonctionnes très bien j'ai testé les deux.

    Par contre pour le SendMessage je ne comprend pas deux chose :
    Happli -> c'est les Handle de la forme on l'on veut cliquer ??
    y shl 16 + x -> c'est les cordonnées du clique, mais relative à quoi ??

    En tout cas merci de ton aide :-)
    @@++

  6. #6
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    HAppli je sais plus si c'est celui de la form ou de l'application à vrai dire, je pense que c'est celui de la form.

    sinon pour les coord, c'est par rapport à la form
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    en mode debugage ca te donne quoi tes coordonnée
    surtout celle du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TabBounding := PageControl.TabRect(TabSheet.PageIndex);
    @+ Phil

    PS :

    Tu peut essayer ça pour me dire si cela fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        TabBounding := PageControl.TabRect(TabSheet.PageIndex);
        TabBoundingCor := PageControl.ClientToScreen(TabBounding.TopLeft);
        X := TabBoundingCor.X;
        Y := TabBoundingCor.Y;
        SetCursorPos(X, Y);
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  2. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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