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 :

Création Dynamique Objet


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut Création Dynamique Objet
    Bonjour
    Je crée Dynamiquement des objets sous intraweb :

    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
    procedure 
    var
      Obj  : array [1..100] of TIWimage;
      i : integer;
      Images : TIWImage;
    begin
      for i := 1 to 5 do
      begin
        Images := TIWImage.Create(self);      
        with Images do
        begin
          Parent := self;
          Name := 'Image' + IntToStr(i);
          Visible := True;
        end;
        Obj  [i] := Images;   
      end;
    
      Obj [1].Picture := IWImage1.Picture;
      Obj [1].Repaint;
    
      Obj [1].SendToBack;  // ERREUR !!!!!!

    l'erreur : Le contrôle 'Image1' n'a pas de fenêtre parente


    Pourquoi cette erreur ? Je dois mettre quoi à la place de Self ?

    J’ai essayé de mettre mon IWForm mais rien ni fait

    Merci d'avance pour le coup demain

  2. #2
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    c'est le message d'erreur classique qui apparait quand on tente d'affecter un comme parent d'un objet .... un objet qui n'a pas encore de parents.

    PAr exemple, si tu cree dynamiquement un TPanel modifié qui cree dans son constructeur un TButton .. quand tu met Self (le tpanel) comme parent du TButton, il y a erreur car tu l'a pas fini le constructeru du TPanel donc pas encore executé la ligne "Pnl.PArent := XXX"; qui suis l'appel au constructeur ...

    Donc en gros, dans le constructeur, tu cree tes objets (TButon, etc ...) et tu affecte le parent dans ma methode SetPArent surchargée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Protected
      Procedure SetParent(AParent : TWinControl); Override;
     
    Procedure TMonPanel.SetPArent(APArent : TWinControl);
    Begin
    Inherited SetPArent;
    Self.Button.Parent := Self;
    End;
    Attention a tester la valeur de AParent selon les besoins car il est possible qu'il soit egal a Nil, notement quand le composant est detruit, un appel a setparent(nil) est effectué.

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Avant de parler du self il y a, à mon avis, déjà une embrouille redondante dans les variables locales. Pourquoi ne pas remplacer var Obj : array [1..100] of TIWImage; par var Images : array [1..100] of TIWImage; ce qui pour commencer clarifiera le code avec des Images[i] en supprimant bien entendu la ligne Obj [i] := Images; et la ligne var Images : TIWImage;

    Maintenant pour la question Parent := Quoi ? : En général, pour une image, je déclare comme parent la chose-support-existante ou préalablement-créée sur laquelle je veux que l'image soit posée Exemples : Parent := Form1; Parent := monPanelDiapos; etc.

    Et après la déclaration de Parent:=monSupport faut pas oublier de spécifier les coordonnées de positionnement des images par rapport au support et sa largeur + hauteur.

    Tiens, je m'aperçois que Clorish a été plus rapide que moi à répondre.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut

    J’ai crée une application tout simple --> un 1 bouton et 2 images.

    Donc pas d'objet dynamique…Juste pour faire un essai.
    Ben j'ai le même problème :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TIWForm7.IWButton1Click(Sender: TObject);
    begin
      IWImage1.SendToBack;
      IWimage2.BringToFront;
    end;
    --> Le contrôle n'a pas de fenêtre parente

    Je précise que j'ai fais cette essai sous IntraWeb.

    Merci pour le coup de main

  5. #5
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    LE controle (Image1 dans le premier cas) n'as pas de propriété parente valide.
    regarde si tu l'affecte bien juste apres le constructeur .. et avant la manipulation de l'objet.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut
    Effectivement dans le 1er cas, le Image1 n'as pas de propriété valide..
    Mais dans les 2 cas la fonction :

    IWImage1.SendToBack;
    IWimage2.BringToFront;

    ne fonctionnera pas... (même en aillant un projet VIDE et on mettant juste un bouton et 2 images (rien de Dynamique ! les composant je l’ai pose directement sur la TIwform)..Donc il doit i avoir un problème mais je ne c'est pas ou...
    En fait, mon problème na plus rien avoir avec les Object dynamique..
    mais bien avec IntraWeb qui ne gère apparemment pas les BringToFont et SendToBack

Discussions similaires

  1. [PowerBuilder] Création d'objets dynamiques
    Par Béné123456789 dans le forum Powerbuilder
    Réponses: 3
    Dernier message: 12/06/2006, 00h33
  2. Création dynamique d'objets ?
    Par Arthur A. dans le forum C++
    Réponses: 6
    Dernier message: 15/06/2005, 23h55
  3. création dynamique d'objet, projet win32
    Par noinneh dans le forum MFC
    Réponses: 5
    Dernier message: 03/02/2005, 16h07
  4. [FLASH MX2004] Création d'objet dynamiquement
    Par noarno dans le forum Flash
    Réponses: 3
    Dernier message: 15/12/2004, 11h00
  5. [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

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