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

Composants VCL Delphi Discussion :

Créer un événement à mon composant


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Points : 50
    Points
    50
    Par défaut Créer un événement à mon composant
    Bonjour à tous,

    Je dois créer un événement à mon composant d'export sous excel qui me permet de dire si je veux que pour chaque ligne exportée, elle soit écrit en rouge ou non.
    N'ayant jamais fait d'événements je ne vois pas comment faire?

    Merci d'avance.

  2. #2
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Schématiquement :
    1/ Dans la partie private de ton composant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FOnMyEvent : TNotifyEvent;
    2/ Dans la partie published :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    property OnMyEvent : TNotifyEvent read FOnMyEvent write FOnMyEvent;
    3/ Dans l'implementation, là où tu veux déclencher ton évt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Assigned (FOnMyEvent) then OnMyEvent (Self);
    Roland

  3. #3
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Points : 50
    Points
    50
    Par défaut
    Merci, mais j'aurai voulu savoir aussi le principe d'un événement et comment je peux lui dire d'écrire en rouge certain champ?

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par natie_49
    Merci, mais j'aurai voulu savoir aussi le principe d'un événement et comment je peux lui dire d'écrire en rouge certain champ?
    Un événement ne fait rien en soi, à part se produire. C'est l'association d'un événement à une méthode qui te permet d'effectuer un traitement.

    voir :
    http://chgi.developpez.com/windows/winmain/
    http://tcharles.developpez.com/simul/?delphi=1 ( Article en partie exploitable)

    Quel est le composant que tu utilises ?
    On connait le traitement, affichage en rouge, mais qu'est-ce qui doit provoquer cet événement dans ton cas ?

  5. #5
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Un évènement Delphi est tout bêtement une propriété d'un composant, de type procédure, c'est-à-dire qu'il permet à l'utilisateur du composant (le développeur) de définir ce qu'il faut faire lorsque cett "propriété" est appelée.
    NB : Pour autant que je le comprenne, le nom d'"événement" vient de ce que les "événements" basiques des composants (OnClick, OnMouseDown...) sont déclenchés lorsque, en réponse à une action de l'utilisateur, un message Windows est émis.

    Par ex. tu remplis une feuille Excel et tu veux formater suivant la valeur, sans utiliser d'événement, ça donne schématiquement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i := 0 to maxI do
      for j := 0 to maxY to
      begin
         Cells (i, j) := ....
         FormatCell (i, j);
      end;
    avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure FormatCell (Row, Col : Integer);
    begin
      if Cells (i,j) = ... then
    ....
    end;
    En utilisant un évenement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     type TFormatCellEvent = procedure (Sender : TObject; Col, Row : Integer) of object;
    dans ta déclaration de composant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private
    FOnWriteCell : TFormatCell;
     
    ....
    published
    property OnWriteCell : TFormatCell read FOnWriteCell wrtie FOnWriteCell ;
    ....
    et dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i := 0 to maxI do
      for j := 0 to maxY to
      begin
         Cells (i, j) := ....
         if Assigned FOnWriteCell then OnWriteCell (Self, i, j);
      end;
    Et c'est dans ton gestionnaire d'événement que tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Cells (Col, Row) = ... then ...

    Espérant avoir été suffisamment clair

    Roland

  6. #6
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Points : 50
    Points
    50
    Par défaut
    J'ai du mal à tout comprendre dsl, pour le moment j'ai fait ce qui correspondait au message d'hier, mais la je voi pas du tout où mettre tous ça...

  7. #7
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut Re: Créer un événement à mon composant
    Citation Envoyé par natie_49
    Je dois créer un événement à mon composant d'export
    Avant d'aller plus loin, ôte-moi un doute. C'est bien un composant que tu as créé ? Parce que ce que je t'ai dit s'applique à ce cas exclusivement.

    Roland

  8. #8
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Points : 50
    Points
    50
    Par défaut
    Oui bien sûr c'est bien un composant que j'ai créé!!

  9. #9
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Bon alors, allons-y !

    Dans l'unité de création de ton composant, avant la déclaration du composant, tu déclares un nouveau type d'événement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     type TCellEvent = procedure (Sender : TObject; Col, Row : Integer) of object;
    A l'intérieur de ta déclaration de composant, dans la partie published, tu déclare ta propriété-événement, et dans la partie private le champ qui va stocker sa valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private
    FOnWriteCell : TCellEvent; // excuse, il y avait une erreur dans mon code
     
    ....
    published
    property OnWriteCell : TCellEvent read FOnWriteCell wrtie FOnWriteCell ;
    Dans la partie implémentation, tu dois bien avoir une procédure qui réalise l'importation (moi, je mets ça dans une procédure Execute, de manière à lancer l'Export par Donc dans cette procédure au moment où tu veux déclencher ton événement, tu insères la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Assigned FOnWriteCell then OnWriteCell (Self, i, j);
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i := 0 to maxI do
      for j := 0 to maxY to
      begin
         Cells (i, j) := ....
         if Assigned FOnWriteCell then OnWriteCell (Self, i, j);
      end;
    Fini pour ton composant. tu le compiles et tu reviens au projet dans lequel tu utilises ton composant. Maintenant, dans l'inspecteur d'objet, tu as pour ton composant un événement OnWriteCell, pour lequel tu peux générer un gestionnaire de type procedure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TForm1 .MonExportWriteCell(Sender : TObject; Col, Row : Integer);
    , où tu vas mettre ton code de formatage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Cells (Col, Row) = ... then ...
    Enocre une fois, l'événement n'est utile que si les instructions de formatage varient d'un projet à l'autre. Si elles sont fixes, mets-les simplement dans le code de ton composant.

    Bon courage

    Roland

  10. #10
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Points : 50
    Points
    50
    Par défaut
    Je commence à comprendre le principe des événements mais je vois toujours pas comment lui dire d'écrire en rouge si le résultat est <0 par exemple ?

  11. #11
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Ca va un peu dépendre des mécanismes de ton composant, mais en utilisant OLE, ça doit donner à peu près ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if Sheet .Cells (Col, Row) .Value < 0
      then Sheet .Cells (Col, Row) .Font. Color := RGB (255,0,0);
    A tester et vérifier avec Aide Microsoft Visual Basic d'Excel.
    Sachant que ci-dessus Sheet est la variable qui désigne la feuille en cours dans Excel (à remplacer donc par le nom que tu utilises)

    Il faudrait sans doute rajouter un test pour savoir si la valeur est bien un nombre.

    Roland

  12. #12
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Points : 50
    Points
    50
    Par défaut
    Et je dois mettre dans mon projet ou dans mon composant car ces variables sont déclarées dans mon composant donc si je les utilise dans mon projet, il ne les reconnait pas.

  13. #13
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Au temps pour moi, je n'y avais pas pensé

    ici il s'agit simplement de Sheet, donc :

    1ère solution : tu passes Sheet en paramètre de ton événement et tu peux l'utiliser dans ton gestionnaire

    2ème solution : tu changes ta variable en propriété public de ton composant, et tout le code de ton programme peut y accéder.

    3ème solution : tu laisses tomber l'événement, et tu traites tout en interne dans ton composant, éventuellement en permettant un "paramétrage" par l'intermédiaire de propriétés "Conditions et couleur de formatage". Ca demande un peu de boulot, mais c'est instructif

    Roland

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/11/2007, 11h52
  2. [List] Créer mon composant
    Par soad dans le forum Composants
    Réponses: 3
    Dernier message: 02/12/2005, 08h00
  3. Créer des événements
    Par thebeb dans le forum MFC
    Réponses: 8
    Dernier message: 04/02/2005, 16h45
  4. Créer et initialiser un composant TStatusBar :help:
    Par James_ dans le forum C++Builder
    Réponses: 10
    Dernier message: 21/08/2003, 08h52
  5. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10

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