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 :

[Objet] Conseil retour de méthode


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de charlene44
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 87
    Par défaut [Objet] Conseil retour de méthode
    bonjour, j'ai un petit problème avec une de mes methodes.

    mon appli sert à gérer des clients, des guitares et les achats de tous les clients (magasins ou artistes), rien de bien compliqué dans le principe (ceci représente un ap pour mon examen donc ne faites pas attention au jeu d'essai .

    pour ajouter un achat à un client, la procédure est la suivante :

    1 - séléctionnez un client ou ajoutez-en un nouveau d'abord
    2 - séléctionnez le type de guitare que ce dernier veut acheter
    3 - séléctionnez une marque parmi la liste des marques disponibles
    4 - séléctionnez un modele dans la liste des modeles disponibles de cette marque
    5 - enfin séléctionnez la couleur
    6 - le système vous affiche la guitare correspondante, avec ses caractérisitiques plus détaillées, indiquez la quantité et validez


    je suis rendu à développer le petit 3 et c'est la qu'est le problème : en fait il faut afficher une liste de marque, mes toutes différentes car plusieurs guitares de mon stock sont de la meme marque, c'est évident.
    Pour cela j'ai écrit 3 méthodes :

    1 - la méthode function donneGuitaresDunType(typ : string) : TObjectList; qui me retourne toutes les d'un type donné : donc TElectrique ou TAcoustic.

    2 - la méthode function donneNombreMarques(typ : string) : integer;
    méthode qui utilise la méthode 1 et qui me retourne le nombre de marques DIFFERENTES (méthode me servant pour mon for, pour remplir ma combobox)

    3 - function donneMarques(typ : string) : TObjectList;
    méthode utilisant elle aussi la 1 mais je ne sais pas ce qu'elle peut retourner, pour l'instant elle me retourne une liste de guitares de la classe TGuitares, avec pour chacune d'elle une marque différente, je recupererai ensuite la marque de chacune, cependant je pense qu'il serait plus judicieux qu'elle retourne les marques directement, j'ai essayé avec un
    function donneMarques(typ : string) : array[1..50] of string; mais il ne veut pas de mon array lol

    comme vous pouvez le voir c'est la méthode 3 qui plante, voici le code de mes 3 méthodes :


    function TLesGuitares.donneGuitaresDunType(typ : string) : TObjectList;
    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
     
    function TLesGuitares.donneGuitaresDunType(typ : string) : TObjectList;
       var
          i : integer;
          LesGuitaresDunType : TObjectList;
       begin
       LesGuitaresDunType := TObjectList.Create();
       // on parcours toutes les guitares
         for i:= 0 to LesGuitares.Count-1 do
         begin
       //si la guitare sur est du type fourni en parametre alors on l'ajoute a la collection
            if (TGuitares(lesGuitares.Items[i]).ClassName=typ) then
            begin
               LesGuitaresDunType.Add(lesGuitares.Items[i]);
            end;
         end;
       //on retourne la collection ne contenant que les guitares du type fourni en parametre
       result:=LesGuitaresDunType;
       end;

    function TLesGuitares.donneNombreMarques(typ : string) : integer;
    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
     
       function TLesGuitares.donneNombreMarques(typ : string) : integer;
       var
         tabMarques : array [1..50] of string;
         LesGuitaresDunType : TObjectList;
         nbMarques : integer;
         i,j : integer;
       begin
       nbMarques := 0;
     
       lesGuitaresDunType:=donneGuitaresDunType(typ);
     
         for i:= 0 to LesGuitaresDunType.Count-1 do
         begin
           j:=1;
         // je teste si la marque de la guitare n'a pas deja été prise en compte
              while (j<=nbMarques) and (tabMarques[j]<>TGuitares(LesGuitaresDunType.Items[i]).getMarque()) do
              begin
                j:=j+1;
              end;
         // si on est arrivé a la fin du tableau contenant les marques sans doublons alors on peut
         // ajouter cette marque dans le tableau et incrémenter le nombre de marque différente
              if (j>nbMarques) then
              begin
                 nbMarques:=nbMarques+1;
                 tabMarques[nbMarques]:=TGuitares(LesGuitaresDunType.Items[i]).getMarque();
     
              end;
           end;
         // on retourne le nombre de marque différentes pour un typé de guitare
       result:=nbMarques;
       end;


    function TLesGuitares.donneMarques(typ : string) : TObjectList;
    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
     
       function TLesGuitares.donneMarques(typ : string) : TObjectList;
       var
         LesMarques : TObjectList;
         LesGuitaresDunType : TObjectList;
         nbMarques : integer;
         i,j : integer;
       begin
       nbMarques := 0;
       LesMarques:=TObjectList.Create();
       lesGuitaresDunType:=donneGuitaresDunType(typ);
     
         for i:= 0 to LesGuitaresDunType.Count-1 do
         begin
           j:=1;
         // je teste si la marque de la guitare n'a pas deja été prise en compte
              while (j<=nbMarques) and (TGuitares(LesMarques.Items[j]).getMarque()<>TGuitares(LesGuitaresDunType.Items[i]).getMarque()) do
              begin
                j:=j+1;
              end;
         // si on est arrivé a la fin du tableau contenant les marques sans doublons alors on peut
         // ajouter cette marque dans le tableau et incrémenter le nombre de marque différente
              if (j>nbMarques) then
              begin
                 nbMarques:=nbMarques+1;
                 LesMarques.Add(TGuitares(LesGuitaresDunType.Items[i]));
     
              end;
           end;
         // on retourne le nombre de marque différentes pour un typé de guitare
       result:=LesMarques;
     
       end;

    ci joint mon applis en zip si vous préférez avoir une vision plus direct, vous aurez besoin de UVueAchat et Uclass

    merci d'avance de m'éclairer sur ce problème.

    ps : c'est ma premiere appli objet alors soyez indulgent please lol
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite 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 : 43
    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
    Par défaut
    Salut,

    Si j'ai bien compris ton problème c'est que tu souhaite passer un tableau en retour à ta fonction?

    Si c'est le cas, voici la procédure: il faut déclarer un type contenant un tableau, et c'est ce type que tu passeras en paramètre... C'est pas clair ? Normal, je m'exprime mal...Mais voici un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    type
    TMaTableStr= array of ansistring;
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    type
    TMaTableStr= array[1..50] of ansistring;
    A déclarer au même endroit que tes classes par exemple.

    Puis, tu l'utilise ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function RecupererTableauGuitare(typ : string)  : TmaTableStr;
    ......
    Bien sûr pour utiliser ta fonction, tu as besoin d'avoir une variable du type que tu viens de créer. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Procedure lire;
    var TableGuitar : TMaTableStr;
       type_guitare : string;
    begin
    TableGuitar := RecupererTableauGuitare(type_guitare);
    end;
    Voilà, en espérant t'aider...

    A+.

  3. #3
    Membre confirmé Avatar de charlene44
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 87
    Par défaut
    euh j'ai testé ce que tu m'as dit mais ca me créé des erreurs : avec le TMatableStr[j]<>TGuitares(LesGuitaresDunType.Items[i]).getMarque())

    il me dit pour le '[j]' : '(' attendue mais '[' trouvé

  4. #4
    Membre émérite 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 : 43
    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
    Par défaut
    Je sais pas ce qui va pas chez toi, mais voici un exemple tout simple à tester et tu verras que je récupère bien le tableau de string:
    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
    interface
     
    uses
    ....
     
    type
    MyStr = array[1..50] of string;
     
     
    type              
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        procedure Button1Click(Sender: TObject);
      private
        function GetList:MyStr;
      public
      end;
    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
     X :MyStr;
      i : integer;
    begin
      X := GetList;
      Edit1.Text :=X[1];
    For i:=1 to 3 do
    begin
      ShowMessage(X[i]);
    end;
    end;
    //-----------------------------------
    function TForm1.GetList:MyStr;
    var
     ListMarque :MyStr;
    begin
    ListMarque[1] := 'Chandler';
    ListMarque[2] := 'Fender';
    ListMarque[3] := 'gibson';
    result := ListMarque;
     
    end;
    A+.

  5. #5
    Membre émérite 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 : 43
    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
    Par défaut
    Si, je vois l'erreur. Tu as utiliser ton type: TMaTableStr, alors qu'il fallait utiliser une variable de ce type. En faite avec cette astuce, tu doit définir un nouveau type de donnée (qui passeras en paramèt,re de ta fonction alors qu'un tableau ne pourra ). En fait si tu voulais tu pourrais passer une structure plus complexe; du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    type PointLigne = record
        temps : array[1..5] of double;
        Xposition : integer;
        Yposition : integer;
    .....
    end;
    Donc, pour ton code, tu doit d'abord penser à déclare une variable de type TMaTableStr avant de pouvoir l'utiliser.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Var TaTable : TMaTableStr;
    Que tu utilise dans tes programmes:
    En gros c'est comme si tu avait écrit: (array[1..50] of string)[1]...

    A+.

  6. #6
    Membre confirmé Avatar de charlene44
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 87
    Par défaut
    je connais les record, mais je voulais juste savoir si il y avait une structure plus appropriée que ca, merci

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

Discussions similaires

  1. Objet corba retour
    Par stephane92400 dans le forum CORBA
    Réponses: 8
    Dernier message: 09/06/2006, 11h50
  2. reflexion et type de retour des méthodes
    Par money mark dans le forum Langage
    Réponses: 2
    Dernier message: 09/04/2006, 18h46
  3. [POO] [Classe/Objet] Conseils à un débutant en POO
    Par nicocolt dans le forum Langage
    Réponses: 9
    Dernier message: 08/03/2006, 10h06
  4. Conseils sur la méthode de développement objet métier
    Par RamDevTeam dans le forum Langage
    Réponses: 5
    Dernier message: 08/12/2005, 18h14
  5. [JACOB] Comment passer un objet par référence à une méthode
    Par zlavock dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 21/03/2005, 18h28

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