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 :

[Delphi 7] Ajouter une instance de composant dynamiquement


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut [Delphi 7] Ajouter une instance de composant dynamiquement
    Bonjour,
    L'intitulé de cette discussion est peut-être faux (pb de vocabulaire ?).

    Pour obtenir un Memo sur une Form, on clique sur l'icône du composant TMemo, puis on le 'dessine' sur la forme.
    C'est ce que je voudrais faire dynamiquement, c'est à dire ajouter un Memo lors de l'exécution d'une procédure, soit quelque chose du genre Create Memo2, voire le supprimer ensuite par un Destroy Memo2. (je ne souhaite pas créer un nouveau composant !).

    D'avance merci.
    Cordialement,

    Alain

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Par défaut
    Bonjour,

    Pour créer un TMemo vous pouvez essayer quelque chose de ce type.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function Tform1.CreateNewMemo(Parent: Twincontrol; Left, Top: Integer;): TMemo;
    begin
      Result := TMemo.Create(Self); // ici self est la form
      Result.Parent := Parent;
      Result.Left := Left;
      Result.Top := Top;
    end;
    Pour détruire le TMemo utiliser la fonction Free.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut
    Merci pour votre réponse rapide.
    Pouvez-vous m'aider à implémenter votre fonction (voir les ??? dans l'appel de la fonction ) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.FormActivate(Sender: TObject);
    begin
      CreateNewMemo(???,100,100);
    end;
    
    function CreateNewMemo(Parent: Twincontrol; Left, Top: Integer): TMemo;
    begin
      Result := TMemo.Create(Self); // ici self est la form
      Result.Parent := Parent;
      Result.Left := Left;
      Result.Top := Top;
    end;
    Merci

  4. #4
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut

    Le parent peut être Self donc Form1 en l'occurrence, ou tout autre contrôle un Panel par exemple.

    @+ Claudius

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Par défaut
    Si vous poser un TMemo sur une form, le parent du memo est la forme.

    si vous poser un TPanel sur la form le parent du panel est la forme.

    Si maintenant vous poser le le TMemo sur le panel, le parent du memo est le panel.

    Donc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    CreateNewMemo(Form1,100,100); // création d'un TMemo sur la Tform Form1
     
    CreateNewMemo(Panel1,100,100); //  création d'un TMemo sur le Tpanel panel1

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut
    Grand merci à tous deux ! (Tardiff Jean-François a tout à fait saisi à quel bas niveau je me situe en ce qui concerne la compréhension de la notion d'objet et d'héritage, c'est dur tout seul !).
    Après plusieurs essais, ça marche ! Un nouveau Memo apparaît sur la forme
    Mais comment connaître son nom (Memo1, Memo2,... ???) afin de pouvoir l'utiliser ?
    Je suppose que l'on peut suivre la même démarche pour un autre composant (DBGrid, Datasource, etc...).

  7. #7
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par alainvh Voir le message
    Grand merci à tous deux ! (Tardiff Jean-François a tout à fait saisi à quel bas niveau je me situe en ce qui concerne la compréhension de la notion d'objet et d'héritage, c'est dur tout seul !).
    Après plusieurs essais, ça marche ! Un nouveau Memo apparaît sur la forme
    Mais comment connaître son nom (Memo1, Memo2,... ???) afin de pouvoir l'utiliser ?
    Je suppose que l'on peut suivre la même démarche pour un autre composant (DBGrid, Datasource, etc...).
    en effet il n'est pas ici question d'héritage ^^

    Memo1 est un champ de Form1 créé automatiquement par Delphi quand on pose le composant. Lors de la création de la fiche, via la lecture du DFM le champ Button1 reçoit l'instance TMemo créée automatiquement par la fiche.

    dans ton cas, il suffit d'ajouter un champ Memo2 dans la fiche et lui affecter le résultat de la fonction CreateNewMemo()

    Tu peux aussi définir sa propriété Name si tu le désires.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function CreateNewMemo(Parent: Twincontrol; Left, Top: Integer): TMemo;
    begin
      Result := TMemo.Create(Self); // ici self est la form
      Result.Parent := Parent;
      Result.Left := Left;
      Result.Top := Top;
    end;
    Parent est ici le composant ou sera afficher le Memo.
    Par exemple :
    - si tu veux le mettre sur la fiche directement, met la fiche
    - si tu veux le mettre sur un pannel, met le pannel.
    Left et Top est fonction du parent.

    A+

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 592
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 592
    Par défaut Je viens d'essayer ceci
    @ Alainvh, essaye ceci :

    TestMemo est ma fiche.

    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
     
    procedure TTestMemo.FormCreate(Sender: TObject);
    Var
    i, TH, TW: integer;
    P,P2  : TMemo;
     begin
     TW := 320;
     TH := 200 ;
     p:=   Tmemo.Create(TestMemo);
     p2:=   Tmemo.Create(TestMemo);
     
    With p do
       begin
       Parent := TestMemo;
       Top:= 20 ;
       Left := 20;
       Width := TW;
       Height := TH;
       end;
    With p2 do
       begin
       Parent := TestMemo;
       Top:= 20 ;
       Left := 360; // Largeur + espace
       Width := TW;
       Height := TH;
       end;
     
    end;
    N'oublie pas de libérer par P.free, P2.free et suivant si plusieurs Memo.

    @+,

    Cincap

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut
    Merci aussi à Andry et Cincap.

    A Cincap, j'ai fait un bête copier-coller de votre solution. Résultat : erreur de compilation à la déclaration de variable var P : TMemo; (message : [Erreur] Unit1.pas(28): Identificateur non déclaré : 'TMemo')

    Je pose une nouvelle question (car vos réponses me fournissent un super-éclairage !!!). L'aide Delphi nomme les parents de TMemo ( de TObject jusqu'à TCustomMemo) : comment savoir que c'est TWinControl qui doit être utilisé pour répondre à mon pb (cf. messages ci-dessus) ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut
    Merci beaucoup, Cincap : ça baigne
    Et en plus, cette discussion m'a fait faire un bon progrès d'ordre général.

    Si d'aventure, quelqu'un peut m'éclairer sur ma dernière question, je passerai de bonnes fêtes (L'aide Delphi nomme les parents de TMemo ( de TObject jusqu'à TCustomMemo) : comment savoir que c'est TWinControl qui doit être utilisé pour répondre à mon pb (cf. messages ci-dessus) )?

    Encore merci à tous et... bons réveillons !!!

    Cordialement,
    Alain

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

Discussions similaires

  1. Ajouter une colonne au composant treeview ?
    Par le_chomeur dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/07/2008, 15h22
  2. Ajouter une propriété à un composant
    Par aliwassem dans le forum Composants VCL
    Réponses: 5
    Dernier message: 08/03/2008, 18h56
  3. Ajouter une ligne de FORM dynamiquement
    Par redabadache3 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 10/10/2007, 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