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 :

[D7] Création dynamique d'un TMemo


Sujet :

Composants VCL Delphi

  1. #1
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut [D7] Création dynamique d'un TMemo
    Bonjour,
    je veux créer un Memo temporaire grâce à une fonction :

    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
    { ===================================================================== }
    Function TF_Princ.ExportTreeView(ATreeView: TTreeView; Filename : String): Boolean ;
    Var
      i: Integer ;
      ANode : TTreeNode ;
      Tabulation : String ;
      Memo   : TMemo ;
    Begin
      Result := False ;
      Memo := TMemo.Create(Self) ;
      Try
        Memo.Parent := Self ;
        for i:=0 to ATreeView.Items.Count-1 do
          Begin
            ANode := ATreeView.Items[i] ;
            Tabulation := StringOfChar(Chr(9), ANode.Level) ;
            Memo.Lines.Add(Tabulation+ATreeView.Items[i].Text) ;
          End ;
        Memo.Lines.SaveToFile(Filename) ;
        Result := True ;
      Finally
        Memo.Free ;
      End ;
    End;
    { ===================================================================== }
    J'ai mis Self dans le Create et dans le Parent. ça fonctionne, mais est ce correct ? et que représente Self dans ce cas ?


    Merci de vos lumières
    A+
    Charly

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 392
    Points : 635
    Points
    635
    Par défaut
    ton memo est inutile dans ton code, utilise simplement une TStringList, le self est la fiche TF_Princ

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    ATreeView.SaveToFile(Filename);

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 449
    Points : 24 856
    Points
    24 856
    Par défaut
    Comme c'est pour D7, je peux proposer ce vieux code : Gestion complète d'une TreeView: ajout de noeuds, records et sauvegarde du tout

    ATreeView.SaveToFile fonctionne très bien, attention à ATreeView.LoaFromFile ... cela ne protège pas contre un noeud qui contient un text avec un espace\tab au début faussant la profondeur.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Merci à tous,

    effectivement je n'avais pas pense à la TStringList !!

    le SaveToFile du TTreeView fait le même travail, mais je ne peut pas personnaliser le fichier

    A+
    Charly

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par Charly910 Voir le message

    J'ai mis Self dans le Create et dans le Parent. ça fonctionne, mais est ce correct ? et que représente Self dans ce cas ?
    http://tothpaul.free.fr/tips.php?pv_class
    Un point d'Owner:

    la valeur de Owner peut prendre quelques valeurs remarquables :
    Application, c'est l'objet de plus haut niveau d'une application Delphi, en créant un composant dont le propriétaire est "application", vous vous assurez qu'il sera détruit en quittant votre programme (fin de l'application).

    Form1, ou tout autre composant de type TForm, sur une application contenant différentes fenêtres, vous vous assurez de la destruction du composant à la fermeture de la fenêtre à qui vous attribuer le composant.

    SELF, ce paramètre parfois mal compris indique tout simplement que l'objet créé depuis une méthode objet aura pour propriétaire l'objet à qui appartient la méthode en cours ! Revoir l'explication de SELF dans le chapitre Object

    nil, il est tout à fait valide d'indiquer que le composant ne possède pas de propriétaire (nil = 0), mais il vous appartiendra alors de le détruire en temps util, personne ne le fera à votre place.
    http://tothpaul.free.fr/tips.php?pv_object
    le seul fait de déclarer des procédures ou fonction (appelées méthodes) à l'intérieur de l'objet ajoute automatiquement à celles-ci un paramètre nommé SELF qui pointe sur l'objet lui même.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 449
    Points : 24 856
    Points
    24 856
    Par défaut
    Et encore plus subtil, dans une méthode de Classe, Self c'est la classe, utile pour écrire un code pour un dialogue ultra minimaliste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class function TFormMachin.Execute(): Boolean;
    begin
      with Self.Create() do // Self n'est pas une instance TFormMachin mais directement la classe TFormMachin (un peu comme si Self était une variable de type "Class of TFormMachin")
      try
        Result := ShowModal() = mrOK;
      finally
        Free();
      end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 449
    Points : 24 856
    Points
    24 856
    Par défaut
    Citation Envoyé par Charly910 Voir le message
    Merci à tous,

    effectivement je n'avais pas pense à la TStringList !!

    le SaveToFile du TTreeView fait le même travail, mais je ne peut pas personnaliser le fichier

    A+
    Charly
    As-tu regardé le code que j'ai fourni ?
    Il est vieux mais tu peux sauvegarder et charger ton TTreeView y compris les Data (si tu fais les méthodes de sérialisation adapté, je n'ai jamais pris le temps de faire un truc générique en RTTI)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Points : 292
    Points
    292
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      TDataNode = record
        S: String;
        FontColor: String;
        I: Integer;
        Index: Integer;
        SelIndex: Integer;
      end;
    il est possible de mettre ce code dans un nouveau type descendant de TTreeNode qui sera utilisé par défaut par la TreeView pour les éléments de la liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      TNewNode=class(TTreeNode)
      public
        S: String;
        FontColor: String;
        I: Integer;
        Index: Integer;
        SelIndex: Integer;
      end;
    dans l'événement OnCreateNodeClass on demande la création des instances de ce type


  10. #10
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Merci Paul, j'avais déjà lu ton post sur le Aowner. Effectivement le create(Nil) fonctionne bien.

    Merci Shai, j'ai regardé ton code, mais mon cas est tout bête, je n'ai pas de datas dans mon TreeView (je vais quand même tester)

    Merci Andnotor, le savetofile du TTreeView marche bien et indente les noeuds

    Merci ExoSeven pour le TStringList (c'est la solution que je conserve, car je peux faire ce que je veux dans le fichier txt, rajouter des lignes, ...)

    Merci Wheel, même si je n'ai pas compris l'intérêt de TNewNode dans mon cas

    Merci à tous pour vos explications sur Self.

    A+
    Charly

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

Discussions similaires

  1. Création dynamique de TMemo dans un thread ?
    Par MaTHieU_ dans le forum Delphi
    Réponses: 2
    Dernier message: 07/07/2006, 12h35
  2. [D7] Création dynamique de Form
    Par jer64 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 03/08/2003, 12h20
  3. [Rave Report] problème de création dynamique
    Par Nivux dans le forum Rave
    Réponses: 2
    Dernier message: 24/05/2003, 00h07
  4. TWebBrowser et création dynamique
    Par BakaOnigiri dans le forum Web & réseau
    Réponses: 2
    Dernier message: 01/09/2002, 10h53
  5. Création dynamique de TImages
    Par Dric dans le forum C++Builder
    Réponses: 10
    Dernier message: 08/07/2002, 12h36

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