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 :

Problemes de création en exécution


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 72
    Points : 52
    Points
    52
    Par défaut Problemes de création en exécution
    Je créé des composants en execution et doit leur adjoindre un popupmenu a chacun donnant la possibilité de supprimer le composant en question. La création de composant ne pose pas de problème; c'est la gestion du popup menu qui me pose problème : Comment savoir que je dois detruire tel composant et pas un autre ?

    Le 2eme problème : comment connaitre la position de la souris (coordonnée X et Y) sur ma fiche et non pas sur le bureau.

    LE CODE :
    =======

    Creation du composant et du menu associé

    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
     
    procedure TForm1.SpeedButton2Click(Sender: TObject);
    begin
    xe := xe+1;
      MonEdit := Tedit.Create(Self);
      MonEdit.Parent := Form2;
      MonEdit.Left := 0;
      MonEdit.Top := 0;
      MonEdit.DragKind := dkDock;
      MonEdit.DragMode := dmAutomatic;
      MonEdit.OnClick := Supprfonction2;
      MonEdit.Name := 'monedit'+(InttoStr(xe));
      popmenu := TPopupmenu.create(self);
        MyItem[i] := TMenuItem.Create(Self);
        MyItem[i].Caption := 'Configurer '+'monedit'+(InttoStr(xe));
        MyItem[i].OnClick := Supprfonction;
        popmenu.Items.Add(MyItem[i]);
      popmenu.name := 'monedit'+(InttoStr(xe))+'pop';
      Monedit.popupmenu := popmenu;
    end;

    Le menu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.SupprFonction2(Sender: TObject);
    begin
    ShowMessage('Appui sur le bouton :'+(IntToStr(TButton(Sender).tag)));
    Free;
    end;

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Ajoute peut-être une propriété tag à tes composants. Lors de la création de ceux-ci instruits la propriété tag avec une valeur entière issue d'un compteur que tu géres en parallèle.

    Quand par la suite tu appelles le popup à partir d'un de ces composants tu instruis la propriété tag de ton popup avec la valeur tag de ton composant.

    Comme cela si tu appelles la destruction du composant à partir du menu détruire de ton popup tu récupères la valeur du tag puis tu supprimes le composant qui dispose de la même valeur de tag.

    En espérant être clair.
    Il y a certainement mieux, mais si cette piste peut te donner des idées.

    Cordialement
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 72
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Pascal Jankowski
    Ajoute peut-être une propriété tag à tes composants. Lors de la création de ceux-ci instruits la propriété tag avec une valeur entière issue d'un compteur que tu géres en parallèle.

    Quand par la suite tu appelles le popup à partir d'un de ces composants tu instruis la propriété tag de ton popup avec la valeur tag de ton composant.

    Comme cela si tu appelles la destruction du composant à partir du menu détruire de ton popup tu récupères la valeur du tag puis tu supprimes le composant qui dispose de la même valeur de tag.

    En espérant être clair.
    Il y a certainement mieux, mais si cette piste peut te donner des idées.

    Cordialement
    J'ai insérez le Tag dans le menu et dans le composant, mais comment faire pour séléctionner ce TAG à détruire ?

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Sur le formulaire où sont tes composants

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.detruireComposant(no: integer);
    var i: integer;
    begin
      for i := 0 to form1.ComponentCount-1 do
      begin
        if form1.Components[i] is TComposantCree //classe du composant
          then 
        if (form1.Components[i] as TComposantCree).Tag = no
               then //detruire_composant  
      end;
    end;
    A toi de compléter
    Cordialement
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 72
    Points : 52
    Points
    52
    Par défaut COde n,e marche pas
    Je dois etre mauvais !!!

    Le code ne marche pas, il m'affiche l'erreur INDEX DE LISTES HORS LIMITES (0)


    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.supprfonction(Sender: TObject);
    var i: integer;
    no: integer;
    begin
      for i := 0 to form1.ComponentCount-1 do
      begin
        if form3.Components[i] is TButton//classe du composant
          then
        if (form3.Components[i] as TButton).Tag = no
               then form3.Components[i].free//detruire_composant
      end;
    end;

  6. #6
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    no tu ne peux le déclarer en local dans ta procédure parceque c'est le numéro du composant à détruire.
    Regarde mon précédent Post

    Cordialement
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  7. #7
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Il y a tout ce qu'il faut dans la VCL, voici un exemple (volontairement détaillé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.miTestClick(Sender: TObject);
    var
      popup: TPopupMenu;
      component: TComponent;
    begin
      if Sender is TMenuItem then
      begin
        popup:= TMenuItem(Sender).GetParentComponent as TPopupMenu;
        component:= popup.PopupComponent;
        MessageDlg(component.Name, mtInformation, [mbOK], 0);
      end;
    end;

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

Discussions similaires

  1. probleme de cration de dossier
    Par la-breche dans le forum Windows XP
    Réponses: 2
    Dernier message: 26/05/2006, 17h05
  2. Probleme de création de table lors d'un import
    Par hair_peace dans le forum Oracle
    Réponses: 2
    Dernier message: 19/04/2006, 14h20
  3. Probleme de création de socket
    Par Pragmateek dans le forum C++
    Réponses: 5
    Dernier message: 10/03/2006, 22h47
  4. Probleme de création table avec PK et auto_increment
    Par slefevre01 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 14/02/2006, 14h14
  5. [VB.NET] Probleme de création d'une picturebox dans le code
    Par stringman62 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/02/2006, 16h56

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