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 :

Ecrire un gestionnaire d'événement sans l'inspecteur d'objet


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Ecrire un gestionnaire d'événement sans l'inspecteur d'objet
    Bonjour,

    Comment écrire un gestionnaire d'événement d'un objet/composant pas encore créé, et dont l'inspecteur d'objet n'est pas disponible?

    Lorsqu'un composant est importé sur une fiche, on accède à son gestionnaire d'événement via l'inspecteur d'objet. Mais lorsque ce composant n'existe pas encore au moment de la conception, comment peut-on lui écrire ce gestionnaire d'événement?

    Merci d'avance pour vos éventuelles réponses,

    Laurent

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    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 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Voir Ici

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Voir Ici
    Merci pour cette réponse.
    En fait, c'est justement l'affectation dynamique d'une procedure à l'événement qui ne marche pas chez moi :

    MyControl.OnClick := Form1.MyProcedure ;
    me génère une erreur (types incompatibles TMyControl et TObject).

    idem avec l'exemple que tu m'as donné.

    Toutefois, dans mon projet, j'ai contourné le problème, mais ça m'intéresse d'en savoir plus pour la prochaine fois que ça se présente...

    Cordialement,

    Laurent

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    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 586
    Points : 25 262
    Points
    25 262
    Par défaut
    déjà ton erreur ne semble même pas cohérente, tu devrait avoir "types incompatibles TNotifyEvent et TObject" par exemple ...

    Impossible de t'aider sans code (pas besoin de tout, juste l'essentiel) ...

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    déjà ton erreur ne semble même pas cohérente, tu devrait avoir "types incompatibles TNotifyEvent et TObject" par exemple ...

    Impossible de t'aider sans code (pas besoin de tout, juste l'essentiel) ...
    Du coup j'ai tout remanié pour contourner le problème... J'ai effectivement dû me tromper entre les types incompatibles, je ne me souviens plus.

    Mais j'arrive au même problème avec simplement un TButton sur une fiche, et en essayant d'affecter une procedure à l'événement OnClick du TButton sans passer par l'inspecteur d'objet :

    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
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormCreate(Sender: TObject) ;
     
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        procedure showclicked ;
      end ;
     
    var
      Form1: TForm1 ;
     
    implementation
     
    {$R *.dfm}
     
    { TForm1 }
     
    procedure TForm1.showclicked ;
    begin
      showmessage('clicked') ;
    end ;
     
    procedure TForm1.FormCreate(Sender: TObject) ;
    begin
      Button1.OnClick := Form1.showclicked ;
    end ;
     
    end.
    La ligne Button1.OnClick := Form1.showclicked ; génère une erreur. Ca ressemblait pourtant à ça ?

    Là, je pouvais passer par l'inspecteur d'objet, évidemment, mais si le TButton n'existe pas encore durant la conception, comment fait-on pour affecter une procedure à son événement OnClick sans passer par l'inspecteur d'objet?

    Cordialement,

    Laurent

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public
        { Déclarations publiques }
        procedure showclicked(Sender: TObject);
      end ;
    ShowClicked doit être une procédure de type TNotifyEvent.

    Dans le Create de la form, ne fais pas référence à Form1 mais plutôt à self.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.FormCreate(Sender: TObject) ;
    begin
      Button1.OnClick := Self.showclicked ;
    // ou plus simplement
      Button1.OnClick := showclicked ;
    end ;

    @+

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    ShowClicked doit être une procédure de type TNotifyEvent.
    OK, je commence à saisir le truc. Je vais essayer tout ça.
    Merci beaucoup,

    Laurent

Discussions similaires

  1. Publier des évènements dans l'inspecteur d'objet
    Par khaled-benloucif dans le forum Langage
    Réponses: 16
    Dernier message: 03/04/2009, 20h50
  2. Ecrire dans un fichier txt sans en effacer le contenu
    Par cari dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 14/12/2005, 18h11
  3. Gestionnaire d'événements pour la souris en assembleur
    Par bassim dans le forum Assembleur
    Réponses: 2
    Dernier message: 09/12/2005, 23h45
  4. [VBA] Gestionnaire d'évènement commun
    Par Neilos dans le forum Access
    Réponses: 11
    Dernier message: 14/06/2005, 11h18
  5. Perte de gestionnaire d'événements dans une fenêtre
    Par Benjamin GAGNEUX dans le forum Composants VCL
    Réponses: 15
    Dernier message: 23/08/2004, 20h14

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