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 :

objets différents déclenchant la même procédure


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 54
    Points : 37
    Points
    37
    Par défaut objets différents déclenchant la même procédure
    Bonjour tout le monde,
    Voilà, tout est dit. Quand je faisais du VB.Net il suffisait de rajouter <composant>.<événement> après la clause Handles. Mais après moultes recherches en Delphi, je ne trouve pas
    Merci d'avances
    Bonne soirée

  2. #2
    Membre expert
    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
    Points : 3 575
    Points
    3 575
    Par défaut
    C'est pas très précis, mais tu peux affecter dynamiquement les évènements comme ceci:

    Si tu As

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm.BitBtn1Click(Sender:TObject);
    begin
      //
    end;
    tu peux affecter a un autre bouton de cette manière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    begin
    ...
      UnAutreBouton.OnClick := BitBtn1Click;
    En fait tu peux faire cela, avec une méthode de ton cru, pas forcément défini avec le 1er bouton...
    Le principal étant que la méthode affecté soit exactement du même prototype que les méthodes affectées habituellement aux évènements concernés

  3. #3
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Facile .

    En mode désign (avant de compiler) tu peux aller dans l'onglet Événements de l'inspecteur d'objets et sélectionner l'événement désiré dans la liste à droite de l'événement qui doit être géré.

    Si tu veux le faire en code, il suffit d'indiquer à la propriété événement de l'objet quelle méthode doit être exécutée lors du soulèvement de l'événement.

    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
      TForm1 = class(TForm)
        btn1: TButton;
        btn2: TButton;
        procedure btn1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.btn1Click(Sender: TObject);
    begin
       Showmessage('Click de bouton!');
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
       btn2.OnClick := btn1Click; //On assigne l'événement OnClick de btn1 à btn2
    end;
    Bon dev!

    [EDIT]
    TicTacToe a été plus rapide

  4. #4
    Membre expert
    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
    Points : 3 575
    Points
    3 575
    Par défaut
    slimjoe qq sec on dirait

    J'ajouterai, que tu n'es pas obligé de faire cela par code, mais que l'on peut tout a fait "repiquer" la méthode Click du bouton 1 et l'affecter dans l'inspecteur d'objets/ onglet évènement sur la méthode 'OnClick' du bouton 2.
    -> La liste déroulante te présentera toute les méthodes candidates et compatible pour ton bouton2 -> donc la méthode BitBtnClick du bouton1.

  5. #5
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    Attention toutefois, il faut que les types d'évènements soient identiques.
    Exemple:
    Tu ne peux pas assigner un OnClick (de type TNotifyEvent) à un OnKeyPress (de type TKeyPressEvent).

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 54
    Points : 37
    Points
    37
    Par défaut
    Merci bcp à vous 3 d'avoir répondu si vite!
    C'est ce que je voulais savoir, merci.
    Mais en fait, je fais un morpion donc j'ai 9 Images et dès que je clique sur une des images je voudrais appeler la procédure événementielle qui met une croix ou un rond.
    Mais le nom de l'image est en dur dans le code et je vois pas comment faire...SI vous avez une idée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TformClient.Image1Click(Sender: TObject);
    begin
       Image1.Picture.LoadFromFile('croix.jpg');
    end;

  7. #7
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par eultartuffe
    Mais le nom de l'image est en dur dans le code et je vois pas comment faire...
    Je ne comprends pas bien pourquoi ça pose un problème...

  8. #8
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par eultartuffe
    Merci bcp à vous 3 d'avoir répondu si vite!
    ou est le 3éme?? je vois que 2 person

    Citation Envoyé par eultartuffe
    Mais en fait, je fais un morpion
    c'est qoi morpion ??

    Citation Envoyé par eultartuffe
    Mais le nom de l'image est en dur dans le code et je vois pas comment
    chaque objet à une propriété "tag", aussi pour tes 2 images
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    const
       MesImage:array[1..2] of string=('image1.bmp','image2.bmp');

  9. #9
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par edam
    ou est le 3éme?? je vois que 2 person
    C'est moi: le modo qui restaure ses posts plus vite que son ombre
    Citation Envoyé par edam
    c'est qoi morpion ??
    http://fr.wikipedia.org/wiki/Morpion_%28jeu%29


    Sinon, pour en revenir au problème initial, voila ce que je ferais:
    Afficher un TImage avec les 4 traits du plateau. Avec l'évènement OnMouseDown, tu récupères les coordonnées du click et avec ces coordonnées, tu calcules la case cliquée.
    Un tableau de 3x3 où chaque case aurait 3 états: vide, croix et rond. Avec la case cliquée, tu renseignes correctement ce tableau.
    Dans le OnPaint du TImage, avec le tableau, tu dessines ce qu'il faut:
    rien (c'est le plus facile
    une croix (MoveTo et LineTo)
    un rond (DrawEllipse)

    Et voila

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 54
    Points : 37
    Points
    37
    Par défaut
    OK merci j'aurais pas penser à ça...C'est pas bête du tout!
    Mais par contre je vois pas comment je peux calculer quelle case on sélectionne... (Je suis débutant j'avais oublié de le signaler )
    A moins que dans le tableau je renseigne la position de la case sur la TImage?

  11. #11
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par eultartuffe
    OK merci j'aurais pas penser à ça...C'est pas bête du tout!
    Merci
    Citation Envoyé par eultartuffe
    Mais par contre je vois pas comment je peux calculer quelle case on sélectionne... (Je suis débutant j'avais oublié de le signaler )
    Ben c'est assez simple:
    ONMouseDown renvoit les coordonnées X et Y de la souris au moment du click. Ensuite, il te suffit de tester si le curseur est dans telle ou telle case. Cela pourrait donner ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      if X < 10 then
        //Première colonne
      else
      if (X > 10) and (X < 20) then
        //Seconde colonne
      else
        //Troisième colonne
    Dans le cas où les lignes verticales du plateau sont à X=10 et X=20 sur l'image. Ensuite, tu fais pareil pour la ligne et tu as la case cliquée

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 54
    Points : 37
    Points
    37
    Par défaut
    Daccord merci bcp je vais essayer ça

  13. #13
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par eultartuffe
    Daccord merci bcp je vais essayer ça
    Si ton problème est résolu, clique sur Merci.

Discussions similaires

  1. Réponses: 9
    Dernier message: 24/05/2010, 02h05
  2. créer des handle de nom différents avec la même procédure
    Par yannickrohel dans le forum Windows
    Réponses: 4
    Dernier message: 11/02/2006, 13h59
  3. objets différents dans un même vector...
    Par Empty_body dans le forum Langage
    Réponses: 7
    Dernier message: 07/01/2006, 18h20
  4. [VBA-W] Executer plusieurs fois la même procédure
    Par delamarque dans le forum VBA Word
    Réponses: 3
    Dernier message: 05/12/2005, 13h39
  5. Réponses: 3
    Dernier message: 15/04/2004, 08h44

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