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 :

événement sur composants dynamiques


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 74
    Points : 46
    Points
    46
    Par défaut événement sur composants dynamiques
    Bonjour à tous,

    Je lie dans mon programme plusieurs composants que je crée dynamiquement à un meme événement et j'aimerais connaitre la meilleure méthode pour récupérer le composant déclencheur. Pour être plus précis :
    - je crée mes composants dynamyques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       // FTabBtns est un tableau de button, je leur donne un nom unique
        FTabBtns[wi] := TJvXPButton.Create(self);
        FTabBtns[wi].Name := 'btn'+inttostr(wcle);
        FTabBtns[wi].OnClick := actionsClick;
    - interception de l'événement onclick (qui est aussi lié avec un composant non dynamique, btnenregistrer)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TfrmDonneesClient.actionsClick(Sender: TObject);
    begin
    if(sender = btnEnregistrer) then begin
       //traitement
      end
    else begin
    ...
    Dans les ..., j'aimerais pouvoir récupérer le bouton déclencheur de l'événement et notamment la clé qu'il possède dans son nom (un entier)

    J'espere que j'ai été assez clair c'est pas facile à expliquer

  2. #2
    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
    Je sais pas si ça répond à ta question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TfrmDonneesClient.actionsClick(Sender: TObject);
    begin
      if Sender = btnEnregistrer then 
      begin
        //traitement
      end
      else if Sender is TJvXPButton then 
      begin
        with Sender as TJvXPButton do
           Showmessage(Name); //Mettre traitement ici :)
      end;
    Bon dev !
    -Slimjoe

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 865
    Points : 11 334
    Points
    11 334
    Billets dans le blog
    6
    Par défaut
    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
    procedure TfrmDonneesClient.actionsClick(Sender: TObject);
    var
      wcle: integer;
      s: string;
    begin
      if sender is TJvXPButton
        then s:=TJvXPButton(Sender).Name
        else s:='btn-1';
      wcle:=StrToInt(Copy(s, 4, Length(s)-3));
      case wcle of
        btnEnregistrer:  begin
                               //traitement
                              end;
      else begin ... end;
      end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 74
    Points : 46
    Points
    46
    Par défaut
    ouai ca m'aide mais comment récupérer le nombre contenu dans le Name?

    J'ai pas trop le choix je pense, il faut que je fasse une fonction qui récupère
    les derniers caractères du nom.
    Yaurait-pas une méthode plus simple me permettant de stocker ma clef à la création du composant pour la récupérer facilement ensuite?

    ah j'avais pas vu le dernier message. Je vais utiliser le découpage de la chaine pour récupérer la clef.

    merci à vous deux

  5. #5
    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
    Citation Envoyé par kirua2150
    Yaurait-pas une méthode plus simple me permettant de stocker ma clef à la création du composant pour la récupérer facilement ensuite?

    merci à vous deux
    Utilise la propriété Tag de ton bouton
    -Slimjoe

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Salut,

    en uses tu ajoutes la librarie : StrUtils
    en variable globale tu ajoutes : var ObjNameF2,ObjNumF2:string;

    puis voici un exemple de procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm2.mod_civ(ObjSender:TObject);//Modification d'un champ DB
    begin
      ObjNameF2:=TSpeedButton(ObjSender).Name;//Récupération du nom du bouton
      ObjNumF2:=MidStr(ObjNameF2,11,4);//Extraction du numéro du bouton, le numéro du bouton commence au 11ème caractère du nom du bouton
      conn1.ADOQuery1.SQL.Clear;
      conn1.ADOQuery1.SQL.Add('SELECT * FROM table WHERE id='+ObjNumF2);//Utilisation du numéro pour connaitre l'id de l'enregistrement à modifier
      conn1.ADOQuery1.Open;
      edit1.Text:=conn1.ADOQuery1.FieldValues['texte'];//Affichage du texte à modifier
    end;
    Perso à la création de mes boutons je leur affecte l'id de l'enregistrement DB auquel ils correspondent...

    J'espère que cela vous aidera.

    A bientôt, Couiss.

Discussions similaires

  1. Forcer un événement sur composant Tree
    Par supernova dans le forum Flex
    Réponses: 4
    Dernier message: 04/08/2009, 14h24
  2. gestion d'un evenement sur composant dynamique
    Par darkman13130 dans le forum C++Builder
    Réponses: 2
    Dernier message: 19/03/2009, 15h16
  3. gestion des évènements sur objets dynamiques
    Par boss_gama dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/03/2009, 11h50
  4. Evènement sur composant dynamique
    Par Sakapatate dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 22/04/2007, 11h47
  5. Événements sur composants créés dynamiquement
    Par systeme1 dans le forum Delphi
    Réponses: 4
    Dernier message: 11/02/2007, 16h08

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