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

EDI Delphi Discussion :

[Kylix] Tableaux dynamiques sour Kylix2


Sujet :

EDI Delphi

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Tableaux dynamiques sour Kylix2
    Salut !

    Sous Delphi 5 et 6 j'avais utilisé les tableaux dynamiques en les passant en paramètres à une méthode qui les dimensionnait et les renseignait.

    Sous Kylix 2, il est apparemment impossible de dimensioner un tableau dynamique s'il n'a pas été déclaré en local mais passé en paramètre.

    procedure DimTab(var ATableau: array of integer)
    begin
    SetLength(ATableau, 3);
    end;

    NE COMPILE PAS !

    Avez vous rencontré ce problème, et si oui, y-a-t'il une solution (autre que de passer par des TStringList ou autre artifice...)

    Merci
    Krän

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 99
    Points : 126
    Points
    126
    Par défaut
    essayes de déclarer un type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      TMonTableau : array of integer;
     
    procedure DimTab(var ATableau: TMonTableau) 
    begin 
      SetLength(ATableau, 3); 
    end;

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Ca a l'air de fonctionner... et en plus c'est tout simple !

    Heureusement qu'il y en a qui réfléchissent !

    Merci Nat

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Le faite de redimensionner le tableau efface t'il son contenu?

    N'y a t'il pas moyen comme les vecteurs en java de rajouter un élément dans le tableau?

    Ou bien un autre système?

    Les tableaux dynamiques sous Delphi ont toujours un de mes GROS points noirs ...

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Le redimensionnement du tableau n'efface des données que dans le cas d'une diminution de taille : tu perds les données stockées au delà de la taille finale.

    Pour ajouter une donnée il suffit d'utiliser une procedure du type

    i := Length(myTab);
    SetLength(myTab, i+1);
    myTab[i] := 5;

    En utilisant la solution donnée par Nat, je n'ai plus de problème, et je n'en avais pas en Delphi5.

    En espérant t'avoir aidé.
    Krän

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Merci, je vais essayer cela ce soir

    C'est aussi simple, et cela fait tellement longtemps que je cherchais ...
    Très sincèrement, je pensais que cela était beaucoup plus complèxe ...

    Mais j'ai tout de même une question

    J'utilise un treeview, j'ai +- 2000 entrées.

    Je voudrais faire correspondre pour chaque entrée, un tableau.
    (Par ex : titre, description, prix, ...)

    Si je rajoute une entrée en place 500, comment je fais ?
    Je dois déplacer toutes mes autres entrées?
    Car je ne dois pas effacer mon entrée en place 500, mais je dois déplacer toutes les autres ... :o

    Merci

    David

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Pour un problème comme celui-ci, j'essaierais plutôt un TList qu'un tableau.

    Tu déclares un type poiteur sur un record, et le record associé qui est constitué des éléments d'une occurence de ton treeview :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    type 
    	PElement = ^Element;
    	Element = record
    		Number: integer;
    		Name: string;
    	end;
    Tu peux alors utiliser un TList pour gérer les données comme par un tableau en les renseignant comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var
    	list: TList;
    	tmpElement: PElement;
    begin
    	New(tmpElement);
    	tmpElement^.Number := 1;
    	tmpElement^.Name := 'un';
    	list.Add(tmpElement);
    end;
    L'avantage de ce genre de liste est que la fonctionnalité "Insert" est présente au même titre que Add.
    Pour récupérer les données et les afficher, il faut repasser par un pointeur sur ton record :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for i := 0 to list.Count-1 do
    begin
    	tmpElement := list.Items[i];
    	Memo1.Lines.Add(tmpElement^.Name); 
    end;
    Tout cela est tiré de l'aide sur les TList, et testé en Kylix 2 : cela fonctionne très bien.
    Reste le problème de performance que je ne peux t'assurer.

    Krän

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

Discussions similaires

  1. [D7] Tableaux dynamiques dans un record
    Par bobby-b dans le forum Langage
    Réponses: 2
    Dernier message: 30/06/2004, 23h23
  2. Article sur les tableaux dynamiques
    Par Eric Sigoillot dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2004, 22h00
  3. Réponses: 4
    Dernier message: 07/12/2002, 07h34
  4. [Kylix] saisie d'@ IP kylix2 OE
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 10/11/2002, 01h54
  5. [Kylix] tableau dynamique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 31/10/2002, 08h57

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