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 :

créer composant dynamiquement avec sa déclaration


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Par défaut créer composant dynamiquement avec sa déclaration
    bonjour, je voudrais arriver a créer un composant dynamiquement, ca ca ne pose pas de problème mais
    je voudrais déclarer les composants au fur et à mesure de la création car je dois créer des composants en fonction d'un paramètre du programme qui pourrait aller jusque 100, je n'ai pas trop envie de déclarer 100 composants et ne pas tous les utiliser donc je voudrais arriver a déclarer via une boucle est possible ?
    merci d'avance

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Par défaut
    en fait ça va pour en créer plusieurs je ne dois pas les déclarer apparemment séparément.
    ce sont des checkbox, maintenant je voudrais arriver a savoir quels sont les checkbox qui ont été sélectionnés apparemment ce n'est pas placé dans un tableau
    voici 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
    procedure TForm3.monboutonClick(Sender: TObject);
    var i,j:integer;
    begin
    j:=4;
    for i:=0 to 3 do
    begin {La fenêtre est propriétaire du nouveau bouton }
      chk := Tcheckbox.Create(Self);
      chk.Parent := jvgroupbox1;
       chk.Caption := 'check';
      chk.Left := 3;
      chk.Top:=j;
      j:=j+20;
    end;
    end;
    si tous les checkbox ont été sélectionnés alors chk est considéré à checked

  3. #3
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Tout a fait ... par contre tu ne garde aucune references des composants crees car a chaques tours de boucles tu ecrases l'ancienen reference par la nouvellement cree.

    Ce n'ets pas grave en soit (pb de fuite memoire) car une copie de l'instance est stocké dans la proprietee components du owner et controms du parent.

    Par contre pour les manipluer uliterieurement c'est quand meme moins pratique.

    Je te conseille donc d'utiliser un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Var chkTab : Array of TCheckBox;
     
    SetLength(chkTab, NbCheckBoxes);
    For i := 0 to NbCheckboxes-1 do
      Begin
      chktab[i] := TCheckbox.create(self);
      chkTab[i]. [...];
      End;

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Par défaut
    ok ca semble mieux je vais tester
    merci

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SetLength(chkTab, NbCheckBoxes);
    a quoi sert cette commande ?

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Par défaut
    ok j'ai compris je suppose que c'est la taille du tableau

  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
    Par défaut
    Tu peux aussi utiliser le TObjectList qui est fait pour ça
    pour plus d'infos
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  8. #8
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Citation Envoyé par Mihalis
    ok j'ai compris je suppose que c'est la taille du tableau
    Tout a fait
    Ca alloue N element d'un tableau.
    Pour une gestion dynamique de l'allocation element par element en cours de boucle (cas ou la taille n'ets pas definie au debut) demande moi si tu trouves pas tout seul

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Par défaut
    bonjour, merci de votre participation
    j'obtiens un message d'erreur
    First chance exception at $7C812A5B. Exception class EAccessViolation with message 'Access violation at address 00401CC5 in module 'Projecttimesheet.exe'. Write of address 0043CD7C'. Process Projecttimesheet.exe (4896)
    voici le code qui l'appele

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.CreateForm(Tformmessage, formmessage);
    formmessage.showmodal;
    je l'appele a partir de dossier
    voici le code des forms
    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
      Application.Initialize;
      Application.CreateForm(Tformdemarrage, formdemarrage);
      Application.CreateForm(Tx, x);
      Application.CreateForm(TFormcreation_dossier, Formcreation_dossier);
      Application.CreateForm(TFormpr, Formpr);
      Application.CreateForm(TFormcp, Formcp);
    
      Application.CreateForm(TForm_do, Form_do);appelée ici
      Application.CreateForm(TFormmessage, Formmessage);
      Application.CreateForm(TFormclient, Formclient);
      Application.CreateForm(TFormfact, Formfact);
      Application.CreateForm(TForm1, Form1);
      Application.CreateForm(TFormfrais_pr, Formfrais_pr);
      Application.CreateForm(TFormbdd, Formbdd);
      Application.CreateForm(Tgestion, gestion);
      Application.CreateForm(TFormcorr, Formcorr);
      Application.CreateForm(TFormfrais, Formfrais);
      Application.CreateForm(TFormmanuel, Formmanuel);
      Application.CreateForm(TFormfacturation, Formfacturation);
      Application.CreateForm(TForm_horaire, Form_horaire);
      Application.CreateForm(Tform_Etat, form_Etat);
      Application.CreateForm(TForm_provision, Form_provision);
      Application.CreateForm(TFormarchives, Formarchives);
      Application.CreateForm(TForm7, Form7);
      Application.CreateForm(TFormparametres, Formparametres);
    
      Application.Run;
    en fait j'appele formmessage et dedans j'utilise des variables de dossier

  10. #10
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Par défaut
    non en fait je n'ai pas de probleme a ce niveau la par contre est-il possible qu'il y ait maximum 9 checkbox ?
    lorsque j'en mets 10 j'obtiens l'erreur ci dessous

    First chance exception at $7C812A5B. Exception class EAccessViolation with message 'Access violation at address 00401CC5 in module 'Projecttimesheet.exe'. Write of address 0043CD7C'. Process Projecttimesheet.exe (4896)

  11. #11
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.CreateForm(TForm_do, Form_do);appelée ici
      Application.CreateForm(TFormmessage, Formmessage);
    J'ai pas trop compris ce que tu appelles et quand tu l'appelles ... mais visiblement tu creer formmessage apres form_do.
    Si le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.CreateForm(Tformmessage, formmessage);
    formmessage.showmodal;
    est appeles dans le create de form_do il risque d'y avoir double emploi ....

  12. #12
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Par défaut
    qd je ne le mets pas ca plante directement
    pour mes 10 checkbox une idée ? qd j'en ai 9 ca passe 10 ca casse

  13. #13
    bjl
    bjl est déconnecté
    Membre chevronné 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
    Par défaut
    oui. ça ressemble à un dépassement de capacité du tableau.

    tu fais bien
    setLentgth( ???, MonTableau);
    for i := 0 to length(monTableau) - 1 do
    Begin
    MonTableau[i]:= Tcheckbox.create
    ...
    End;

    comme indiqué précedemment, un tableau ou une liste vont de 0 à length -1

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/04/2013, 09h47
  2. Comment créer un site immobilier dynamique avec une base de données ?
    Par Alain troverti dans le forum Général Conception Web
    Réponses: 14
    Dernier message: 07/07/2006, 21h57
  3. Réponses: 1
    Dernier message: 04/05/2005, 11h43
  4. [DisplayTag] Créer un lien dynamique avec javascript
    Par babylone7 dans le forum Taglibs
    Réponses: 3
    Dernier message: 20/04/2005, 10h23
  5. Créer composant avec TQuery->pb suppression a la concepti
    Par marghett dans le forum Bases de données
    Réponses: 12
    Dernier message: 24/07/2004, 07h42

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