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

API, COM et SDKs Delphi Discussion :

Sélection avec la souris hors d'une application


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 35
    Par défaut Sélection avec la souris hors d'une application
    Salut,

    Je crée une loupe qui m'aidera dans l'utilisation quotidienne de mon pc (je suis mal voyant), et il me manque 2 choses:
    - Comment sélectionner une partie de l'écran (taille fix, avec encadré autourde la souris) hors de l'application.
    - Savoir si l'utilisateur appuie sur une (ou plusieurs) touche du clavier, toujours hors de l'application.
    Si quelqu'un à une réponce ou un début de piste, merci de me tenir au courrant.

    PS: Si des explications longues doivent se faire, serait il possible de les résumer car les longues lecture me fatigue énormément les yeux.

    Merci d'avance

  2. #2
    Membre éclairé

    Inscrit en
    Novembre 2002
    Messages
    813
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 813
    Par défaut
    salut ,

    Comment sélectionner une partie de l'écran (taille fix, avec encadré autourde la souris) hors de l'application.
    Pour cela un peu plus d'explication serait neccessaire , quel genre de selection ?


    Savoir si l'utilisateur appuie sur une (ou plusieurs) touche du clavier, toujours hors de l'application.
    Si quelqu'un à une réponce ou un début de piste, merci de me tenir au courrant.
    Pour cela fait une recherche sur le forum : avec les mots clé Hook Clavier

  3. #3
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Citation Envoyé par petitcoucou31
    Pour cela un peu plus d'explication serait neccessaire , quel genre de selection ?
    J'imagine que c'est un rectangle de sélection dessiné à la souris, qui déterminera la portion de l'écran à "louper".
    Pour faire cela ce n'est pas facile. Il faut soit utiliser la "belle" méthode : un hook souris avec dessin du rectangle sur la fenêtre 0 (l'écran directement). Soit utiliser la méthode "facile mais moche" : utiliser une fenêtre plein écran sans bords et avec une propriété TransparentColor = clBtnFace.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 35
    Par défaut
    Merci pour ces infos, juste un petit rappel (pour moi) pour dessiner sur l'écran, on utilise getwindowDC et releaseDc avec un objet canvas?

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Il est peut-être plus simple d'utiliser une souris avec cette fonction en standard : la souris achetée en grande surface (moins de 15 Euros) pour mon PC perso active une loupe lorsqu'on clique sur la molette de défilement.

  6. #6
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Citation Envoyé par carlg
    Merci pour ces infos, juste un petit rappel (pour moi) pour dessiner sur l'écran, on utilise getwindowDC et releaseDc avec un objet canvas?
    Oui mais c'est GetDC et non GetWindowDC :
    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
    var DC : HDC;
        Canvas : TCanvas;
    begin
      DC := GetDC(0);
      try
        Canvas := TCanvas.Create;
        try
          Canvas.Handle := DC;
          // ici tu utilises Canvas pour dessiner sur l'écran
        finally
          Canvas.Free;
        end;
      finally
        ReleaseDC(DC);
      end;
    end;
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 180
    Par défaut
    Si tu veux il existe également un outil tout fait dans Windows

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 35
    Par défaut
    Merci pour les infos, je vais regarder à tout ca.

    Pour les outils, en fait j'utilise déjà la loupe de windows, mais le gros problème est que je ne sais pas tout voir (les infos-bulles, barre d'état, et autres.) C'est pour ca que je met au point cette loupe qui ne suivera pas le curseur (car déjà réalisée et sans interret vu que windows en a une), mais qui restera fixe (sauf pour les infos bulle ou je vais faire suivre le curseur mais en prenant la partie inférieur ou suppérieur selon les cas, à moins qu'on sache reprendre la position ou voir mieux le texte d'une info vulle d'une autre application).

    En tous cas, un grand merci

  9. #9
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Je ne sais pas si la solution te conviendra, mais tu pourrais créér une application présente en permanence.
    - Cette appli "plein écran" (sans bordure) serait minimized en général,
    - Elle s'activerait Lorsqu'on appuie sur une touche spéciale du clavier (exemple le [n 2] sous la touche escape),
    - lors de l'activation par le Hook du mousemove, on recopie l'écran (avec bulles d'aide, etc) dans le timage qui occupe toute la forme
    - à ce moment-là, le zoom window continue à marcher normalement comme d'habitude,
    - lorsque qu'on appuye sur la touche spéciale et que l'appli qui "fige" l'écran est en avant-plan, on minimize cette appli.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 35
    Par défaut
    Cette solution la ne va pas, car il faut pouvoir continuer à travailler normalement en perdant le moins de temps possible. Mon appli ne prend qu'une petite partie de l'écran, ce qui me permet de la regarder et de procéder au action souhaité ou de pratiquer des réglage (car je travail beaucoup sous FL Studio et Audition).

    Par contre g un petit soucis, je ne trouve pas pour mettre une couleur transparente pour l'encadremen ainssi que l'effacement de se rectanglet, j'utilise delphi 5 personal edition.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 35
    Par défaut
    Y a t il un moyen d'utiliser les hooks sans dll, si oui, comment?

    Merci d'avance

  12. #12
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    voivi le code (testé) qui devrait répondre à la question 1 :
    - Comment sélectionner une partie de l'écran (taille fix, avec encadré autourde la souris) hors de l'application
    .

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    unit Unit2;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls, Buttons;
    type
      TForm1 = class(TForm)
        Image1: TImage;
        BitBtn1: TBitBtn;
        Timer1: TTimer;
        procedure Timer1Timer(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        screencanvas : tcanvas ;
        screenhandle : HWND ;
        { Private declarations }
      public
        { Public declarations }
      end;
    var
      Form1: TForm1;
    implementation
    {$R *.dfm}
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    screencanvas:=TCanvas.Create;
    screencanvas.Handle:=GetWindowDC(GetDesktopWindow);
    form1.doublebuffered:=true ;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    var sourcerect : trect ;
        demicote : integer ;
    begin
    demicote:=100 div 2 ; // zone a zoomer : 60x60
    sourcerect.Left  :=mouse.cursorPos.X-demicote ;
    sourcerect.right :=mouse.cursorPos.X+demicote ;
    sourcerect.Top   :=mouse.cursorPos.Y-demicote ;
    sourcerect.Bottom:=mouse.cursorPos.Y+demicote ;
    image1.Canvas.CopyRect(image1.ClientRect, screencanvas, SourceRect);
    end ;
     
    end.

  13. #13
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Rebonjour,

    Le commentaire 60x60 est faux, c'est en fait 100x100

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 35
    Par défaut
    Sympa pour le code, mais ca je l'ai déja fait, ce que je voudrais, c'est un encadrement autour du curseur pour montrer l'endroit qui va etre agrandit.

    Merci quand même.

  15. #15
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Pour le tracé autour de la souris, je te suggére de gérer une forme transparente :
    - créer une forme stayonotop,
    - supprimer ses "border icons", mettre borderwitdth à zero,
    - mettre la propriété "Transparent" de la Form à True,
    - mettre les propriétés "Color" et "TransparentColor" à la même valeur ( tout autre couleur que clBtnFace)
    - créér un panel de la même couleur (caption='')

    On ne voit plus de la forme que le cadre du panel et en dehors du bord du cadre on a accès à toutes les appli (même celles situées sous la forme).

    Il ne reste plus qu'à déplacer la forme en fonction de la position curseur.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 35
    Par défaut
    Avec le form transparent, comment on fait pour récupérer le clique et masquer le curseur. J'ai essayer avec Screen.Cursor mais ça ne donne rien.

    Merci d'avance

  17. #17
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Quand la forme est transparente, il me sembe que le curseur n'est plus géré par la forme sur les zones transparentes. Ca permet en particulier de cliquer à travers la forme.

    Pour récupérer le clic, il faut le piéger sur toutes les autres formes, donc via un hook curseur. Mais je crois qu'il faut faire ce type de hook pour événements WH_MOUSE_LL (ou WH_KEYBOARD_LL ) dans une DLL.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 35
    Par défaut
    Merci à tous pour votre aide

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

Discussions similaires

  1. Probleme avec des logs générés par une application
    Par yayamo dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 16/04/2008, 14h41
  2. Réponses: 1
    Dernier message: 14/03/2008, 17h26
  3. Dessiner à l'écran avec Java hors d'une application
    Par BlackHawk10 dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 17/12/2007, 21h02
  4. Réponses: 7
    Dernier message: 16/06/2007, 12h03
  5. Réponses: 4
    Dernier message: 11/06/2006, 05h39

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