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

Lazarus Pascal Discussion :

Récupérer le nom d'un bouton dans une fenêtre dynamique [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre à l'essai
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Décembre 2021
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2021
    Messages : 11
    Points : 13
    Points
    13
    Par défaut Récupérer le nom d'un bouton dans une fenêtre dynamique
    Bonjour,

    Alors en gros j'ai une fenêtre principale à partir de laquelle je clique sur un bouton qui crée une fenêtre avec plein de composants, y compris donc un bouton. Concernant ce bouton, j'arrive à récupérer le caption, la classe, mais pas son nom ; par contre, si je modifie le nom après je peux voir son nom.

    Dans le code
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    procedure TForm1.fenetre_alimClick(Sender: TObject);
    var
     
        CONSIGNES_ALIM: TButton;
        wndNew : TForm;
     
    begin  
    wndNew:= TForm.Create(Self);
       Try
        wndNew.Caption              := 'MyNewWindow';
        wndNew.KeyPreview           := True;
        wndNew.DoubleBuffered       := True;
        wndNew.SetBounds            ((Screen.WorkAreaWidth -334) Div 2,
                                     (Screen.WorkAreaHeight-246) Div 2,
                                      334, 246);   
     
        CONSIGNES_ALIM            :=TButton.Create(Self);
        CONSIGNES_ALIM.Caption    :='MISE A JOUR';
        CONSIGNES_ALIM.Parent     := wndNew;
        CONSIGNES_ALIM.Width      :=96;
        CONSIGNES_ALIM.Height     :=25;
        CONSIGNES_ALIM.Left       :=199;
        CONSIGNES_ALIM.Top        :=143;
        CONSIGNES_ALIM.Onclick    :=@bouton_fenetreClick;
     
    wndNew.Show;
       Finally
        //wndNew.Release;
        //wndNew:= Nil;
       End;                                
     
    procedure TForm1.bouton_fenetreClick(Sender: TObject);
    begin
     
     
      ShowMessage('*'+Sender.ClassName+'*'+(Sender as TButton).Caption+'*'+(Sender as TCustomButton).Name+'*'); // la je ne vois pas son nom
     
      (Sender as TButton).name:='bouton';
      ShowMessage((Sender as TButton).name); // et la je vois son nom
     
    end;

  2. #2
    Membre éclairé
    Avatar de Chrispi
    Homme Profil pro
    Chargé de missions
    Inscrit en
    Juin 2020
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Chargé de missions
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2020
    Messages : 204
    Points : 885
    Points
    885
    Par défaut
    Bonjour leonick12,

    Je pense que j'ai trouvé la solution.

    Je te propose le code suivant :

    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
    33
    34
    35
    36
    procedure TForm1.fenetre_alimClick(Sender: TObject);
    var
        CONSIGNES_ALIM: TButton;
        wndNew : TForm;
     
    begin
    wndNew:= TForm.Create(Self);
       Try
        wndNew.Caption              := 'MyNewWindow';
        wndNew.KeyPreview           := True;
        wndNew.DoubleBuffered       := True;
        wndNew.SetBounds            ((Screen.WorkAreaWidth -334) Div 2,
                                     (Screen.WorkAreaHeight-246) Div 2,
                                      334, 246);
     
        CONSIGNES_ALIM            :=TButton.Create(Self);
        CONSIGNES_ALIM.Caption    :='MISE A JOUR';
        CONSIGNES_ALIM.Name       :='bouton'; //Voilà ce que j'ai ajouté qui manquait dans ton code
        CONSIGNES_ALIM.Parent     := wndNew;
        CONSIGNES_ALIM.Width      :=96;
        CONSIGNES_ALIM.Height     :=25;
        CONSIGNES_ALIM.Left       :=199;
        CONSIGNES_ALIM.Top        :=143;
        CONSIGNES_ALIM.OnClick    := @bouton_fenetreClick;
     
    wndNew.Show;
       Finally
        //wndNew.Release;
        //wndNew:= Nil;
       End;
    end;
     
    procedure TForm1.bouton_fenetreClick(Sender: TObject);
    begin
      ShowMessage('*'+Sender.ClassName+'*'+(Sender as TButton).Caption+'*'+(Sender as TButton).Name+'*'); //Ici aussi j'ai un peu modifié au niveau du nom
    end;
    En résumé, il semblerait qu'il fallait nommer le bouton dans sa création.

    Espérant que ça te conviendra.

    Bon week-end.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Décembre 2021
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2021
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup en tout cas. j'ai zappé ce detail, mais je pensais que justement CONSIGNES_ALIM serait justement le nom par défaut et je vois qu'apparemment non.

    Par contre, j'ai un autre problème qui a suivi : je crée une form avec un numéro différent à chaque fois, mais le problème c'est quand je ferme et que je recrée il me dit que le nom existe deja, je tiens à préciser que ces numéros vont de 1 a 5 car ces numéros sont associés à des données, donc le but c'est de pouvoir les fermer et les rouvrir. Je pense bien à show et close mais est-ce que ça ne prend pas trop de mémoire ?

    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
    wndNew:= TForm.Create(Self);
       Try
        wndNew.name                 := 'fenetreALIM'+inttostr(numero);
        wndNew.Caption              := titre+inttostr(numero);
        wndNew.KeyPreview           := True;
        wndNew.DoubleBuffered       := True;
        wndNew.SetBounds            ((Screen.WorkAreaWidth -334) Div 2,
                                     (Screen.WorkAreaHeight-246) Div 2,
                                      334, 246);                             
     
    procedure TForm1.tableauON_OFFClick(Sender: TObject); // ici on passe a un clic pour justement ouvrir ou fermer la fenetre , evidemment j'ai pas remis tout le code..
     
    IdFENETREalim:=(FindComponent('fenetreALIM'+inttostr(Acol)) as TForm);
     
        IdFENETREalim.Free; // j'ai essayer cette methode seule : le nom de la form est toujours la
        IdFENETREalim.destroy; // j'ai essayer cette methode seule : le nom de la form est toujours la
        IdFENETREalim.release; // j'ai essayer cette methode seule : le nom de la form est toujours la
        FreeAndNil(IdFENETREalim);  // j'ai essayer cette methode seule : le nom de la form est toujours la

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 856
    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 856
    Points : 11 290
    Points
    11 290
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Quand tu écris
    le nom de la form est toujours là
    que veux-tu dire ?
    Que la fenêtre est toujours recensée comme Composant de son Owner ? Auquel cas, il suffit de la supprimer.
    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 !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Décembre 2021
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2021
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Bonjour,
    Quand tu écris

    que veux-tu dire ?
    Que la fenêtre est toujours recensée comme Composant de son Owner ? Auquel cas, il suffit de la supprimer.
    salut, donc oui effectivement la form est toujours la, c'est une form dynamique donc pour la supprimer c'est plus compliqué justement, j'ai essayer ces commandes deja mais sans succés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IdFENETREalim:=(FindComponent('fenetreALIM'+inttostr(Acol)) as TForm);
    *
        IdFENETREalim.Free; // j'ai essayer cette methode seule : le nom de la form est toujours la
        IdFENETREalim.destroy; // j'ai essayer cette methode seule : le nom de la form est toujours la
        IdFENETREalim.release; // j'ai essayer cette methode seule : le nom de la form est toujours la
        FreeAndNil(IdFENETREalim);  // j'ai essayer cette methode seule : le nom de la form est toujours la
    apres l'idée est simple je creer une form avec un numero a la fin de son nom Ex:GESTION_ALIM1
    je l'affiche avec .show pas .showmodal sinon j'ai pas acces au reste des fenetres sans la quitter
    je l'utilise pour controler mon alim je la ferme pas forcement desuite
    ** apres je souhaite que quand je la ferme que ca efface toutes les donnees de cette form et evidemment que ca efface aussi cette form une fois que je la ferme
    donc je la ferme normalement mais ca efface rien
    et du coup quand je veux reouvrir cette form avec le numero qui lui convient , forcement ca me dit quelle existe deja.

    Voila j'espere que c'est pas trop dur a comprendre

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 856
    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 856
    Points : 11 290
    Points
    11 290
    Billets dans le blog
    6
    Par défaut
    Quand tu crées la nouvelle fiche avec wndNew:= TForm.Create(Self); elle appartient au composant Self.

    C'est-à-dire qu'à la destruction de son Owner, celui-ci se charge de libérer ses composants enfants.

    Dans ton code, quand tu détruis la fiche, tu ne la retires pê pas de la liste de son propriétaire IdFENETREalim.Owner.Components.

    De ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure TForm1.tableauON_OFFClick(Sender: TObject); // ici on passe a un clic pour justement ouvrir ou fermer la fenêtre , évidemment j'ai pas remis tout le code..
    *
    IdFENETREalim:=(FindComponent('fenetreALIM'+inttostr(Acol)) as TForm);
    il apparaît que c'est Self, de type TForm1 qui est le propriétaire de la fiche.
    Pour l'enlever de sa liste, il devrait suffire d'ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RemoveComponent(IdFENETREalim);
    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 !

  7. #7
    Membre à l'essai
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Décembre 2021
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2021
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    merci c'est parfait !!!!

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

Discussions similaires

  1. récupérer la valeur d'un bouton dans une pop up
    Par dragon93 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/07/2009, 17h21
  2. Récupérer le nom d'un fichier dans une variable
    Par JeanDan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/07/2009, 18h12
  3. Comment récupérer le nom de la cellule dans une plage
    Par DubDub dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/03/2009, 12h26
  4. Récupérer le nom du fichier copié dans une cellule
    Par mammmy dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 12/06/2008, 16h31
  5. Récupérer le nom d'un fichier dans une cellule
    Par NicolasJolet dans le forum Excel
    Réponses: 4
    Dernier message: 08/02/2008, 09h47

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