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 :

Transférer le code d'un évènement dans une unité autre que celle de la fiche


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 126
    Par défaut Transférer le code d'un évènement dans une unité autre que celle de la fiche
    Exemple:

    J'ai une fiche avec beaucoup de composants et leurs évènements associés.
    L'unité de cette fiche finit par prendre une taille énorme.

    J'aimerais par exemple, mettre tous les codes correspondants aux TToolBar dans une autre unité dédiée aux TToolBar. De même pour tous les T...Button.

    Comment dois-je procéder? Merci

  2. #2
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Et bien tu rajoutes une (des) unité(s) (Fichiers/nouveau/Unité), tu déclare cette unité dans les uses de ton unité actuelle et dans cette nouvelle unité tu crées des functions/Procedures que tu lances de ton unité actuelle.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 141
    Par défaut
    Salut,

    Je pense que tu veux dire : une fiche crée avec l'éditeur de fiches.

    Delphi propose un moyen de modulariser les fiches avec son système de Frales (ou cadres) : tu peux créer un cadre dans une unité -qui contient des boutons, des champs,... des composants, quoi, avec leurs évènements- puis le coller tel quel dans une fiche de ton projet.

    Sinon, la gestion des dfm par Delphi exige que les évènements que tu déclares dans l'éditeur de fiches soient des méthodes publiées de ta fiche.
    Si tu veux délocaliser tes évènements, il va falloir que tu court-circuites un peu l'IDE :
    -tu ne déclares plus les évènements de tes boutons/toolbars/... depuis léditeur de fiches
    -tu rajoute à ta Form un FormCreate, qui affecte avec du code les é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
     
    //dans l'unité EventsBoutons :
    type
      TEvtsBoutons = class
        procedure BoutonOkClick( Sender : TObject );
        procedure BoutonCancelClick( Sender : TObject );
        procedure BoutonRougeMouseOver( Sender : TObject; ... ); //signature de OnMouseOver
        ...
     
    //dans l'unité de ta fiche :
    procedure FormCreate( Sender : TObject );
    begin
      BoutonOk.OnClick := TEvstBoutons.BoutonOkClick;
      BoutonCancel.OnClick := TEvtsBoutons.BoutonCancelClick;
      BoutonRouge.OnMouseOver := TEvtsBoutons.BoutonRougeMouseover;
      ...
    end
    Entre les deux maux à maintenir, choisit ton poison...

    Plus sérieusement, je me suis retrouvé dans un cas similaire, j'ai fait l'effort de découper proprement ma Fiche en Frames séparées, et le résultat était plutôt probant.
    Je ne suis pas un grand fan du système de .dfm de Delphi, mais à mon avis le meilleur moyen de l'exploiter est de passer par ce système de Frames.

    Dis-nous si tu as besoin de plus de détails,

  4. #4
    Membre émérite Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Par défaut
    Ou plus simplement un datamodule avec un ActionList. Tu associe à chaque bouton de la toolbar une action. Ca soulageras au moins des evènements OnClick

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 126
    Par défaut
    Merci beaucoup pour vos suggestions, celle de LeGec me semble interessante et me convenir.

    Je vais étudier cela de près et dès que j'ai abouti , je vous donne de mes nouvelles.

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 126
    Par défaut
    Je viens de faire un essai avec la 2ème méthode de LeGec et j'ai un petit problème avec le code proposé:


    (ligne *) --> Erreur: Types incompatibles 'TnotifyEvent' et 'Procedure'

    (ligne **) si modification en: TEvtsBoutons = class(TNotifyEvent) --> Erreur: Type Class requis

    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
    // fiche principale
    //
    uses EditorEvent;
    ...
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ToolButton13.OnClick := TEvtsBoutons.ToolButton13Click;   //(*)
      ...
     
     
    // unité annexe
    //
    unit EditorEvent;
     
    interface
    uses Dialogs, Classes;
     
    type
      TEvtsBoutons = class  // (**) 
        procedure ToolButton13Click(Sender: TObject);
     
      private
      public
      end;
     
    implementation
     
    procedure TEvtsBoutons.ToolButton13Click(Sender: TObject);
    begin
      showmessage('c''est bon');
    end; 
    end.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/04/2010, 13h58
  2. Réponses: 1
    Dernier message: 01/07/2009, 17h41
  3. [Dates] Traiter une date autre que celle du jour
    Par malkie dans le forum Langage
    Réponses: 6
    Dernier message: 02/02/2008, 09h04
  4. "Save as" dans une location autre que le fichier où est enregistré le code
    Par Victoire 85 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/06/2007, 13h16
  5. Réponses: 1
    Dernier message: 15/08/2005, 19h38

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