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 :

Retrouver le handle d'une classe TFrame en Delphi


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Par défaut Retrouver le handle d'une classe TFrame en Delphi
    Bonjour

    Je veux retourner le handle d'une classe Tframe développé en delphi dont le prototype est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
             unit TestFrameUnit;
     
             interface
             uses
               Windows, Messages, SysUtils, Variants, Classes;
     
             type
                TTestFrame = class(TFrame)
    J'ai utilisé la fonction Windows FindWindow(Pchar('TTestFrame'), PChar('TestFrame') mais ça me retourne un handle = 0. J'ai voulu comprendre le problème en utilisant les fonctions GetClassName et GetWindowText au niveau de la frame que je cherche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TTestFrame.procTest;
    var
      Title, ClassName: array [0..255] of Char;
      hwd : THandle;
    begin
       GetWindowText(self.Handle, Title, 255); // Title retourne ''
      GetClassName(self.Handle, ClassName, 255);  //ClassName retourne 'TTestFrame'
      hwd := FindWndow(Pchar(ClassName),Pchar(Title)) // hwd =0;
    end;

    Pouvez vous m'indiquer pourquoi le paramètre WindowName de ma frame est nulle (Title ='') et si vous avez une solution s'il vous plait pour remédier à ce problème.

    Ce code n'est qu'un test. Mon objectif est de retrouver le handle de la frame à partir d'une autre application (C++) pour pouvoir envoyer des messages (SendMessage et WM_COPYDATA) mais si ça ne passe pas au niveau de l'application elle même ça va être difficile de faire la communication entre plusieurs.

    Merci

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 934
    Par défaut
    Citation Envoyé par NGeVtC87 Voir le message
    Pouvez vous m'indiquer pourquoi le paramètre WindowName de ma frame est nulle (Title ='') et si vous avez une solution s'il vous plait pour remédier à ce problème.
    Le texte récupéré par GetWindowText correspond au Caption sous Delphi. Cette propriété n'est pas publiée au niveau du TFrame ; elle est vide.

    Pour la remplir du nom du composant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    TTestFrame = class(TFrame)
      protected
        procedure SetName(const Value: TComponentName); override;
      end;
     
    procedure TFrame13.SetName(const Value: TComponentName);
    begin
      inherited;
      Caption := Value;
    end;
    Citation Envoyé par NGeVtC87 Voir le message
    J'ai utilisé la fonction Windows FindWindow()...
    FindWindow ne va pas le faire sur un TFrame, ce n'est pas une fenêtre de premier niveau. Il faudra d'abord la trouver cette fenêtre (FindWindow) puis parcourir ses composants à coup de FindWindowEx.

  3. #3
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    en effet

    Retrieves a handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows.
    if faut utiliser la MainForm pour cela
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Par défaut
    Merci PAUL TOTH et Andnotor pour votre réponse. C'était bien le problème. J'ai en effet pas pris en compte le fait TFrame n'est pas le composant de niveau 1 et que c'est plutôt en passant par la TForm. Ce qui permet d'accéder aux composants.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 934
    Par défaut
    La MainForm ou créer une fenêtre message-only dédiée à cette tâche que tu retrouves ensuite par FindWindowEx(HWND_MESSAGE, 0, 'MyWindowClass', nil).

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/01/2010, 13h59
  2. Réponses: 9
    Dernier message: 04/11/2008, 18h05
  3. Retrouver qui a implémenté une class de TObject.
    Par billbocquet dans le forum Langage
    Réponses: 2
    Dernier message: 05/05/2006, 20h33
  4. recherche une classe KZtransImg pour delphi 7
    Par plante20100 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/07/2005, 13h56
  5. Comment retrouver le handle d'une application console?
    Par Laurent Dardenne dans le forum Windows
    Réponses: 7
    Dernier message: 22/12/2004, 16h58

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