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 :

Composant et methode click...


Sujet :

Composants VCL Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Par défaut Composant et methode click...
    Bonjour,

    Je suis en train de faire un composant dérivé de TShape et je voudrais lui ajouter la méthode Click (TShape ne l'a pas)de façon à pouvoir faire dans mon code:

    et pouvoir faire un traitement lors de ce click.

    J'ai écrit :
    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
     
    unit ShapePiano;
      interface
     
      uses  Windows, WinProcs,Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
     
     
    type
      TShapePiano = class(TGraphicControl)
    public
       procedure Click; override;
       .....
    implementation
    ...
    procedure TShapePiano.Click;
    begin
      inherited Click;
      traitementDuClick;
    end;
    la compilation semble ok (à part un avertissement: la methode 'click' masque la methode virtuelle du type de base TControl) mais dans mon prog. je n'arrive pas à écrire le code ShapePiano1.click, il m'affiche un message:
    Violation d'accès à l'@ 00A9ABA dans le module dcc70.dll....



    Merci de votre aide

  2. #2
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    il doit manquer le parametre Sender à ta nouvelle définition
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  3. #3
    Membre chevronné
    Avatar de Philippe Gormand
    Inscrit en
    Mars 2002
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 330
    Par défaut OnClick
    Bonjour.

    Baucoup plus simple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    type 
      TShapePiano = class(TGraphicControl) 
    public 
         ..... 
    published
    property OnClick;
    property OnDbClick;
    end;

    Je l'ai fait por un composant déscendant de TShape.

    Ca marche, garanti, TShape étant un descendant de TGraphicControl.

    A+

  4. #4
    Membre chevronné
    Avatar de Philippe Gormand
    Inscrit en
    Mars 2002
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 330
    Par défaut precision
    Je disais que je l'aifait avec un descendant de TShape. Je me suis trompé.
    J'ai fait un TShapeText descendat de TGraphicControl.

    Fais comme je t'ai montré, ça marche sans problème.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Par défaut
    Pour Philippe:
    Le OnClick gère l'évenement quand l'utilisateur clique le composant mais ne crée pas la méthode !

    Ce que je veux c'est pouvoir envoyer ce click par code.

    par ex. pour un bouton, on peut faire Button1.click ;

    mais pour Shape1 il n'y a pas...

    Merci quand même

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Par défaut
    Citation Envoyé par TicTacToe
    il doit manquer le parametre Sender à ta nouvelle définition
    Peux-tu préciser s'il te plait ?

    merci

  7. #7
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    J'ai été trop vite j'ai dit une anerie.

    En fait, click se contente d'appeler la méthode OnClick si elle est affectée.

    or pour les TShape, il n'y a pas d'evt OnClick dans les TGrphicControl.

    Donc à mon avis, il faut jouer avec OnMouseDown plutot.

    sinon, le click est redefini (et c'est pour ca que le compilo rale à mon avis).

    peut-être re-introduce pour signaler que c'est une redefinition. mais l'évt de OnClick ne pourra pas être lié en amont..

    sinon sans se servir de 'Click'
    Donc 1. faire une métode MouseDown(...), 2. la lier à l'evt OnMouseDown 3. appeler MouseDown(...) qd tu en as besoin
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Par défaut
    Bon j'ai trouvé TicTacToe. Ton "annerie" m'a mise sur la piste.

    Voilà ce que j'ai fait:
    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
     
    .....
      TShapePiano = class(TGraphicControl)
    published
        property OnClick;
    public
       constructor Create(AOwner: TComponent); override;
       procedure Click(Sender: TObject) ; 
    ......
    implementation
    ......
    procedure TShapePiano.Click(Sender: TObject);
    Begin
      <<traitement supplémentaires>>;
      Inherited Click;
    end;
    et dans mon prog, j'obtiens bien la methode :
    ShapePiano1.click(Sender:TObject);

    je mets "self" comme Sender et le tour est joué !

    Merci

  9. #9
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    tant mieux

    c'est bien comme ca que je le voyais, mais je suis étonné que le compilo rale pas.

    mais c'est surtout le published sur OnClick qui fait que ca marche

    selon les sources de boutons, je pense qu'il vaudrait mieux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public
      procedure Click; override; // rendre cette méthode visible, elle existe en amont
     
    published
      property OnClick; // publié l'évt OnClick, idem il existe déjà
    je suis pas sur qu'avec le code que tu as posté, le Sender soit nécessaire du coup !
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Par défaut
    Citation Envoyé par TicTacToe
    tant mieux

    c'est bien comme ca que je le voyais, mais je suis étonné que le compilo rale pas.

    mais c'est surtout le published sur OnClick qui fait que ca marche

    selon les sources de boutons, je pense qu'il vaudrait mieux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public
      procedure Click; override; // rendre cette méthode visible, elle existe en amont
     
    published
      property OnClick; // publié l'évt OnClick, idem il existe déjà
    je suis pas sur qu'avec le code que tu as posté, le Sender soit nécessaire du coup !
    Ben le compilo me met un avertissement en effet...mais ça marche.
    Je vais néanmoins tester ta variante.

    Ca marche !!!!

    Merci

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

Discussions similaires

  1. Methode Click() Chrome/IE ?!
    Par Pymento dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/09/2011, 18h48
  2. Comment ajouter des composants par un click ?
    Par haraelendil dans le forum Composants
    Réponses: 11
    Dernier message: 18/08/2008, 18h49
  3. Utilisation methode click()
    Par saadnames dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 11/06/2008, 15h17
  4. [D6] Choix composant ou methode pour mise en page
    Par dridri86 dans le forum Composants VCL
    Réponses: 9
    Dernier message: 23/12/2006, 21h09
  5. [c#] Evenement click droit - methode ???
    Par Arvulis dans le forum Windows Forms
    Réponses: 3
    Dernier message: 22/05/2006, 07h46

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