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 :

histoire de handle


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 : 40
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Par défaut histoire de handle
    bonjour

    Lorsque je veux récupérer le handle grâce à la fonction windowfrompoint(pos) je n'ai pas le même résultat que lorsque je fais getforeground window, pourtant le test est fait en même temps et sur la même fenêtre.

    Les deux fonctions ne servent apparemment pas à retourner le mème résultat ( pourtant un handle de fenetre HWND) .

    Je voudrais récupérer le handle au curseur actif ( et non au curseur de la souris)...

    Le handle retourné par les deux fonctions pour le handle de mon application est le même... je comprend pas la logique et surtout je ne vois pas comment remedier à ce problème.

    Merci de m'éclairer =)

    ludo

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Par défaut
    A quoi sert vraiment la fonction GetwindowDC ?
    Les tests m'affichent des nombres non stables...

  3. #3
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Celà permet de créer unDevice Context (une sorte de TCanvas (une surface de dessin donc)), auquel on accède par le numéro qui t'a été transmis par windows.

    Y'a pas un petit Laïus sur les Handle dans la FAQ ?

    Voici la FAQ, lis la bien...
    http://delphi.developpez.com/faq/?pa...#questcehandle

    Et je complête avec ceci (Un projet de mise à jour de la FAQ), si ça peut t'aider...
    [QR]Qu'est-ce qu'un Handle ?
    blablabla existant...

    Pour tous les contrôles fenêtrés ( descendants de TWinControl ), la propriété Handle (de type HWND) du composant donne le Handle de fenêtre Windows sous-jacent au composant.
    Un Handle de fenêtre particulier est celui du bureau Windows : c'est la constante HWND_DESKTOP qui est égale à 0.
    et une nouvelle du style:
    [QR] Qu'est-ce qu'un contexte de périphérique?
    Les contextes de périphérique sont des surfaces de dessin, ainsi, tous les contrôles graphiques (descendants de TGraphicControl) et toutes les surfaces de Dessin (TCanvas, TControlCanvas, TMetaCanvas, TPGNCanvas,...) en général possèdent une propriété Handle qui est de type HDC (et non pas HWND comme pour les fenètres).

    Lors de la création d'une surface de dessin avec l'API Windows (HDC), on lui associe toujours un handle de fenètre particulière (HWND). Ainsi vous trouverez souvent le code suivant dans des codes sources Delphi.

    Exemple d'obtention d'une surface de dessin et libération de cette surface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    uses windows;
    ...
    var DC:HDC;
    begin
       //Obtention d'une surface de dessin pour la fenêtre qui représente le bureau Windows
      DC:=GetDC(HWND_DESKTOP); //GetDC(0) revient donc au même
     
      //...utilisation de la surface de dessin (de nombreux exemples dans la FAQ)
     
      //Libération du Handle.
      ReleaseDC(HWND_DESKTOP,DC);
    end;
    Un autre exemple de Handle de fenêtre particulier, souvent utilisé avec les API windows PostMessage et SendMessage est la constante HWND_BROADCAST qui permet d'envoyer le même message à toutes les fenêtres parentes du système.

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Par défaut =)
    okay j'y vois un peu plus clair

    Je me pose maintenant une question alors:
    Voila en fait je dois envoyer un caractère a un control ayant le focus ( dans notepad ou explorer par exemple, à l'endroit du curseur actif) .
    Jusque maintenant je mémorisait le handle grâce au clic de souris: windowsfrompoint(mouse.cursorPos).
    Ensuite j'envoie le caractère ac un sendmessage et le handle mémorisé: aucun soucis.

    Je dois, maintenant trouver un moyen pour ne pas utiliser la souris, donc trouver le curseur actif: je trouve donc le handle de la fenetre GetForegroundWindow, mais je n'arrive pas à trouver le control actif dans la fenetre...
    Je pensais que j'y arriverais avec GetWindowDC, mais tu viens de me prouver que non... alors je ne sais pas trop =(

    merci pour tes conseils en tout cas

    ludo

  5. #5
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Va voir un si tu ne trouve pas du code dans les sources du défi n°1

    Comme on à tous, à cette occasion, piloté une application externe (le démineur) en usant et abusant des clics de souris "virtuels" (sans déplacement de curseur) et "réels" (avec déplacement du curseur), je suis persuadé que tu y trouvera ton bonheur : mettre le focus sur un controle, activer la fenêtre d'une application, énumérer les handles de fenêtres, etc...

    J'avais compilé tout ce genre de petite choses dans une unité à part (unitutils.pas si mes souvenirs sont bons).

    Au moins, celà te permettra de voir comment on s'y est pris pour faire ce genre de chose.

    A+

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Par défaut
    oky merci

    ludo

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/07/2003, 11h52
  2. Manipulation des handle contexte
    Par rockbiker dans le forum DirectX
    Réponses: 1
    Dernier message: 09/05/2003, 18h51
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. pb de récup de handle à partir d'une dll
    Par yokito dans le forum Langage
    Réponses: 2
    Dernier message: 20/08/2002, 12h29
  5. pb de handle en C
    Par deedje dans le forum C
    Réponses: 3
    Dernier message: 21/06/2002, 16h19

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