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

Composants VCL Delphi Discussion :

[TFrame]


Sujet :

Composants VCL Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 45
    Points : 25
    Points
    25
    Par défaut [TFrame]
    salut

    jai une ptite question sur les frames:
    je crée dynamiquement 2 pages d'un Tpagecontrol dans lesquels jy "colle" un frame (donc issus de la meme source).
    comment faire par ex pour ajouter du texte dans le memo de la frame collé à la page 1 et dans le memo de la frame collé à la page 2.

    normalement sans frame on fait memo1.lines.add('texte') mais là...?

    merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaForm.MaFrame.MonMemo.Lines.Add('test')

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    je lai pas précisé mais "maframe" nest pas reconnu à la compilation puisquil est collé sur un onglet dynamiquement. donc voila quand je fais form1. au moment de mettre le "." jai la liste de tout ce qui est dispo mais pas "maframe".

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Peut être comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with MaForm.FindComponent('MaFrame') as TFrame do
      with FindComponent('MonMemo') as TMemo do
        Lines.Add('test');

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    je pense que ce serait plus parlant avec le code en question:
    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 TForm1.membresDblClick(Sender: TObject);
    var framedeouf : tframe;  
    begin
     
    //**********creation d'un onglet supplementaire************
         with PageControl1 do
         with TTabSheet.Create(Self)do
         begin
         PageControl :=PageControl1;
         caption := form1.membres.Items.Strings[form1.membres.itemindex];
         name := form1.pageControl1.Pages[form1.pagecontrol1.pagecount-1].name;
         memo1.Lines.add(name);
         end;
     
    //************collage du Tframe ds l'onglet precedement crée (cest donc là que le memo apparait
         framedeouf:= TFrame2.create(form1.pageControl1.Pages[form1.pagecontrol1.pagecount-1]);
         with framedeouf do
         begin
         parent:=(form1.pageControl1.Pages[form1.pagecontrol1.pagecount-1]);
         Left := 7;
         Top := 6 ;
         Width := 568;
         Height := 354;
         TabOrder := 0 ;
         end;
     
    //ici jaimerai ajouter le texte 'test' au memo contenu dans le TFrame collé dans longlet
     
    end;
    explications: ds un 1e temps je crée un onglet à mon page control (je nomme longlet en question) ds un 2e temps longlet cree je lui mets un tframe qui contient entre autre un memo.
    cest dans ce memo que jaimerai ajouter du texte.
    à priori le nom du frame devrait etre dans mon cas "framedeouf" nan ?

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    D'après ton code tu ne nommes pas ton TFrame !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [...]
     
    with TFrame2.create(form1.pageControl1.Pages[form1.pagecontrol1.pagecount-1]) do 
      begin 
         parent:=(form1.pageControl1.Pages[form1.pagecontrol1.pagecount-1]); 
         Name := 'MaFrame';
         Left := 7; 
         Top := 6 ; 
         Width := 568; 
         Height := 354; 
         TabOrder := 0 ; 
      end;

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    je viens d'ajouter la ligne name:='maframe';
    mais comme ce nest pas déclaré dans les var ben du coup quand je fais form1. etc... au "." jai toujours pas de "maframe' qui apparait.

    et du coup quand je fais mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     form1.maframe.memo1.Lines.add('test');
    le compilateur me mets "identificateur non declaré : maframe"

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Citation Envoyé par gamez
    je viens d'ajouter la ligne name:='maframe';
    mais comme ce nest pas déclaré dans les var ben du coup quand je fais form1. etc... au "." jai toujours pas de "maframe' qui apparait.
    Oui bien sûr mais as-tu testé le code que je t'ai passé ci-dessus ?

    Théoriquement tu n'auras aucun problème à compiler puisque le nom de ton TFrame est passé en tant que string...

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    je viens de le faire et en effet ca compile par contre ca ne donne pas leffet attendu:

    jai un memo ailleurs qui s'appelle memo1 celui du frame s'appelle aussi memo1 il ne devrait pas (dailleur jai pas de message derreur dessus) y avoir d'interferences entre ces noms puisquils sont à des endroits differents.

    en mettant ton code ca m'ajoute le "test" sur le memo1 qui na rien avoir avec le frame que jai crée. son chemin cest directement form1.memo1


  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Déjà renommes tes compos pour bien les différencier.

    Ensuite, as-tu bien testé ce code-ci (que j'ai édité il y a peu de temps donc peut être que...) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with MaForm.FindComponent('MaFrame') as TFrame do 
      with FindComponent('MonMemo') as TMemo do 
        Lines.Add('test');

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    ah jai remodifié il me mets un message derreur avec une boite de dialogue qui dit
    "violation d'acces a ladresse 0041a458 dans le module projetc.exe lecture de ladresse 00000010"

    en mettant en surbrillance la ligne "line.add('test')"

    ca na pas lair detre facile de manipuler les objets dans les frames

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Je viens à peine de m'apercevoir que nulle par tu indiques quelle form mettre dans ton TFrame !?

    Je n'ai jamais fait ça dynamiquement, regarde dans l'aide.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    dapres ce que jai regardé ll'aide ne peut pas m'aider.

    que veut tu dire par "e viens à peine de m'apercevoir que nulle par tu indiques quelle form mettre dans ton TFrame !?"

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Je voulais dire que tu créés bien un TFrame mais...vide !

    Ou bien je suis perdu

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    non jai fais la procedure normale: en passant par le menu fichier nouveau etc... en collant ce que je voulais quil contienne etc..

    bon merci en tout cas,
    ptete que qqun pourra me sortir de ce mauvais pas

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Bon, je veux bien te croire

    Si j'ai des nouvelles je te fais signe...

    @+

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    salut

    Bon il existe bien des solutions
    - qui consiste a faire défiler les objets enfants de ta form et quand tu trouve ta frame ( par sa classe) tu fait un Tframe(...) mais c'est pas propre
    - ou alors utiliser une tobjectList dans laquelle tu stock les frames crées pas compliquer ensuite de les faire défiler, on peut même les iddentifier par leur tag si besoin est
    .... mais tout ca c'est pas trés propre

    Le plus propre celon moi est de créer un objet qui contient un memo, ta forme contenant elle meme non plus un memo mais ton objet le MonMemo_Fram Ton objet posséde aussi une propriété add pour ajouter une ligne dans ton mémo et pourquoi pas déclencher un événement sur le OnAdd si tu as besoin d'un traitement spécifique.
    Lors du add, une frame dont le parent est par exemple le sender, passé en partamétre, est créée , et comme tu connais le texte dans ton objet il n'est pas compliqué de le mettre dans le memo que contient le frame ... j'espére être assé clair... mais pas certain...

    On peut alors pousser en disant que c'est le texte qui déclanche la frame et donc simplifier l'objet avec un simple string, qui est initialisé par un setstring ( property) ce setstring déclanche la création de ta frame et la aussi tu n'a pas de mal a ajouter le text dans le memo collé au frame car c'est le contenu du string qui compose ton objet.
    Reste à ajouter le contenu du string dans le memo1 suffit pour ce faire de déclancher un événement lors du setstring, événement récupéré par le programme principal et qui fait un memo1.Lines.add(name) ; name étant passé en paramétre dans l'événement que tu as créé.

    Bon ceci est simple si on sait faire si cela te semble compliqué je veux bien développer par petits bouts .

    en tous cas voici des directions de recherche .


    @ +++

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    salut et merci

    bon alors jai bien lu ta proposition cela semble etre specifique a lajout dun texte dans le memo.
    pour simplifier ma situation jai presenté le pb en disant vouloir ajouter du texte dans un memo dans un Tframe dans un onglet, le tout crée dynamiquement.
    seulement voilà ce netait quun pretexte pour savoir comment atteindre un memo dans cette chaine d'appartenance.

    en fait jai bien lintention dajouter plusieurs elements dans mon Tframe, des boutons, des cases à cocher, memos, Tedit etc....

    bref tous ces objets sont facilement accessibles et manipulables sils etaient directement dans la TForm ou dans un onglet directement mais dès quils sont mis dans un TFrame crée dynamiquement ca ne marche plus du tout pareil et les ennuis commencent...

    enfin de compte je voulais savoir si c possible d'agir sur un objet dun TFrame de la meme fcon que si cet objet etait directement sur ue TForm?
    ex 'texte := edit1.text' ou faut il obligatoirement passer par des artifices pour le faire?

    je precise qu'en statique tout est encore simple chaque objet est accessible par maform.maframe. etc..
    en dynamique le "maframe" netant pas encore existant en dur dans le programme le compilateur refuse maform.maframe.etc.. car le "maframe" napparait pas encore dans le code il napparaitra quune fois crée dynamiquement. tout le probleme est la finalement.

  19. #19
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut


    pour eviter de le metre en dur utilise
    un (findcompoment(MonNomdeFrame) as TFrame)

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Salut

    dierctement non. mais cela reste possible en listant tes objets dans un TObjectList .

    A l'initialisation de ta form tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       Ma_liste_Objets := TObjectList.create;
    ensuite a chaque objet créé dynamiquement tu fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       Ma_liste_Objets.Add(Un_nouvel_Objet);
    Pour rechercher un objet tu fais défiler ta liste tu peux trouver l'objet désiré a partir de sa propriété name par exemple et sa classe par classename.

    Si ton objet est par exemple un TButton tu auras quand l'objet sera iddentifier des syntax du style :

    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
     
       // Tbutton 
     
       TButton(Ma_liste_Objets.items[ref]).visible := False;
     
      // et pour ton mémo dans ta frame plus besoin de faire 
      // référence a la frame parente tu tape directement avec Tmemo(....)
      // pour savoir si tu as plusieurs objets si c'est le bon tu peux controler
      // par exemple si la classe du parent est celle désirée et si oui 
      // si c'est le bon
     
      If TButton(Ma_liste_Objets.items[ref]).parent.classename = TFram then  
      begin
             ......
             // ainsi de suite bref on peut tout faire mais faut poser des régles 
      end;
    @ ++

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Composant graphique multiple (ou dérivé d'un TFrame)
    Par Jean Bovet dans le forum C++Builder
    Réponses: 5
    Dernier message: 30/04/2007, 18h57
  2. Comment charger un TFrame depuis une dll ?
    Par Millenod dans le forum Langage
    Réponses: 29
    Dernier message: 22/12/2004, 14h48
  3. [tframe] passage d'un cadre a l'autre
    Par badrou dans le forum Composants VCL
    Réponses: 11
    Dernier message: 30/11/2004, 15h32
  4. [TFrame] Problème de gestion du OnMouseDown avec une Frame
    Par xherault dans le forum Composants VCL
    Réponses: 5
    Dernier message: 23/05/2003, 15h35
  5. Problème avec un TFrame
    Par mixi dans le forum Langage
    Réponses: 4
    Dernier message: 12/09/2002, 13h25

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