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

Langage Delphi Discussion :

Détruire un bouton sur lequel on vient de cliquer


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 74
    Points : 48
    Points
    48
    Par défaut Détruire un bouton sur lequel on vient de cliquer
    Bonjour,
    mon problème est : Comment faire pour détruire un bouton lorsque que l'on clique sur ce meme bouton(bitbtn)? (en delphi)

    J'ai essayé:
    BitBtn.free;
    BitBtn := nil;

    Mais cela ne marche pas pour le bouton lui-meme

    J'espère que vous pourrez m'aider

    Merci et à bientot

  2. #2
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    1) Le clic de ton bouton active un TTimer,
    2) Dans L'évènement OnTimer, tu détruis le bouton

    Bidouilleuse Delphi

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 74
    Points : 48
    Points
    48
    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
    16
    17
    //*********creation bouton OK 2*************
    procedure TParametre.CreerBoutonOK2(Sender: TObject);
    begin
     BitBtnOK2 := TBitBtn.Create(GroupBoxNbpage);
     BitBtnOK2.Parent := GroupBoxNbpage;
     BitBtnOK2.SetBounds(150,100,50,25);
     BitBtnOK2.Caption := 'OK';
     BitBtnOK2.OnClick := BoutonOK2Click;
    end;
     
     
    //***************detruire bouton OK 2************************
    procedure TParametre.DetruireBoutonOK2(Sender: TObject);
    begin
     BitBtnOK2.free;
     BitBtnOK2 := nil;
    end;


    Voici mes deux procédures que j'utilise dans mon programme( je ne veux pas utiliser le rad de delphi). Donc je pense qu'il faut apporter une modification à la procédure detruire pour que je puisse appliquer cette procedure à l'évenement bitbtnOK2.onclick pour détruire ce bouton.

    Je n'utilise pas de TTimer

  4. #4
    bjl
    bjl est déconnecté
    Membre averti Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Points : 338
    Points
    338
    Par défaut
    Bonjour,

    si c'est vraiment un copier coller de ton code, la procédure assignée au click du bouton 2 n'est pas "DetruireBoutonOK2(Sender: TObject);" mais
    "BoutonOK2Click;"

  5. #5
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Un objet, TApplication et TForm mis à part (avec Terminate et Release) ne peut pas appeler son destructeur directement ou indirectement depuis ses propres méthodes.

    L'utilisation du timer est la seule solution que je connaisse pour sortir du code du composant
    Bidouilleuse Delphi

  6. #6
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Citation Envoyé par gazier20
    ( je ne veux pas utiliser le rad de delphi).
    Pourquoi ?
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  7. #7
    Membre régulier Avatar de EssaiEncore
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 74
    Points
    74
    Par défaut
    Pourquoi le detruire ???, ne peux tu pas seulement le cacher ???

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 74
    Points : 48
    Points
    48
    Par défaut
    merci beaucoup

    J'ai résolu mon problème grâce au ttimer

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je trouve la solution du timer pas tres propre. J'ai eu ce probleme a un moment ou j'avais un nombre variable de boutons et cliquer sur un devait le faire disparaitre.
    Pour cela j'utilise un pool de boutons (Tobjectlist) et suivant le nombre de boutons a afficher je ne fais que masquer (visible:=false) les boutons qui sont en trop.

    Si il manque des boutons j'en ajoute dans l'objectList.

    comme cela il n'y a pas de fuite mémoire et pas de probleme de timer qui implique un délai entre le click et l'action.

  10. #10
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Stef_34
    Bonjour,

    Je trouve la solution du timer pas tres propre. J'ai eu ce probleme a un moment ou j'avais un nombre variable de boutons et cliquer sur un devait le faire disparaitre.
    Pour cela j'utilise un pool de boutons (Tobjectlist) et suivant le nombre de boutons a afficher je ne fais que masquer (visible:=false) les boutons qui sont en trop.

    Si il manque des boutons j'en ajoute dans l'objectList.
    La tienne ne l'est guère plus : la mémoire necessaire pour que ton appli fonctionne ne fait que croitre... jusqu'au Out of Memory

    Citation Envoyé par Stef_34
    comme cela il n'y a pas de fuite mémoire
    Où ça, une fuite de mémoire ?

    Citation Envoyé par Stef_34
    et pas de probleme de timer qui implique un délai entre le click et l'action.
    Même sans timer, il y a toujours un délais entre ton clic et l'action, il faut bien que windows déroule ses messages. Alors si tu met ton TTimer pour qu'il se déclenche au bout d'1 milliseconde (voire 10), bof... c'est pas très long à attendre.
    Bidouilleuse Delphi

  11. #11
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 422
    Points : 5 822
    Points
    5 822
    Par défaut
    salut

    utiliser la solution des messages
    je vai peut etre en dire un peu plus

    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
    const 
      WM_DESTROYBTN = WM_USER+1111;
     TMyForm = Class(TForm) 
    ...
     procedure WMDESTROYBTN (var Message: TMessage); message WM_DESTROYBTN;
     procedure Doclick(sender: Tobject);
    end;
     
    ...
    Consrtuctor  TMyForm.FormCreate(sender : Tobject);
    begin
      btn.OnClick := Doclick;
    end;
    Procedure TMyForm.Doclick(sender: Tobject);
    begin
      PostMessage (handle,WMDESTROYBTN,0,0);
    end; 
    ...
    procedure TMyForm.WMDESTROYBTN (var Message: TMessage);
    begin
      btn.free;
    end;
    Tu peut ameliorer le procede en passant en parametre le bouton a detruir

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  12. #12
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    j'arrive un peu tard,

    mais + 1 pour les messages, c'est plus propre
    mais on pinaille

    mais anapurna, ne peut-il pas y avoir colision là aussi,

    cad, que le message soit appelé alors que l'evenement onclick n'est pas terminé ??
    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 ;-)

  13. #13
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 422
    Points : 5 822
    Points
    5 822
    Par défaut
    salut

    Normalement non

    en fait il se met dans une queue, ce qui en theorie
    veut dire que le message ce met en fin de liste.
    tout les evenements devraient etre traiter avant celui-ci
    pour bien faire il faudrait mettre le composant enable a false
    et meme peut etre visible avant de lancer le message de destruction
    pour eviter des messages parasite

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  14. #14
    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 Stef_34
    Bonjour,

    Je trouve la solution du timer pas tres propre. J'ai eu ce probleme a un moment ou j'avais un nombre variable de boutons et cliquer sur un devait le faire disparaitre.
    Pour cela j'utilise un pool de boutons (Tobjectlist) et suivant le nombre de boutons a afficher je ne fais que masquer (visible:=false) les boutons qui sont en trop.

    Si il manque des boutons j'en ajoute dans l'objectList.

    comme cela il n'y a pas de fuite mémoire et pas de probleme de timer qui implique un délai entre le click et l'action.
    : : :
    pourqoi pas utlisé TListAction , et quand tu click sur un bouton tu changé simplement son action, comme sa tu peut utlisé le meme bouton pour des dizéne d'action,
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

Discussions similaires

  1. Réponses: 13
    Dernier message: 26/09/2008, 23h51
  2. Réponses: 3
    Dernier message: 24/08/2006, 11h50
  3. Détruire un bouton sur son OnClick
    Par Volfoni dans le forum C++Builder
    Réponses: 5
    Dernier message: 08/06/2006, 12h00
  4. Réponses: 5
    Dernier message: 03/04/2006, 16h50
  5. Comment récupérer l'ID du bouton sur lequel j'ai cliqué?
    Par gwadakillah dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 16/03/2006, 15h52

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