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 :

Contenu TRichEdit/Tmemo + Type record & fichier indexé


Sujet :

Delphi

  1. #1
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 42
    Points
    42
    Par défaut Contenu TRichEdit/Tmemo + Type record & fichier indexé
    Bonjour

    Je suis en train d'écrire un gestionnaire de Mémos/Notes diverses.
    Ma fiche "Memos contient notament, un identifant, un libellé, un type de mémo, et un mémo au sens Delphi (TMemo ou un TRichEdit)..
    Suis déjà bien avancé dans la gestion de fiche, mais je bute sur l'orientation à prendre relative au stockage record et fichier.

    Je désire stocker tout cela dans un record ou packed record (PhcMemo : Record dans le code annexé) et ensuite dans un fichier avec accès indexé.
    1) Peut-on déclarer directement TRichEdit ou un Tmemo dans un type record ? 2) La taille du Mémo ou RichEdit n'étant pas fixe, celle du record ne le sera pas non plus, ne vais-je pas rencontrer un énorme problème avec mes instructions du type Fic.Read(PhcMemo,SizeOf(TPhcMemo) et mes positionnements dans le fichier ? (en fait je m'aide d'un tuto fichier indexé http://eraquila.iquebec.com/ et la taille du record toujours invoquée est TOUJOURS FIXE contrairement àmon cas.

    Désolé, vraiment une question de débutant ?!
    Merci pour votre aide.



    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
    Type
    TPhcMemo=Record
    TriOnId:Boolean;
    Langage:Integer;
    MemoID:Integer;
    StyleID:Integer;
    LibStyle:string[20];
    Lng:string[1];
    StructID:Integer;
    LibLvl1:string[100];
    LibLvl2:string[100];
    LibLvl3:string[100];
    LibLvl4:string[100];
    LibLvl5:string[100];
    ModelID:Integer;
    LibModel:String[20];
    Titre:string[50];
    KeyWrd1:string[20];
    KeyWrd2:string[20];
    KeyWrd3:string[20];
    Memo: TMemo;                    //ici si je veux mettre TRichEdit : refusé !
    MemoR:TMemo;                    // Memo Résumé
    LnkNet:string[255];
    LnkPdf:string[255];
    LnkImg:string[255];
    LnkMsDoc:string[255];
    Num1:Real;
    Num2:Real;
    Date1:Tdate;
    Date2:Tdate;
    DateModif:TimeDate;
    DateSaisie:TTimeDate;
    FlgSup:String[1]
    End;

  2. #2
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Ajoute dans les uses : StdCtrls,ComCtrls;
    pour déclarer des TMemo et des TRichEdit dynamiquement

    a+

  3. #3
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Archimède Voir le message
    Ajoute dans les uses : StdCtrls,ComCtrls;
    ok ai pu déclarer lesTmémo et les RichEdit

    Question 2 ? si mon texte n'est pas clair demandez

    ) La taille du Mémo ou RichEdit n'étant pas fixe, celle du record ne le sera pas non plus, ne vais-je pas rencontrer un énorme problème avec mes instructions du type Fic.Read(PhcMemo,SizeOf(TPhcMemo) et mes positionnements dans le fichier car la sizeOf(ThcMemo n'est pas fixe)

    Le tuto qui m'aide -fichier indexé http://eraquila.iquebec.com/ - évoque une taille du record TOUJOURS FIXE contrairement àmon cas.

    a+
    Merci de m'aider afin que je n'emprunte pas la mauvaise voie. Ai lu sur les forum les dangers des longueurs non fixes...

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    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 586
    Points : 25 256
    Points
    25 256
    Par défaut
    TMemo c'est un pointeur, c'est une référence sur un Objet, cela n'écrira que 4 octets dans le fichier !

    Faudrait connaître un minimum le langage avant de poser de se lancer !

    as-tu besoin de fichier indexé ? c'est complexe à mettre en place, à maintenir !
    En plus, il existe quelques choses de mieux au Fichier Séquentiel Indexé, les célèbres SGBDR, comme MySQL qui est gratuit si ton programme est Open Source (voir licence chez Oracle), et tu as juste une petite DLL à utiliser (voir le TMySQLDataSet gratuit disponible quelques part sur le Forum)


    En plus avec un fichier à structure fixe, le gain ne sera pas énorme vu la petite quantité de données que tu vas gérer !
    Si tu ne connais pas les principes même des références en Delphi, vouloir faire ce type de développement est courageux ou tu ne mesures pas le travail !
    C'est proche de créer son proche système de DB, c'est pas "Débutant"

    Utilise donc un TClientDataSet pour stocker sous format XML tes données !

    Si ta version de Delphi ne contient pas cette classe, il y a plein de solutions différentes :

    Pour la Structure Fixe, tu peux l'utiliser quand même, en séparant la donnée variable des Memo dans un Autre fichier, et tu stockes dans ta Structure Fixe l'octet de départ du BLOB et sa longueur réel dans l'autre fichier, bien sur lors de la modification, il soit récréer tout le fichier de BLOB soit géré un système de Fragmentation, ... on en revient à un truc compliqué

    Autre solution plus simple, tu limites ton Memo a 4000 caractères, c'est limitatif, mais rapide à coder

    Autre Solution, un peu lourde peut-être mais super fiable
    tu créés un fichier par note (un par MEMO), et tu lie le fichier (via un nommage intelligent genre numéro de la note 000000001 donne le le fichier /001/000001/000000001.txt) à ta Structure Fixe (perso, c'est ce que j'ai fait dans le mien, il y a 10 ans )
    Le Numéro de la Note, c'est juste sa position dans le Fichier, tu ne gère évidemment pas d'AutoInc !


    On a même déjà abordé le sujet sur le forum, si j'ai le temps, je te retrouve le sujet

  5. #5
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 42
    Points
    42
    Par défaut Réponses de ShaiLeTroll
    Merci Shai, me doutais que tu interviendrais sur ce type de sujet, suis ravi

    petit complément si pas d'abus
    Je résume :

    sol 1 :Sgbd
    Sol 2 : Xml: bien une solution en soi séparée de la 1 ? Aurait aussi l'avantage d e pouvoir stocker un image documentant le mémo, non

    Ne maîtrisant pas (encore!) ces techn, et voulant arriver à une première version foncitionnelle que j'améliorerai, j'opterai pour une des deux suivantes

    sol 3 : Memo de 4000 caract. Sous quelle(s) types(s) de var les stocker dans mon "record" en une seule var (type/long?) -ou décomposer le mémo en une série de x lignes (MémoLines) si toutefois on pouvais au préalable - pour éviter de tronquer les phrases, plafonner la long chaque ligne du mémo ? Le plus simple et le plus rapide dans un premier temps, stp ?

    Sol 4 :J'avais imaginé le nommage intelligent d'un hyperlink vers une note .html (consitutée par lecture du TMémo) , dont je coderais l'ouverture pour consultation lors de l'ouverture de la partie fixe du mémo. Est-ce bien ce principe que tu me suggères avec les "txt"? si tu retrouves le point traité sur le forum super ! (ta solution en fait d'il y a 10 ans)

    Merci encore

  6. #6
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut
    Une "Note", c'est juste un texte qui se stocke très bien dans un fichier .txt.
    Pour ma part j'utilise la date de création (un peu mise en forme) comme nom, c'est simple et sans ambiguité.
    Pour t'y retrouver, un simple fichier texte "table des matières" dont chaque ligne renvoie à un fichier "Note".
    Mais on peut imaginer plus compliqué...

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    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 586
    Points : 25 256
    Points
    25 256
    Par défaut
    Le mécanisme de Nébulix est celui que j'avais fait pour mon 1er Programme de Note, le Nom du Fichier avec la Date !
    C'est ensuite que j'ai ajouté une gestion de Projet et Titre, et un autre système de Numérotation (je voulais en faire un outil utilisable en réseau), je crois que je l'ai jamais fini, les sources étaient sur un CD qui n'a pas survécu !

    Sol 3
    Pour stocker 4000 caractères, tu peux utiliser un Array[0..3999] of Char, cela se manipule presque comme une chaine, disons que tu as toutes les fonctions pour faciliter ce genre de Manip !

    Sol 4
    Tu pourrais plutôt utiliser du RTF avec un RichEdit si tu veux un Editeur type WordPad (il y a un exemple sur le CD de Delphi tout prêt)
    HTML ne t'apportera rien, tu voulais surement évoqué la méthode de navigation plus que le stockage non ?

    En tout cas, c'est la solution la plus efficace pour commencer, une fois finie, tu pourras t'exercer avec la méthode du fichier indexé (c'est comme ça que l'on passe de "débutant" à "expert" )

    Sur le forum, on a parlé d'une gestion de fichier indexé (le plus proche serait TTextFileReader qui permet de mapper un fichier Texte de grande taille pour s'y déplacer ensuite très rapidement, mais un autre sujet plus pertinent sur la gestion de fichier indexé avait aussi été discuté, le plus gros problème étant que l'on est forcé de déplacer des zones entières du fichier vers une autre zone lors d'une insertion, c'est qui avait animé le débat, comment les SGBD pouvait être aussi rapide pour gérer cela via l'utilisation d'Arbre !), j'avais mis un bout de mes codes, de mon projet de notes, ça doit peut-être trainer dans les archives de Phidels (à l'époque, c'est LE Forum Delphi !)

Discussions similaires

  1. copie dossier et contenu en excluant type de fichier
    Par julien0709 dans le forum VBScript
    Réponses: 2
    Dernier message: 20/06/2008, 13h59
  2. Image et Fichier type record
    Par aliwassem dans le forum Langage
    Réponses: 6
    Dernier message: 22/01/2006, 15h23
  3. Fichier type Record et ListView
    Par aliwassem dans le forum Langage
    Réponses: 4
    Dernier message: 01/12/2005, 15h30
  4. [LG]fichier typé; record et pointeurs
    Par rigel dans le forum Langage
    Réponses: 6
    Dernier message: 12/05/2004, 16h12
  5. Structure de données de type "RECORD"
    Par chaours dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2002, 17h10

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