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 :

Construire le nom des composants présents dans la form


Sujet :

Lazarus Pascal

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 50
    Points
    50
    Par défaut Construire le nom des composants présents dans la form
    Bonjour à toutes et tous,

    Bon un petit problème que je n'ai pas pu résoudre :

    j'ai 60 composants TStaticText en 5 lignes de 12 composants (tableau)
    à chaque ligne correspond un objet
    à chaque colonne correspond un mois.

    donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                  1  2  3  4  5  6  7  8  9  10 11 12
    objet_alpha   X  X  X  X  X  X  X  X  X  X  X  X
    objet_beta    X  X  X  X  X  X  X  X  X  X  X  X
    objet_charlie X  X  X  X  X  X  X  X  X  X  X  X
    objet_delta   X  X  X  X  X  X  X  X  X  X  X  X
    objet_etc..   X  X  X  X  X  X  X  X  X  X  X  X
    les 60 TStaticText se nomment donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    objet_alpha_1,objet_alpha_2,objet_alpha_3, etc ...
    objet_bravo_1,objet_bravo_2,objet_bravo_3, etc ...
    Je souhaite pouvoir construire le nom du composant à partir des infos contenues dans la base de données :
    ainsi dans le SGBD si sgbd.fieldbyname('objet_alpha').integer <> 0 alors je teste la date pour définir le mois et je construis le nom de mon composant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    decodedate(sgbd.fieldbyname('date_don').asDateTime,annee,mois,jour);
    et ensuite je bute je voudrais faire un truc un peu comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var_nom_compo:='objet_alpha'+inttostr(mois);
     
    var_nom_compo.Caption :='X';
    Mais bon j'y arrive pas suis pas assez doué en Pascal

    Merci de vos réponses

  2. #2
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Bon un embryon de réponse un copain très doué me propose cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TStaticText(FindComponent('objet_alpha_' + intToStr(mois))).Caption:= 'X';
    Qu'en pensez vous ?

    Pour ma part cela ne fonctionne pas encore j'ai un "violation_access" que je ne parviens pas à isoler ...

    Eric

  3. #3
    Membre expérimenté
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut
    Eric,

    Un petit effort stp...
    "lazarus findcomponent" dans google et hop le tour est joué (6ème position !)

    La réponse est ici

  4. #4
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    aie je m'attendais un jour à ce genre de réponse et c'est de ma faute ...

    J'y cours.


    Eric

  5. #5
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    Bon voici le code incriminé :
    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
         {Calcul des soldes et remplissage du tableau }
         With d_m.sql_lig_session Do Begin
           First;
           tot_temp1:=0;tot_temp2:=0;tot_temp3:=0;
           while not eof Do begin
             tot_temp1:=tot_temp1 + d_m.sql_lig_session.FieldByName('lig_mt_total').AsFloat;
             tot_temp2:=tot_temp2 + d_m.sql_lig_session.FieldByName('lig_mt_paye').AsFloat;
             tot_temp3:=tot_temp3 + d_m.sql_lig_session.FieldByName('lig_mt_du').AsFloat;
             { remplissage du tableau }
             DecodeDate(d_m.sql_lig_session.FieldByName('lig_date_session').AsDateTime,annee,mois,jour);
             if d_m.sql_lig_session.FieldByName('lig_colis_alim').AsInteger<>0
             Then TStaticText(FindComponent('st_tab_col_'+IntToStr(mois))).Caption:='X' ;
             Next;
           End;
         End;
    Et à l'éxécution j'ai un Raised ExcecptionClass External SIGSEGV
    et l'unité Control.inc s'ouvre et le focus se met sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if TMethod(@Self.GetTextBuf).Code = Pointer(@TControl.GetTextBuf)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    {------------------------------------------------------------------------------
      TControl GetText
    ------------------------------------------------------------------------------}
    function TControl.GetText: TCaption;
    var
      len: Integer;
    begin
      // Check if GetTextBuf is overridden, otherwise
      // we can call RealGetText directly
      if TMethod(@Self.GetTextBuf).Code = Pointer(@TControl.GetTextBuf)
      then begin
        Result := RealGetText;
      end
    Bref je suis perdu (encore)


    Merci

    Eric

  6. #6
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    bonsoir,


    Je suis un peu perdu car le problème ne semble pas venir du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TStaticText(FindComponent('st_tab_col_'+IntToStr(mois))).Caption:='X' ;
    mais je n'arrive pas à la localiser et en mode pas à pas ça bug sur cette ligne alors je tourne en rond.

    A plus tard et si quelqu'un à une idée de génie ...
    en attendant je vais faire 12 lignes de codes par ligne à afficher ....

  7. #7
    Membre expérimenté
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut
    Bonsoir Eric,

    Je pense fortement que c'est ton FindComponent qui pète
    Tu ne le test pas et donc l'appel doit foirer sur une variable non allouée...

    Le mieux est de passer par un TComponent intermédiaire que tu test à null pour être sur qu'il existe bien

    @+

  8. #8
    Membre éclairé

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    Points : 773
    Points
    773
    Par défaut
    Dans le bout de code que tu nous montre, tu cherches à définir le texte d'un composant TstaticText que tu trouves grace à son nom.

    Ton premier post semblait vouloir dire que tu allais créer tes composants TstaticText de manière dynamique.

    As-tu écris cette partie de code et peux tu nous la montrer?

    J'ai le sentiment que tu essaies de définir la propriété caption d'un composant qui n'existe pas!!

  9. #9
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 195
    Points
    195
    Par défaut
    yep quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonComposant := FindComponent('st_tab_col_'+IntToStr(mois));
    if assigned(MonComposant) then TStaticText(MonComposant).Caption:='X' ;
    question : un TStringGrid ne serait-il pas plus adapté ? auquel cas tu pourrais rajouter autant de ligne que tu veux

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 46
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par mtournay Voir le message
    un TStringGrid ne serait-il pas plus adapté ?
    Je suis du même avis depuis le début

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/09/2014, 16h42
  2. [XL-2010] Identifier le nom des personnes présentes dans l'onglet Sécurité
    Par thomasdu40 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/10/2012, 16h44
  3. Lister les composants présent dans une form
    Par QAYS dans le forum VB.NET
    Réponses: 1
    Dernier message: 23/02/2011, 13h09
  4. [Problème]Nombre et nom des champs dynamiques dans un form
    Par julienOriano dans le forum Struts 1
    Réponses: 17
    Dernier message: 10/04/2007, 16h32

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