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 :

Comment référencer en programmation une fenêtre avec le nom, la classe le handle


Sujet :

API, COM et SDKs Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Responsable maintenance
    Inscrit en
    Juin 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable maintenance

    Informations forums :
    Inscription : Juin 2003
    Messages : 26
    Points : 29
    Points
    29
    Par défaut Comment référencer en programmation une fenêtre avec le nom, la classe le handle
    [Win32][D7]
    Comment référencer en programmation une fenêtre créée dynamiquement dont on a récupéré le nom, la classe et le handle

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 460
    Points : 24 874
    Points
    24 874
    Par défaut
    Référencer ? c'est-à-dire ?
    créée dynamiquement ? Par TForm.Create ? Par API CreateWindow ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Nouveau membre du Club
    Profil pro
    Responsable maintenance
    Inscrit en
    Juin 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable maintenance

    Informations forums :
    Inscription : Juin 2003
    Messages : 26
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Référencer ? c'est-à-dire ?
    créée dynamiquement ? Par TForm.Create ? Par API CreateWindow ?
    La fiche de classe TFicheAffTexte est construite à l'aide de l'EDI mais n'est pas créée automatiquement au démarrage de l'application. Elle est créée au besoin à l'exécution par appel au constructeur. On peut la retrouver plus tard via des appels à EnumWindows et récupérer son Handle, sa classe et son nom. Jusque là tout va bien.

    Par référencer je veux dire avoir accès à une "variable" (quelle est la syntaxe à utiliser ?) de classe TForm qui me permette à l'exécution d'accéder à la fiche (à la forme) et à ses composants.


    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
     
    type
      TFicheAffTexte = class(TForm)
        MainMenu1: TMainMenu;
        MnFichier: TMenuItem;
        Quitter1: TMenuItem;
        MnOuvrir: TMenuItem;
        Edition1: TMenuItem;
        AfficheurTexte: TMemo;
        procedure Quitter1Click(Sender: TObject);
        procedure MnOuvrirClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
         .....
         ....
      public
        { Déclarations publiques }
        constructor Cree(AOwner : TComponent; NomFichier : string; OKHS,MenuEditionVisible,AffFin : boolean);
        .....
        .....
      end;
     
    implementation
     
    {$R *.DFM}
     
    constructor TFicheAffTexte.Cree(AOwner : TComponent; NomFichier : string; OKHS,MenuEditionVisible,AffFin : boolean);
      begin
        inherited Create(AOwner);
        Parent:=nil;
        MnOuvrir.Visible:=MenuEditionVisible;
        AfficheurTexte.LectureSeule:=not MenuEditionVisible;
        Repaint;
        if NomFichier <> '' then
          begin
            AfficheurTexte.LoadFromFile(NomFichier);
            if OKHS then AfficheurTexte.ChnComp:='HS;'
                    else AfficheurTexte.ChnComp:='';
          end;
        Show;
      end;

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 460
    Points : 24 874
    Points
    24 874
    Par défaut
    Citation Envoyé par PREUX Voir le message
    Par référencer je veux dire avoir accès à une "variable" (quelle est la syntaxe à utiliser ?) de classe TForm qui me permette à l'exécution d'accéder à la fiche (à la forme) et à ses composants.
    ah, tu es vraiement pas clair ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaVariable := TFicheAffTexte.Cree(...);
    MaVariable peut être une globlale, une locale à une fonction, un membre d'un objet ... c'est comme n'importe quel objet ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 698
    Points : 13 137
    Points
    13 137
    Par défaut
    Convertir un handle en TForm, je ne sais pas si c'est possible (j'ai jamais testé).
    Le handle te permet d'accéder à l'objet par les API Windows.

    Maintenant si tu crées les fiches toi-même, tu aurais meilleur temps de gérer une liste personnelle et de chercher dedans plutôt que de faire un EnumWindows.

  6. #6
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Le plus simple serait effectivement de gérer ta propre liste des fenêtres que tu as créées.

    Sinon, pour répondre à ta question, on peut envisager différentes solutions :
    - Tu pourrais utiliser SetWindowsLong/GetWindowsLong pour associer une donnée utilisateur au handle de la fenêtre. En particulier avec GWL_USERDATA. Il suffirait que cette valeur soit le pointeur sur l'instance.
    - Plus simple peut-être : Tu n'as qu'à envoyer un message utilisateur à la fenêtre, pour qu'elle te répond en retournant le pointeur de son instance.

    On doit également pouvoir l'extraire directement en remontant le mécanisme utilisé par la VCL pour acheminer les messages windows à l'instance de la form, mais c'est se prendre la tête pour pas grand chose. Autant faire un simple SendMessage au handle, et répondre au message en indiquant le pointeur de l'instance...

Discussions similaires

  1. [C#] Imprimer le contenu d'une fenêtre avec ascenseur
    Par biglong dans le forum Windows Forms
    Réponses: 6
    Dernier message: 06/08/2007, 23h29
  2. Comment ouvrir une fentre avec une taille fixe en javascript
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/07/2007, 16h54
  3. coordonnées d'une fenêtre avec window.open
    Par neecolas dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/05/2005, 09h08
  4. [eclipse][plugin] Comment avoir une fenêtre avec focus
    Par relivio dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 07/04/2004, 15h54

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