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

Langage Delphi Discussion :

Tableaux dynamique d'objets


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 67
    Points
    67
    Par défaut Tableaux dynamique d'objets
    Bonjour,

    J'essaye d'utiliser un tableau de panel de cette façon


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Panel=class(TJvBevel)
      Constructor Create(AOwner: TComponent);override;
      end;
    déclaration du tableau en variable global :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PanelP : array of Panel;
    j'essaye quelquechose de ce genre sa passe à la compilation mais pas à l'éxécution (classe d'Exception EAcessViolation) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm4.FormCreate(Sender: TObject);
    begin
    PanelP[0]:=Panel.create(Self);
    DrawTheme(PanelP[0]);
    end;
    ce que j'essaye de faire c'est de créer dynamiquement des panels et dans drawtheme j'affecte à chaque panel 8 (au plus) objet Tshape dès que j'en ai 8 je crée un nouveau panel ce qui me permettra après grace au tableau d'afficher le panel que je veux.

    J'espere que c'est clair merci d'avance..

  2. #2
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Salut,

    Pour creer un Objet, quel qu'il soit, il faut le créer comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonObjet:=Type_de_MonObjet.Create();
    et non pas comme ceci (surtout pas !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonObjet:=MonObjet.Create();
    bref tu peux appeler la méthode du type (le constructeur) lorsque ton objet n'existe pas encore, mais rien d'autre.
    En effet lorsque tu fais
    Panel.Create(self), Panel n'existe pas encore, donc la méthode qui y est rattachée non plus.

    Autrement dit, au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm4.FormCreate(Sender: TObject);
    begin
    PanelP[0]:=Panel.create(Self);
    DrawTheme(PanelP[0]);
    end;
    Tu devrais écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm4.FormCreate(Sender: TObject);
    begin
    PanelP[0]:=TPanel.create(Self);  //<-- TPanel au lieu de Panel
    DrawTheme(PanelP[0]);
    end;
    Bon dev

  3. #3
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Tu peux utiliser une TStringList de cette manière, en gros

    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
    var
      LPanels: TStringList;
      MonPanel: TPanel;
     
    begin
      for i := 0 to Nb do
        begin
        MonPanel := TPanel.Create( Self );
        MonPanel.Parent := TonConteneur (qui peut être la form)
        MonPanel.Name := 'PanelN°' + xxx;
        MonPanel.Caption := 'Un Panel';
        MonPanel.Left/Right/Width/Height := ...
        LPanels.AddObject( MonPanel.Name, MonPanel );
        end;
      // Pour le récupérer, rechercher dans la liste position xxx
      MonPanel := TPanel( LPanels.Objects[ Index ] );
    end;
    EDIT:
    j'ai oublié, allouer ta liste avant tout ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LPanels := TStringList.Create;
    Bon courage !

  4. #4
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Sinon, tu peux aussi te créer un TPanelList avec l'utilitaire (un générateur de listes de toute sorte : TIntegerList, TPointList, TFontList, TListList, la liste n'est pas exhaustive) que j'ai mis hier sur mon site perso (servez vous, c'est gratos )

    là ---> http://waskol.developpez.com

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 67
    Points
    67
    Par défaut
    merci,

    je suis en train de tester si ça marche mais comment je concatène un string et un compteur de type integer?

    Panel.name:='Panel'+cpt; ??

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 67
    Points
    67
    Par défaut
    même avec ListPanel ça ne marche pas même exception Eaccessviolation
    je vais essayer le générateur de liste mais c'est bizzare que ça fonctionne pas

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 67
    Points
    67
    Par défaut
    autant pour moi ca marche j'avais oublie d'initialiser la liste dsl
    sinon je peux concaténer une chaine de caractère avec compteur de type Integer

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 67
    Points
    67
    Par défaut
    je pense que ça marche mais il faut que je concactene un string et un integer pour avoir des noms différents mais j'y arrive pas svp comment on fait ?????

  9. #9
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Tu ne peux pas concaténer un string et un integer, par contre un string et un string oui. tu es d'accord ?

    Donc il faut que
    1) tu transformes ton integer en string.
    2) tu concatènes ta première string avec celle que tu viens d'obtenir

    La fonction qui fait l'étape 1), c'est IntToStr(UnEntier:integer):string

    A partir de là ça te donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonPanel.Name := 'PanelN°' + inttostr(i);
    si on reprend le code de TicTacToe

Discussions similaires

  1. création dynamique d'objet, projet win32
    Par noinneh dans le forum MFC
    Réponses: 5
    Dernier message: 03/02/2005, 16h07
  2. [Reflexivite]création dynamique d'objet et Héritage
    Par norkius dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 26/10/2004, 11h37
  3. [D7] Tableaux dynamiques dans un record
    Par bobby-b dans le forum Langage
    Réponses: 2
    Dernier message: 30/06/2004, 23h23
  4. Article sur les tableaux dynamiques
    Par Eric Sigoillot dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2004, 22h00
  5. [Kylix] Tableaux dynamiques sour Kylix2
    Par Krän dans le forum EDI
    Réponses: 6
    Dernier message: 07/10/2003, 14h31

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