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

Langage Delphi Discussion :

Utilisation de EnumChildWindows dans une class


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut Utilisation de EnumChildWindows dans une class
    Bonjour, j'utilise la fonction EnumChildWindows dans une class que j'ai créé. (j'en suis au début de l'apprentissage POO)

    Grace à la fonction suivante, je récupère le Handle du CommandLine AutoCAD (EnumChildWindows se trouve dans la function InitialiseAutoCAD de la même class)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TOfmlArray.InitialiseAutoCAD;
    var
      pConAcadFile, DwgTemplate, ArxPath : String;
    begin
    
          ...
    
          EnumChildWindows(AutoCadOle.Application.HWND, @GetCommandLineHandle, 0);
          ...
    end;
    function GetCommandLineHandle. La variable CommandLineHandle est de type Handle et déclaré en public dans ma class

    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
    function TOfmlArray.GetCommandLineHandle(H:HWND; L: Integer): Bool; stdcall;
    var WText,ClassName      : Array[0..255] of Char;
    
    begin
    
          GetClassName(H, ClassName, SizeOf(ClassName));
          GetWindowText(H, WText, SizeOf(WText));
          if (WText = 'Headlands') then
          begin
            Result := False;
            CommandLineHandle := H;
          end
          else Result := True;
    end;
    Voici ma class (en bref)

    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
    TOfmlArray = class
        ...
      public
        CommandLineHandle : HWND;
        vpConConfHandle : HWND;
        AutoCadOle : variant;
    
        function GetCommandLineHandle(H:HWND; L: Integer): Bool; stdcall;
        procedure DelphiMsgToAutoCAD(CadHwnd : HWND; Cmd : String);
        procedure StartAutoCadConfigurator;
        procedure HideAutoCadConfigurator;
        procedure InitialiseAutoCAD;
    
        constructor Creation();
    
      end;
    Mon problème est le suivant, si j'exécute le EnumChildWindows hors de ma class, tout fonctionne nickel!
    Dès que je l'intègre (avec la fonction qui lui est associée "GetCommandLineHandle" ) rien ne va plus, j'ai une erreur du compilateur m'indiquant "Variable requiered" et je ne sais pas pourquoi étant donné que j'ai juste adapté le tout dans ma class sans modification du code!
    Mais quelle bordel !

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    C'est un problème de pointer de procédure, qui est différent entre un pointeur procédure standard et celui d'une méthode, sur le forum ce fut un sacré truc à étudier (il est passé en FAQ, la recherche ne marche plus trop bien depuis la maintenance de tout à l'heure), c'est assez sportif de convertir l'un vers l'autre, donc le plus simple est de mettre son code en non objet, dans les unités delphi, cela arrive, ...
    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
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    J'avoue ne pas bien comprendre ton explication mais mes connaissances en pointer sur a peu près ... nulle

    Merci, je vais laisser comme c'était alors
    Mais quelle bordel !

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    c'est normale la premiere fois tu utilise une methode dites "statique"
    alors que le methode objet sont dite "dynamique"
    leur traitement en memoire et differrente

    en fait la methode dymamique est un pointer
    du fait que la class le contenant est elle meme un pointer

    tu est obliger de te servir de ta methode statique

    interface

    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
    44
    45
    TOfmlArray = class
        ...
      public
        CommandLineHandle : HWND;
        vpConConfHandle : HWND;
        AutoCadOle : variant;
     
        procedure DelphiMsgToAutoCAD(CadHwnd : HWND; Cmd : String);
        procedure StartAutoCadConfigurator;
        procedure HideAutoCadConfigurator;
        procedure InitialiseAutoCAD;
     
        constructor Creation();
     
      end;
     
     function TOfmlArray.GetCommandLineHandle(H:HWND; L: Integer): Bool; stdcall;
    inplementation
     
    function GetCommandLineHandle(H:HWND; Lb:Tlist): Bool; 
    var WText,ClassName      : Array[0..255] of Char;
     
    begin
       GetClassName(H, ClassName, SizeOf(ClassName));
       GetWindowText(H, WText, SizeOf(WText));
       if (WText = 'Headlands') then
       begin
           Result := False;
           lb.AddObject(Tobject(H));
         end
         else Result := True;
    end;
     
    procedure TOfmlArray.InitialiseAutoCAD;
    var
      pConAcadFile, DwgTemplate, ArxPath : String;
    begin
         ...
         lst := Tlist.create;
          EnumChildWindows(AutoCadOle.Application.HWND, @GetCommandLineHandle,integer(lst));
        if lst.count > 0 Then 
          CommandLineHandle := integer(lst.[0])
        Lst.free;
          ...
    end;
    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Hou la ... c'est encore plus compliqué à comprendre

    Merci quand même mais afin de comprendre ce que je code je pense que je vais laisser tel quel et continuer mon apprentissage petit à petit
    Mais quelle bordel !

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    pour compliqué les chose tu peut rendre une méthode statique en methode dynamique

    faites une recherche sur tmethode

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

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

Discussions similaires

  1. [PDO] Utilisation de PDO dans une classe
    Par arthuro45 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 19/04/2012, 13h54
  2. [IDE] Utiliser un composant dans une classe sans IHM
    Par Pascale38 dans le forum C++Builder
    Réponses: 2
    Dernier message: 25/08/2011, 13h16
  3. utiliser des tableaux dans une class
    Par artemis93 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 24/04/2011, 11h45
  4. utilisation d'objet dans une class
    Par turican2 dans le forum Langage
    Réponses: 4
    Dernier message: 19/02/2009, 15h43
  5. Réponses: 10
    Dernier message: 30/11/2008, 21h17

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