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 :

Depuis un record dans une Unit separee ecrire dans mainForm


Sujet :

Delphi

  1. #1
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 491
    Points : 245
    Points
    245
    Par défaut Depuis un record dans une Unit separee ecrire dans mainForm
    Bonjour,

    J'ai un GUI a faire.
    J'ouvre un programme qui ouvre et lit un fichier.
    Le contenu est un csv qui est interprété et chaque sous-string est chargé dans une variable séparée après test de validation.
    La lecture est arrêtée après chaque ligne avec un ShowMessage()

    Mes record sont stockes dans une tables et sont générés dans un Unit séparé. Ici Unit2

    Je veux maintenant après la lecture de la ligne:
    1) Afficher le contenu dans la fenêtre FMain, ici Unit1, qui est dans une Unit séparée.
    2) Compléter ces données avec des saisies dans des Textbox et enfin sauver tout ça dans un autre fichier.

    Mon problème est que je ne peux passer tout de suite de Unit2 ou sont les donnees vers Unit1.
    J'ai bien essaye de déclarer une procédure d’écriture sur le GUI déclarée publique dans Unit1 pour pouvoir l'utiliser depuis Unit2, mais elle n'est pas visible.

    En dessous, ce que j’espérais pouvoir faire:

    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
     
     
    // Dans mon FMain (Unit1), qui gère la fenêtre principale:
     
    public
        { Déclarations publiques }
        procedure writeContentLLabel(dAPort : ShortString);
        // Je vous fait grâce de l’implémentation;-)
      end;
     
    var
      FMain: TFMain;
      success		: boolean;
     
    //***************************************************
     
    // Dans Unit2 ou j'ai mes records et tables 
    // Dans uses j'ai aussi FMain
     
     
    FMain.writeContentLLabel(shortStringValide);
     
    //Pour passer le String au GUI
    Est-ce que c'est une fausse bonne idée, comment je dois faire??

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Je ferais l'inverse !
    L'unité gérant le données ne doit faire QUE ça

    Tu peux avoir PLUSIEURS unités qui font l'affichage des données sous différentes formes (Grille, TreeView, ...)

    Voir le MVC pour ce genre de concept

    Unit2 - tu devrais la renommer en uCSVReader ou uMonFormatAMoi par exemple
    Ne doit contenir QUE la lecture du CSV

    Unit1 - tu devrais la renommer en uMainForm par exemple
    Utiliser une classe TCSVReader déclaré dans uCSVReader avec des méthodes classiques comme LoadFromFile

    Cas uCSVReader
    Si c'est une lecture générique de CSV alors, il te faut un code générique avec des propriétés comme FieldCount et FieldValues[ACol, ARow]

    Sache que pour le CSV, tu trouveras des articles qui traiteront de l'utilisation de TDataSet soit via BDE, ADO (Excel) ou même un TClientDataSet !

    Cas uMonFormatAMoi
    Si tu veux une lecture TRES spécifique d'un CSV et conserver ton array of record
    Je te conseille aussi de l'encpasuler dans un objet pour que dans uMainForm, l'utilisation soit extrement simple !

    Au final, tu verras que ton code ressemblera énormément à la syntaxe habituel du TDataSet !

    Je dirais même que tu peux faire trois unité
    - uCSVReader : utilisation générique d'un CSV
    - uMonFormatAMoi : utilise le TCSVReader pour se remplir et avoir un accès simplifié au données (par forcément un array of record, juste un objet intermédiaire pour avoir un code final plus simple)
    - uMainForm : utilise TMonFormatAMoi pour lire les données et les afficher

    Plus tard, tu pourras réutiliser TCSVReader dans un objet TLeFormatDeLAutre
    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

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    Par défaut
    Mettre le code de lecture du csv dans une classe
    Créer un événement dans cette classe qui indiquera qu'il y a une donnée texte à récupérer
    Mainform crée une instance de la classe et lie une procédure à l’événement de la classe.
    Mainform lance la lecture par une procédure publique de la classe.
    Cette procédure déclenche l'l’événement à chaque ligne, récupéré dans Mainform pour affichage.

  4. #4
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 491
    Points : 245
    Points
    245
    Par défaut
    Bonjour,

    J'ai trouver hier en fait une solution qui ressemble a ce que shai décrit comme processus de travail.
    Mon machin la pèche un peu dans l'organisation. J'apprends et j'ai encore du mal a faire des choses mieux structurées.

    Merci pour les reponses

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

Discussions similaires

  1. Ecrire dans une unité interdite en écriture
    Par colorid dans le forum EDI
    Réponses: 2
    Dernier message: 09/10/2012, 10h17
  2. Réponses: 9
    Dernier message: 13/03/2008, 01h34
  3. insertion dans une table puis update dans une autre table
    Par uptoditime dans le forum VBA Access
    Réponses: 5
    Dernier message: 10/10/2007, 18h08
  4. Recherche de valeur dans une feuille et affichage dans une autre
    Par Zebulon777 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/05/2007, 09h40
  5. Réponses: 3
    Dernier message: 06/09/2006, 09h06

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