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 :

Nouveau programme pour débutant


Sujet :

Delphi

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Nouveau programme pour débutant
    Bonjour,

    J'ai l'intention de faire un programme pour mon travail, j'ai déjà tout imaginé par écrit, il faut maintenant que je code le tout...

    J'ai des petites bases en Delphi, mais là je bloque sur un truc et je ne sais pas comment faire, si quelqu'un pouvait m'aider ce serait super.

    En fait je souhaiterai qu'au démarrage de l'application une première fenêtre s'ouvre (MainForm) avec divers champs à remplir, jusque là tout va bien, mes soucis arrivent :

    1/ je voudrai que certains renseignements mis dans la première fenêtre partent vers une seconde fenêtre, là je ne sais pas faire.

    2/ je souhaiterai que la deuxième fenetre réagisse avec une information donnée dans la fenetre principale. Je m'explique :
    - Première fenetre :
    "Inscrivez le nombre de cartons" avec un TEdit
    - Seconde fenetre :
    celle-ci apparaitra avec des informations à remplir en fonction du nombre de cartons demandé, exemple :

    J'ai demandé 4 cartons, la seconde fenetre aura :
    Longueur Largeur Poids
    Carton 1 TEdit 1 TEdit2 TEdit3
    Carton 2 TEdit4 etc....
    Carton 3
    Carton 4

    Comment faire pour avoir autant de ligne reprenant le mot "carton" avec le nombre croissant à côté, mais aussi comment faire pour que la fenetre génére autant de TEdit qu'il est nécessaire ?

    3/ Comment enregistrer toutes les informations de toutes les fenêtres, dans un fichier, et pouvoir les récupérer ensuite dans l'application afin de pouvoir modifier si besoin. Exemple : récupérer toutes les informations que j'ai mis pour les cartons mais il faut que je modifie le poids du carton 2.

    Comment faire pour pouvoir tout récupérer et modifier ? Sachant qu'il va y avoir plusieures fenêtres et que les informations doivent arriver au bon endroit ?

    Je m'excuse de vous ennuyer avec un truc pareil mais j'aimerai progresser dans mon projet. Ces points me bloquent et je n'avance plus.

    Merci beaucoup pour votre aide précieuse

    A bientôt
    Greg

  2. #2
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    Bonjour,

    bienvenu sur le forum ,

    Citation Envoyé par gregouz59 Voir le message
    1/ je voudrai que certains renseignements mis dans la première fenêtre partent vers une seconde fenêtre, là je ne sais pas faire.
    Dans Delphi, les form (les fenêtres) sont des objets. Tu peux voir dans la déclaration de ta première fenêtre : Form1 = class(TForm).
    Tout objet peut avoir des propriétés public. Il te suffit donc de déclarer dans ta deuxième fenêtre une property NbCartons (par exemple) et de la renseigner à partir de la saisie contenu dans le TEdit de ta première fenêtre.
    Ca va donner quelque chose qui ressemble à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Form2 = TForm2.Create( Application);
    Form2.NbCartons := Edit1.Text;
    Form2.showmodal;
    Citation Envoyé par gregouz59 Voir le message
    2/ je souhaiterai que la deuxième fenetre réagisse avec une information donnée dans la fenetre principale. Je m'explique :
    - Première fenetre :
    "Inscrivez le nombre de cartons" avec un TEdit
    - Seconde fenetre :
    celle-ci apparaitra avec des informations à remplir en fonction du nombre de cartons demandé, exemple :

    J'ai demandé 4 cartons, la seconde fenetre aura :
    Longueur Largeur Poids
    Carton 1 TEdit 1 TEdit2 TEdit3
    Carton 2 TEdit4 etc....
    Carton 3
    Carton 4

    Comment faire pour avoir autant de ligne reprenant le mot "carton" avec le nombre croissant à côté, mais aussi comment faire pour que la fenetre génére autant de TEdit qu'il est nécessaire ?
    Alors dans ton 2ème formulaire, tu as récupéré le nombre de cartons, il suffit de construire ton IHM avec cette information. Je pense que le mieux sera d'utiliser un composant Grid (voir DBGrid) permettant de modifier les cellules.

    Citation Envoyé par gregouz59 Voir le message
    3/ Comment enregistrer toutes les informations de toutes les fenêtres, dans un fichier, et pouvoir les récupérer ensuite dans l'application afin de pouvoir modifier si besoin. Exemple : récupérer toutes les informations que j'ai mis pour les cartons mais il faut que je modifie le poids du carton 2.

    Comment faire pour pouvoir tout récupérer et modifier ? Sachant qu'il va y avoir plusieures fenêtres et que les informations doivent arriver au bon endroit ?
    Déjà première étape : structurer tes informations. Tu vas saisir un nombre de cartons et des données associées. Tu veux ensuite les retrouver. Mais tu peux saisir plusieurs fois je pense ce nombre de cartons ? Je pense que cela doit être lié à quelque chose de fonctionnel : une livraison, un lot ou je ne sais quoi.
    Donc tu te fais une petite table (avec une base de donnée ou en utilisant Mybase suivant les besoins et la volumétrie) qui va contenir un ID (N° de commande, n° de lot, ...), le n° du carton, les données associées.
    Cette table te permettra de retrouver, à partir de l'ID les cartons et leurs données pour les re-afficher par exemple dans ta DBGrid.

    Citation Envoyé par gregouz59 Voir le message
    Je m'excuse de vous ennuyer avec un truc pareil mais j'aimerai progresser dans mon projet. Ces points me bloquent et je n'avance plus.
    Pas de problème, on est là pour s'aider. Mais je ne saurai que trop te conseiller d'aller consulter les tutoriels et la FAQ de ce site.

    @++
    Dany

  3. #3
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 661
    Points : 3 630
    Points
    3 630
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Je vais tenter de répondre à vos questions :

    1) C'est relativement facile. Voici un petit exemple : mon projet contient 2 fenêtres. La première nommée form1 contient un Tedit nommé edit1. La seconde fenêtre nommée form2 contient un label (nommé label1) qui affichera le texte de edit1 de la première fenêtre.

    unit1 (fenetre 1) contient
    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
    35
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    uses Unit2;
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      form2.showmodal;
    end;
     
    end.
    unit2 (fenetre 2) contient
    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
    35
    36
    37
    38
    39
    40
     
    unit Unit2;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm2 = class(TForm)
        Label1: TLabel;
        Button1: TButton;
        procedure FormShow(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form2: TForm2;
     
    implementation
     
    {$R *.dfm}
    uses unit1;
     
    procedure TForm2.FormShow(Sender: TObject);
    begin
      label1.caption := form1.Edit1.text;
    end;
     
    procedure TForm2.Button1Click(Sender: TObject);
    begin
      close;
    end;
     
    end.
    Vous remarquerez qu'il faut référencer le nom de l'unité dans la clause uses dans la zone implementation. Dans unit1, cela permet de faire form2.showmodal pour afficher la form2 lors du clic sur le bouton.
    Dans unit2, cela permet de récupérer le texte saisi dans le Edit1 de unit1 et de l'afficher dans le label1.

    2) Cela est possible de créer des Tedit de manière dynamique comme vous comptiez le faire sur votre deuxième fenêtre. Cependant, cela peut devenir lourd à gérer (et surtout la gestion de l'affichage : afficher des ascenceurs si le nombre de lignes est important, gérer le redimensionnement de la fenêtre...). Je vous conseille plutôt d'utiliser une grille (comme par exemple le composant StringGrid fourni en standard avec delphi).

    3) Gérer la sauvegarde et le chargement des informations saisies est possible. Vous pouvez vous contenter d'enregistrer les informations dans un fichier texte. Avec le composant, StringGrid, vous pourrez avec deux boulces for imbriquée (une boucle pour parcourir les lignes dans laquelle vous faites une seconde boucle pour parcourir les colonnes) vous enregsitrez le contenu de chacune des cellules dans un fichier texte.
    Exemple de principe pour la sauvegarde (le fichier texte contiendra 1 ligne par ligne de la grille et le caractère séparateur de colonne sera la ","):
    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
     
    var ligne : string;
         iLg, iCol : integer;
         ficTexte : TextFile;
    begin
       assignfile(ficTexte,'c:\essai.txt');
       rewrite(ficTexte);
       // Parcours de chacune des lignes
       for iLg := 0 to StringGrid1.RowCount - 1 do
       begin
          ligne := '';
          for iCol := 0 to StringGrid1.ColCount - 1 do
          begin
              ligne := ligne + StringGrid1.Cells[iCol,iLg]+',';
          end;
          writeln(ficTexte,ligne);
       end;
       closefile(ficTexte);
    end;
    Ceci est un exemple pour vous aider à comprendre le principe : je ne l'ai pas compilé. Il se peut qu'il y ait des erreurs...

    En espérant que cela vous mette sur la voie...

    Cordialement,

    Un autre Greg...
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci pour vos réponses, je vais regarder cela au calme et je vais essayer de ma lancer.

    J'ai oublié un petit détail, mais je ne pense pas que cela soit génant, je code avec Lazarus qui est le Delphi OpenGL.

    Bon dimanche je vous tiendrai au courant de l'avancée de la chose

    Greg

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Bon je me suis mis sur un petit exercice de code, qui me servira pour mon projet, ci-dessous le code d'une petite application qui enregistre des données dans un fichier ini (avec Lazarus je n'ai pas compris comment les BDD fonctionnent...) :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    unit Unit1; 
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Buttons,
      StdCtrls, IniFiles;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        Label1: TLabel;
        Label2: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
     
      private
        { private declarations }
      public
        { public declarations }
      end; 
     
    var
      Form1: TForm1; 
     
    implementation
     
    { TForm1 }
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Close;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
    nbct, poids:string;
    FichierIni : TiniFile;
    begin
    FichierIni := TIniFile.Create(ExtractFilePath(Application.ExeName)+'surveyor.ini');
      FichierIni.WriteString('Informations','Nombre de cartons,Edit1.Text);
      FichierIni.WriteString('Informations','Poids',Edit2.Text);
     
       nbct:=FichierIni.ReadString('Informations','Nombre de cartons','');
       poids:= FichierIni.ReadString('Informations','Poids','');
       FichierIni.free;
         showmessage('Vous avez enregistré ' + nbct + ' cartons.' + #13#10 + 'Pour un poids total de ' + poids + '.');
    end;
     
     
     
    initialization
      {$I unit1.lrs}
     
    end.
    Bon je me doute que ça doit vous faire rire ce genre de truc, mais moi je ne suis pas peu fière de mes 5 heures de recherche (oui je suis grand débutant ), parceque ça fonctionne.

    Bon c'est bien beau mais je souhaiterai faire la même chose, c'est à dire enregistrer dans un fichier ini, mais à partir de données placées dans un TStringGrid. Et pouvoir récupérer toutes les informations dans une application secondaire (comme une application "client" si vous voulez). Vous auriez une idée ??

    Aussi, si ça ne vous dérange pas de m'expliquer comment je pourrai faire pour que je puisse soit modifier mon fichier ini, soit en creer un nouveau pour ne pas perdre les autres données ?

    Merci pour votre aide très précieuse, je commence à avancer tout doucement dans ce langage et je compte bien ne pas m'arreter là !

    Bonne soirée
    Greg

Discussions similaires

  1. Petit programme pour débutant
    Par Invité dans le forum Contribuez
    Réponses: 4
    Dernier message: 22/09/2017, 08h04
  2. Petit programme pour débutant
    Par Hellowdiie dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 02/02/2011, 13h38
  3. aide à la programmation pour débutant
    Par bendébutantenprog dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 27/10/2009, 15h41
  4. aide petit programme pour débutant
    Par kartp0rqx dans le forum C
    Réponses: 16
    Dernier message: 14/10/2005, 19h31

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