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 :

tableau dynamique TRadioButton erreur


Sujet :

Delphi

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut tableau dynamique TRadioButton erreur
    Salut à tous. J'ai un PageControl dans lequel je je créé dynamiquement des TTabSheet avec dedans un GroupBox et des RadiosButton.
    j'ai donc des variables globales définies comme cela:
    tabsteps : array of TTabSheet;
    gbs : array of TGroupBox;
    rdb : array of array of TRadioButton;

    La création des onglets et des TGroupBox se passe bien, mais lorsque je créé les radiobutton j'ai une erreur. 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
    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
        for I := 0 to high(rdb[index]) - 1 do
             rdb[index][i].Free;
     
        setlength(rdb[index],0);
     
    UIBQuery.SQL.Clear;
        UIBQuery.SQL.Text:='SELECT DISTINCT ' + fieldname + ' FROM "SEG$' + cmbtables.Text + '"';
        UIBQuery.Open();
        while not UIBQuery.Eof do
        begin
            i:=high(RDB[index]);
     
            if (i<0) then i:=0;
            setlength(RDB[index],i+1);
     
            showmessage(inttostr(i+1) + ' '  + inttostr(high(RDB[index]))); //obtiens 1 0
            RDB[index][i-1]:=TRadioButton.create(gbs[index]);
            showmessage(inttostr(i+1) + ' '  + inttostr(high(RDB[index]))); //obtiens 1 12525455
            RDB[index][i-1].Parent:=gbs[index];
            showmessage(inttostr(i+1) + ' '  + inttostr(high(RDB[index]))); //obtiens 1 12525455
     
            if not (high(RDB[index]) > 0) then //sauté car erreur avec le high
               RDB[index][0].Top :=20
            else
               RDB[index][i-1].Top :=RDB[index][i-2].Top + 30; //ici élément non accessible donc erreur d'accès mémoire
     
            RDB[index][i-1].Height:=20;
            RDB[index][i-1].left:=20;
            RDB[index][i-1].width:=gbs[index].Width-40;
            RDB[index][i-1].Visible:=true;
            RDB[index][i-1].Caption:=UIBQuery.Fields.AsString[0];
     
         if(UPPERCASE(fieldname)='"SEGMENTATION_NAME') then
         begin
                RDB[index][i-1].OnClick:=rdSegmentationclick;
         end;
        UIBQuery.Next;
        end;
        UIBQuery.Close();
    L'erreur viens donc de la création du TRadioButton, mais je ne vois pas pourquoi ça ne marches pas, si quelqu'un a une solution je suis preneur !

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut
    BOn j'ai modifié mon code, ça marche, mais j'ai pas la moindre idée du pouquoi...
    (ce n'est pas les length, j'avias déja essayé)
    Le voici pour ceux que ça intéresse:
    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
    procedure tfrmmain.loadradios(index:integer; fieldname : string);
    var i : integer;
    begin
        for I := 0 to high(rdb[index]) - 1 do
             rdb[index][i].Free;
     
        setlength(rdb[index],0);
        UIBQuery.SQL.Clear;
        UIBQuery.SQL.Text:='SELECT DISTINCT ' + fieldname + ' FROM "SEG$' + cmbtables.Text + '"';
        UIBQuery.Open();
        while not UIBQuery.Eof do
        begin
            i:=length(RDB[index]);
     
            if (i<0) then i:=0;
            setlength(RDB[index],i+1);
     
            RDB[index][i]:=TRadioButton.create(gbs[index]);
            //RDB[index][i].Parent:=tabsteps[index];
     
            RDB[index][i].Top :=30*(i+1);
     
            RDB[index][i].Height:=20;
            RDB[index][i].left:=20;
            RDB[index][i].width:=gbs[index].Width-40;
            RDB[index][i].Visible:=true;
            RDB[index][i].Caption:=UIBQuery.Fields.AsString[0];
     
        	if(UPPERCASE(fieldname)='"SEGMENTATION_NAME') then
        	begin
                RDB[index][i].OnClick:=rdSegmentationclick;
        	end;
            RDB[index][i].parent:=GBS[index];
     
        UIBQuery.Next;
        end;
        UIBQuery.Close();
    end;

  3. #3
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Le pourquoi c'était le RDB[index][i-1] non, dans le cas où i=0? (d'ailleurs dans le deuxième code tu as bien RDB[index][i] seulement)
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut
    Je penses que c'est peut être ça, mais l'erreur apparaissait au niveau de l'affectation du parent... J'ai du me trompé avec length et high, l'un renvoi 1 de plus ...

  5. #5
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Moi c'est celle ligne qui me paraît louche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RDB[index][i-1].Top :=RDB[index][i-2].Top + 30;
    puisque tu utilise 2 RDB alors que un seul a été créé auparavant par un créate.
    A moins que j'ai mal lu...

    Enfin en tout cas l'essentiel c'est que ça marche maintenant.
    @+.
    For crying out loud !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/03/2015, 18h31
  2. Problème de sélection dans un tableau dynamique (gestion des erreurs)
    Par aulilou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/08/2007, 16h38
  3. Réponses: 7
    Dernier message: 24/11/2006, 09h56
  4. [Kylix] tableau dynamique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 31/10/2002, 08h57
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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