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

Lazarus Pascal Discussion :

Copier l'image et détecter les placements de la souris dans une autre application


Sujet :

Lazarus Pascal

  1. #1
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut Copier l'image et détecter les placements de la souris dans une autre application
    Bonjour à toutes et à tous,

    Soit une application "lambda" présente en premier plan sur l'écran de mon ordinateur. Dans un application que je souhaite créer et qui tournerait donc en second plan, je voudrais pouvoir copier une partie de l'image que présente l'application "lambda", cette partie étant délimitée par deux positions de la souris

    Cela exige, de la part de mon application, d'être capable de détecter la position de la souris dans l'application "lambda" et d'être capable de copier l'image délimitée par les positions de la souris.

    Est-ce possible ? Si oui, par quel biais aborder le problème ? Est-ce la gestion des messages ? (ça fait une bonne décennie que je n'ai pas jouer avec cela )

    Cordialement.

    Pierre

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 694
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Sous Windows,

    Pour la souris, tu peux le faire en interceptant ses messages à l'aide d'un hook ou par Raw Input.

    Hook :
    Est contenu dans une DLL qui sera injectée dans le processus cible (voire tous les processus si le ThreadId est non défini) et s'installe par SetWindowsHookEx en spécifiant WH_MOUSE (évite les hooks de bas niveau (WH_MOUSE_LL) qui ne sont plus vraiment supportés).
    Le principe est synchrone, l'information doit par conséquent être traitée très rapidement sous peine de pénaliser le système complet (cf. ThreadId ci-dessus). Le mieux dans le cas présent est de simplement router le message par PostMessage vers ton application.

    Raw Input :
    Une fenêtre de l'application s'enregistre dans la chaîne de notification par RegisterRawInputDevices. Elle reçoit ensuite l'information par message WM_INPUT.
    Le principe est asynchrone.


    L'image peut ensuite être copiée en récupérant le device context de la source (GetDC) et la dupliquer sur un DC cible par BitBlt.

  3. #3
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Merci Andnotor pour ces suggestions. J'ai oublié de préciser que je souhaite que cela fonctionne aussi sous Linux.

    Est-ce le cas pour ce que tu me suggères ?

    Cordialement.

    Pierre

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Sous Windows,

    Pour la souris, tu peux le faire en interceptant ses messages à l'aide d'un hook ou par Raw Input.

    Hook :
    Est contenu dans une DLL [...]
    --snip--
    Citation Envoyé par ChPr Voir le message
    J'ai oublié de préciser que je souhaite que cela fonctionne aussi sous Linux.

    Est-ce le cas pour ce que tu me suggères ?
    Surement pas, non ! Les dll's sont inconnues dans cet environnement,

    En ce qui me concerne, je fais une copie d'écran classique de tout le bureau, que je fais ensuite afficher par-dessus tout ce qui y est affiché, et c'est là-dessus que je vais détecter puis recopier le rectangle délimité par les mouvements de la souris.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par Jipété Voir le message
    ... En ce qui me concerne, je fais une copie d'écran classique de tout le bureau ...
    Ça, c'est la touche "Imp.écr.Syst", oui, non ?

    Citation Envoyé par Jipété Voir le message
    ... que je fais ensuite afficher par-dessus tout ce qui y est affiché ...
    Comment fais-tu ? C'est une touche, une fonction ?

    Cordialement.

    Pierre

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Ça, c'est la touche "Imp.écr.Syst", oui, non ?
    Pas du tout !
    Je fais ça par code (mais je ne l'ai pas sous la main, là), et ça génère un TBitmap (un grand classique facilement trouvable sur le web).

    Citation Envoyé par ChPr Voir le message
    Comment fais-tu ? C'est une touche, une fonction ?
    C'est une fiche sans bordures, sans menus, sans caption, sur laquelle se trouve un TImage aligné avec alClient et chargé avec le bitmap provenant de la ligne précédente, la fiche étant positionnée par-dessus tout le monde.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #7
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Ok, merci, j'ai compris.

    Cordialement.

    Pierre

  8. #8
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    ce que tu veux faire ressemble fortement à une capture d'écran de région sélectionnée. Dans le forum principal de Lazarus, il y a plusieurs personnes qui ont mis à disposition un projet pour réaliser cela (aradeonas, howardpc) voir ici

    Ami calmant, J.P (sans T)
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #9
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Merci jurassic pork,

    Je vais regarder cela.

    Cordialement.

    Pierre

  10. #10
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Dans les exemples que vous m'avez donnés, la position de la souris est prise dans l'image copiée, c'est-à-dire non pas dans l’image originale de l'application tierce. Ce que je souhaite est vraiment avoir la position de la souris dans l'application tierce.

    Avec la petite application suivante, je récupère la position de la souris dans mon application. Je voudrais étendre cette possibilité à une application tierce.

    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
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
      Messages, LMessages;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
      private
        { private declarations }
        procedure Souris(var message: TMessage); message WM_LBUTTONDOWN;
      public
        { public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    procedure TForm1.Souris(var message: TMessage);
    var
      x, y: Integer;
    begin
      x:= message.wParam;
      y:= message.lParam;
    end;
     
    end.
    Windows et Linux (je suppose) placent dans une pile tous les évènements reçus. Avec l'exemple ci-dessus, j'intercepte ceux relatifs à ma proppre application. N'y a-t-il pas moyen d'intercepter tous les évènements, d'où qu'ils viennent ?

    Cordialement.

    Pierre

  11. #11
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut

    Pour détecter la position de la souris à l'écran il existe la procedure GetCursorPos(var Pos : TPoint) dans l'unité LCLIntf. Tu peux la placer dans un timer pour récupérer les informations en temps réel
    Ensuite, il te faudras récupérer la position et les dimensions de ton application tierce.
    J'ai trouvé ça sur le forum de free pascal pour les "process".
    - Pour windows : https://forum.lazarus.freepascal.org...,37493.15.html
    - Pour linux : https://forum.lazarus.freepascal.org...?topic=12107.0.

    Après comment récupérer la position et les dimensions, de celle-ci je n'en ai aucune idée.

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  12. #12
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonsoir,

    il me semble détecter un changement dans la demande, entre le post d'origine
    Citation Envoyé par ChPr Voir le message
    je voudrais pouvoir copier une partie de l'image que présente l'application "lambda", cette partie étant délimitée par deux positions de la souris
    et ce post, où la cible évolue :
    Citation Envoyé par ChPr Voir le message
    Ce que je souhaite est vraiment avoir la position de la souris dans l'application tierce.
    Ça change tout...

    Faudrait pouvoir trouver la position de l'application tierce, donc, et là, pas la moindre idée, désolé.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  13. #13
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    [QUOTE=Jipété;10224979]Bonsoir,

    il me semble détecter un changement dans la demande, entre le post d'origine
    ...

    Ça change tout...

    Non, dès le début j'ai dit :

    Citation Envoyé par ChPr Voir le message
    ...Cela exige, de la part de mon application, d'être capable de détecter la position de la souris dans l'application "lambda" ...
    Par ailleurs, je peux connaître la position et les dimensions de l'application tierce. Ce qu'il me faut, est de connaître soit la position de la souris dans cette application, soit :

    sa position sur l'écran. Cette dernière proposition est peut-être différente et amène peut-être une solution ?

    Cordialement.

    Pierre

    Cordialement.

    Pierre

  14. #14
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Yep !
    Citation Envoyé par ChPr Voir le message
    Par ailleurs, je peux connaître la position et les dimensions de l'application tierce.
    Hé bien, si tu connais ça, ça te donne les coordonnées de l'appli tierce dans l'image "copie d'écran du bureau".
    Il te suffira de récupérer les coordonnées de la souris au MouseMove sur cette image puis deux bêtes soustractions te donneront les coordonnées de la souris dans (l'image de) l'appli tierce. Non ?

    Attention, il va y avoir du sport (et de la lecture, et des tests) avec ClientToScreen et ScreenToClient, dont je ne me souviens jamais dans quel sens qui fait quoi, et il y en a d'autres, je crois...

    PS : ton dernier post a perdu un "[/QUOTE]" dans la bataille avec l'éditeur,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  15. #15
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    ... Pour détecter la position de la souris à l'écran il existe la procedure GetCursorPos(var Pos : TPoint) dans l'unité LCLIntf. Tu peux la placer dans un timer pour récupérer les informations en temps réel ...
    Je pensais bêtement que cette fonction n'était valable qu'à l'intérieur de mon application. Je viens d'essayer et effectivement, je peux avoir la position de la souris sur tout l'écran.

    C'est un début. Bon, ça, je ne l'avait pas précisé (désolé), mais ce que 'il me faudrait aussi connaître, c'est la position des boutons de la souris.

    Pour être plus précis, ce que je souhaite est de connaître la position de la souris au moment où j'appuie sur la touche gauche et au moment où je relâche cette touche. Une fonction du genre GetMouseState(...) que je n'ai pas trouvée.

    J'ai trouvé : GetKeyShiftState, mais dans le petit programme suivant, autant lorsque je teste les touches Shift, Alt, Cntrl, ça fonctionne que si je teste les touches de la souris, cela ne fonctionne 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
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      PosC: TPoint;
      State: TShiftState;
    begin
      GetCursorPos(PosC);
      State:= GetKeyShiftState;
      Edit1.Text:= IntToStr(PosC.x);
      Edit2.Text:= IntToStr(PosC.y);
      if ssLeft in State then
        Edit3.Text:= 'DOWN'
      else
        Edit3.Text:= 'UP';
    end;
    Cordialement.

    Pierre

  16. #16
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Bon, en fait, c'est normal que GetKeyShiftState ne renvoie pas d'informations relatives à la souris car dans cette procédure, les touches de la souris ne sont pas testées.

    J'ai donc créé ma propre fonction GetCursorState telle que ci-après :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function GetCursorState: TShiftState;
    begin
      Result := [];
      if (GetKeyState(VK_LBUTTON) and $8000) <> 0 then
        Include(Result, ssLeft);
      if (GetKeyState(VK_MBUTTON) and $8000) <> 0 then
        Include(Result, ssMiddle);
      if (GetKeyState(VK_RBUTTON) and $8000) <> 0 then
        Include(Result, ssRight);
    end;
    Je l'ai testée sous WIndows et Linux : ça fonctionne

    Bon, avec ça j'espère que je vais me sortir de mon problème.

    Cordialement.

    Pierre

  17. #17
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Bon, en fait, c'est normal que GetKeyShiftState ne renvoie pas d'informations relatives à la souris car dans cette procédure, les touches de la souris ne sont pas testées.

    J'ai donc créé ma propre fonction GetCursorState telle que ci-après :
    Mais pourquoi réinventer la roue ?
    Il existe MouseDown et MouseUp, qui remontent la position, le bouton appuyé et si une touche était pressée pendant le clic...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  18. #18
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Mais pourquoi réinventer la roue ?
    Il existe MouseDown et MouseUp, qui remontent la position, le bouton appuyé et si une touche était pressée pendant le clic...
    Je dois être un peu (beaucoup) neu-neu en ce moment. Peux-tu me donner un exemple d'utilisation de MouseDown me retournant les coordonnées de la souris au moment ou j'appuie sur sa touche gauche.

    Cordialement.

    Pierre

  19. #19
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Je dois être un peu (beaucoup) neu-neu en ce moment. Peux-tu me donner un exemple d'utilisation de MouseDown me retournant les coordonnées de la souris au moment ou j'appuie sur sa touche gauche.

    Cordialement.

    Pierre
    Non, il faut faire comme je te l'ai expliqué plus haut. Un timer tu récupères les coordonnées de la souris sur l'écran et vu que tu connais la position et les dimensions de ta fenêtre tierce il est simple de déduire la position de la souris dans celle-ci

    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
    Uses LCLIntf;
     
    Timer1.Interval := 50;
     
    Procedure TFBase.Timer1Timer(Sender : TObject);
    Var
     mp : TPoint;
     AppRect : TRect;
     OriginApp : TPoint;
     WidthApp, HeightApp : Longint;
     MousePosInApp:TPoint;
    Begin
     WidthApp := 800;
     HeightApp:=400;
     OriginApp.Create(250,250);
     AppRect.Create(OriginApp,WidthApp, HeightApp);
     GetCursorPos(mp);
     if AppRect.Contains(mp) then
     begin
       MousePosInApp.X := mp.X - OriginApp.X;
       MousePosInApp.Y := mp.Y - OriginApp.Y;
       Label1.Caption := 'X : '+MousePosInApp.x.ToString+' Y : '+MousePosInApp.y.ToString;
     End
     else
       Label1.Caption := 'Out';
    end;
    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  20. #20
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Merci BeanzMaster pour ce calcul des positions.

    En fait, mon problème est à la fois plus simple et plus compliqué qu'il n'y paraît.

    Il est plus simple car je ne cherche que la distance entre deux pointages de la souris -> dX et dY,
    Il est plus compliqué car cela met en œuvre les moments où la touche gauche de la souris est appuyée puis relâchée.

    Autrement dit, ce que je souhaite est de connaître la position (X0, Y0) au moment où j'appuie sur la touche gauche et la position (X1, Y1) au moment où je relâche la touche.

    C'est pourquoi la mise en œuvre des deux fonctions MouseDown et MouseUp dont Jipété parle m'intéresse.

    Cordialement.

    Pierre

Discussions similaires

  1. Détecter la position de la souris dans une fonction
    Par polemoss dans le forum jQuery
    Réponses: 5
    Dernier message: 19/03/2009, 09h28
  2. Réponses: 3
    Dernier message: 01/02/2009, 00h05
  3. Réponses: 4
    Dernier message: 06/05/2008, 19h59
  4. Réponses: 7
    Dernier message: 18/01/2007, 15h03
  5. Afficher les élements d'un formulaire dans une autre fenetre
    Par BernardT dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/12/2005, 22h52

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