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 :

Appeler un OnCreate avec un ButtonClick


Sujet :

Delphi

  1. #1
    Membre habitué Avatar de Simicro
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Mai 2012
    Messages : 136
    Points : 196
    Points
    196
    Par défaut Appeler un OnCreate avec un ButtonClick
    Bonjour,

    J'aurais une question quelque peu triviale.

    Dans une fiche, j'ai un OnCreate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TFiche.FormCreate(Sender: TObject);
     
    begin
      instruction1;
      instruction2;
      ...
      instructionN;
    end;
    qui initialise des variables et des affichages.

    Je souhaiterais appeler les instructions 1...N contenues dans ce OnCreate à partir d'un click sur un bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFiche.Button1Click(Sender: TObject);
    begin
    //Que dois-je écrire ici ?
    end;
    Empiriquement, j'ai essayé :

    TFiche.FormCreate(Sender: TObject);
    Fiche.FormCreate(Sender: TObject);
    FormCreate(Sender: TObject);
    FormCreate();
    FormCreate;

    ... sans résultat.
    Tony
    Hobbyiste débutant Delphi 7

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par Simicro Voir le message
    Empiriquement, j'ai essayé :

    TFiche.FormCreate(Sender: TObject);
    Fiche.FormCreate(Sender: TObject);
    FormCreate(Sender: TObject);
    FormCreate();
    FormCreate;

    ... sans résultat.
    Reprenons le prototype de la méthode FormCreate : TForm.FormCreate(Sender: TObject);Pour l'appeler, il faut donc lui fournir un paramètre de type TObject, on peut donc reprendre le Sender fourni en entrée de la méthode Button1Click ou indiquer que l'on transmet rien, sous entendu un objet non intialisé, cad nil.
    On peut donc écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TFiche.Button1Click(Sender: TObject);
    begin
      FormCreate(Sender);
      // ou bien
      FormCreate(nil);
    end;
    Si le paramètre Sender de FormCreate n'est pas utilisé dans votre code, on peut choisir la 2° solution.

    L'idéal serait toutefois et AMHA d'écrire plutôt vos traitements comme suit (decouplage des codes de traitement et des code de gestion d'événements):
    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
    type
      TFiche = class(TForm)
        //...
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        //...
      private
        procedure MesInstructions;
        //...
      end;
     
      //...
     
    procedure TFiche.FormCreate(Sender: TObject);
    begin
      MesInstructions;
    end;
     
    procedure TFiche.Button1Click(Sender: TObject);
    begin
      MesInstructions;
    end;
     
    procedure TFiche.MesInstructions;
    begin
      instruction1;
      instruction2;
      ...
      instructionN;
    end;
    Philippe.

  3. #3
    Membre habitué Avatar de Simicro
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Mai 2012
    Messages : 136
    Points : 196
    Points
    196
    Par défaut
    Bonjour Philippe,

    Un grand merci pour ta réponse rapide et tes explications.

    Je partage complètement l'objectif d'avoir un code structuré et propre (découplage des codes de traitement et des codes de gestion d'événements) mais j'ai eu un souci qui m'a empêché de le faire dans cet exemple précis.
    Tony
    Hobbyiste débutant Delphi 7

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    J'ajouterais qu'il est tout à fait possible dans l'Inspecteur d'objets de renommer la procédure "FormCreate" en "LancerInstructions" et de faire pointer les deux événements (OnCreate de la fiche et OnClick du bouton) sur cette unique méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TFiche.LancerInstructions(Sender: TObject);
     // déclenché par Fiche.OnCreate et Button1.OnClick
    begin
      instruction1;
      instruction2;
      ...
      instructionN;
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre habitué Avatar de Simicro
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Mai 2012
    Messages : 136
    Points : 196
    Points
    196
    Par défaut
    Merci bien Paul pour cette astuce.
    Tony
    Hobbyiste débutant Delphi 7

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

Discussions similaires

  1. Appeler une URL avec & depuis une ligne de commande
    Par Fritzoune dans le forum Shell et commandes GNU
    Réponses: 14
    Dernier message: 13/02/2006, 14h52
  2. [Compilateur] appel de méthodes avec signature similaire
    Par Monkeyget dans le forum Général Java
    Réponses: 4
    Dernier message: 30/03/2005, 20h14
  3. [ADO/Access] Appel d’une requête avec des paramètres
    Par Taxenna dans le forum Bases de données
    Réponses: 1
    Dernier message: 07/12/2004, 14h58
  4. Appeler une fonction avec "action" ds un
    Par drinkmilk dans le forum ASP
    Réponses: 4
    Dernier message: 20/04/2004, 14h54
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

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