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 :

Événement de composant à l’intérieur de DLL


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 53
    Points : 40
    Points
    40
    Par défaut Événement de composant à l’intérieur de DLL
    Comment on fait pour enclencher l’événement d'un TButton.OnClick à l’intérieur de library DLL?

    Dans le library DLL, ce code permet d'ajouter un TButton sur une page de TPageControl de l'application HOST.
    Ce code marche sans problème sauf le click d'événement du bouton ne marche pas. Il n'y a pas d'événement déclenché.

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    library Plugin;
     
    uses
      System.SysUtils, Forms,
      System.Classes, Vcl.ExtCtrls, StdCtrls, Vcl.ComCtrls, dialogs;
     
    {$R *.res}
     
    Type
      TEventHandlers = class
      Private
         B: TButton;
         procedure OnClick(Sender: TObject) ;
      Public
        Constructor Create(TS: TTabSheet);
        Destructor Destroy; Override;
      end;
     
    Var E: TEventHandlers;
     
    Constructor TEventHandlers.Create(TS: TTabSheet);
    begin
      B:= TButton.Create(TS);
      B.OnClick:= OnClick;
      B.ParentWindow:= TS.Handle;
      B.Caption:= 'OK';
      B.Top:= 50; B.Left:= 50;
    end;
     
    Destructor TEventHandlers.Destroy;
    begin
      Inherited Destroy;
      B.Free;
    end;
     
    Procedure TEventHandlers.OnClick;
    Begin
      ShowMessage('Dll');
    End;
     
    Procedure PluginButton(TS: TTabSheet); stdCall;
    Begin
      TS.Caption:= 'New TAB';
      E:= TEventHandlers.Create(TS);
    End;
     
    Procedure FreeButton; stdCall;
    Begin
      if Assigned(E) then E.Free;
    End;
     
    exports PluginButton, FreeButton;
     
    begin
     
    end.

  2. #2
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    Hello,

    tu passes bien ton TabSheet ? Et comment ?
    Constructor TEventHandlers.Create(TS: TTabSheet);

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 691
    Points : 13 121
    Points
    13 121
    Par défaut
    Parce que les messages ne sont pas traités par la bonne boucle de messages. En déclarant Forms, tu crées une deuxième instance de TApplication propre à la dll.
    Il faut par conséquent lier cette instance à celle de l'exe en assignant Application.Handle (dll) égal à Application.Handle (exe).

    Il faut exporter une procédure supplémentaire pour cette initialisation.

    Mise à part, ce code n'est pas très propre...

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    ok je vais essaie ca et je vous tient au courant.
    merci.

Discussions similaires

  1. événement sur composants dynamiques
    Par kirua2150 dans le forum Delphi
    Réponses: 5
    Dernier message: 02/05/2007, 03h33
  2. [onDblClick] exécuter l'évènement du composant parent
    Par xenos dans le forum Composants VCL
    Réponses: 3
    Dernier message: 15/05/2006, 13h49
  3. Réponses: 3
    Dernier message: 01/08/2005, 21h32
  4. Créer un événement à mon composant
    Par natie_49 dans le forum Composants VCL
    Réponses: 12
    Dernier message: 22/06/2005, 11h01

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