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 :

[Débutant] Créer des composants dynamiquement, dans un composant créé dynamiquement.


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 5
    Points : 5
    Points
    5
    Par défaut [Débutant] Créer des composants dynamiquement, dans un composant créé dynamiquement.
    Bonjour !

    Je débute avec Delphi et j'utilise la version 7 Professionel.

    Voici mon problème.
    J'ai un TScrollBox dans lequel je doit créer dynamiquement, X nombre de composant TPanel, dans lesquel je doit placer 1 TLabel et 2 TRadioButton.

    Je n'ai aucune problème à créer les TPanel, mais c'est au moment de créer le TLabel et les TRadioButton que je m'y perd...

    Merci de votre aide

  2. #2
    Membre habitué Avatar de PierreDelcroix
    Profil pro
    Inscrit en
    Février 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 90
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2007
    Messages : 86
    Points : 192
    Points
    192
    Par défaut
    Cela ne dit pas beaucoup, on ne peut pas montrer que le code ?

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    Tu renseignes bien la propriété Parent c'est souvent le problème des créations dynamiques car on confond souvent avec le owner. Sinon mets un peu de code...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Voici mon 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
    40
    41
    42
    43
    44
     
    procedure TForm1.DisplayAss(Sender : TObject);
    var
      QSelAss : TQuery;
      x : Integer;
    begin
      QSelAss := TQuery.Create(Form1);
     
      QSelAss.DatabaseName := 'BDCOMPLET';
      QSelAss.SQL.Clear;
      QselAss.SQL.Add('SELECT DISTINCT(D."Code Compagnie"), D."Nom Compagnie"');
      QselAss.SQL.Add('FROM "cfg_ass.db" D');
      QSelAss.Open;
     
      SBass.DestroyComponents;
      QSelAss.First;
     
      x := 0;
      While not QSelAss.eof do
        begin
     
           With TPanel.Create(SBAss) do
            begin
              Parent := SBAss;
              Name := 'Pa' +  QSelAss.FieldbyName('Code Compagnie').AsString;
              Caption := '';
              BevelInner := bvNone;
              BevelOuter := bvNone;
              BorderStyle := bsSingle;
              BorderWidth := 1;
              Color := $00E2E2E2;
              Ctl3D := False;
              Left := 2;
              Top := 2 + (24 * x);
              Width := 457;
              Height := 22;
              Visible := True;
           end;
     
              QSelAss.Next;
              inc(x);
        end;
     
    end;
    SBAss est un TScrollBox que j'ai crée sur la Form1.
    Ce que je veut crée dedans, c'est une nombre inconnue (dépendant du nombre d'enregistrement dans la BD) de TPanel contenant chacun d'autres éléments créés dynamiquement.

    Le nom de chacun des TPanel est généré selon le contenu du champ dans la BD, donc je ne le connais pas au moment de créer les composant à l'intérieur de chaque TPanel...

    J'espère être clair...

    Merci de votre aide.

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Voici un exemple de création dynamique de composants :

    - 1 JvCaptionPanel (que tu pourras remplacer par un panel
    - 3 label créé dynmiquement dans le JvCaptionPanel

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    procedure CreateItems(sName : string);
    var
      jvcnPanel : TjvCaptionPanel;
      lblSource : TLabel;
      lblDest   : TLabel;
      lblEtat   : TLabel;
      Compo : TComponent;
    begin
      jvcnPanel := TJvCaptionPanel.Create(frmMain.ScrollBox1);
      With jvcnPanel do
      begin
        Align := alTop;
        CaptionPosition := dpTop;
        Name := 'jvcn' + sName;
        OutlookLook := true;
        Height := 80;
        Parent := frmMain.ScrollBox1;
        Caption := '';
        Resizable := False;
        Locked := True;
        Visible := True;
      end;
     
      Compo := TJvCaptionPanel(frmMain.ScrollBox1.findComponent('jvcn' + sName));
      lblSource := TLabel.Create(Compo);
      With lblSource do
      begin
        Left := 8;
        Top := 24;
        Name := 'ES' + sName;
        Parent := TJvCaptionPanel(Compo);
        Caption := '';
        Visible := True;
      end;
     
      lblDest := TLabel.Create(Compo);
      With lblDest do
      begin
        Top := 40;
        Left := 8;
        Name := 'ED' + sName;
        Parent := TJvCaptionPanel(Compo);
        Caption := '';
        Visible := True;
      end;
     
      lblEtat := TLabel.Create(Compo);
      With lblEtat do
      begin
        Top := 56;
        Left := 8;
        Name := 'ET' + sName;
        Parent := TJvCaptionPanel(Compo);
        Caption := '';
        Visible := True;
      end;
      Application.ProcessMessages;
     
    end;

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Bon ! C'était pourtant très simple
    Merci bcp pour ton aide !

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/05/2014, 11h31
  2. Réponses: 3
    Dernier message: 06/01/2013, 13h49
  3. Réponses: 1
    Dernier message: 04/05/2011, 17h10
  4. Réponses: 2
    Dernier message: 31/03/2006, 16h48
  5. [Débutant] Créer des belles fenêtres à la façon Linux ou Win
    Par wikers dans le forum x86 32-bits / 64-bits
    Réponses: 10
    Dernier message: 10/02/2005, 13h17

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