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 :

Comment faire une classe avec deux form?


Sujet :

Delphi

  1. #1
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Points : 43
    Points
    43
    Par défaut Comment faire une classe avec deux form?
    Bonjour,

    Voila mon problème. J'ai une classe de type TForm qui lorsqu'elle est appelé dans un programme affiche une form (logique ). Sur cette form j'ai un bouton et je souhaite lorsque l'utilisateur clique sur ce bouton q'une autre form apparaisse.

    Comment faire dans ma classe pour rajouter une form? Comment créer une classe avec deux form? On accéderai a la deuxieme form lors de l'appui su un bouton qui se trouverait sur la form1?

    Merci d'avance.

  2. #2
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Bonjour,
    Plusieurs solutions s'offrent à vous. La première serait de créer une fiche (Form2) et en ajoutant l'unité de cette nouvelle form dans la clause "Uses" de votre unité de faire sur l'événement "Onclick" de votre bouton quelque chose du genre :
    ou bien toujours dans l'évenement "Onclick" de votre bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure Tform1.BoutonClick(sender:tObject);
    var
    Mafiche : Tform;
    begin
    Mafiche :=Tform.create(self);
    Mafiche.show;
    end;
    Attention avec cette dernière façon d'avoir une ligne de code qui détruit la fiche nouvellement créée sinon gare aux fuites mémoires.
    Cordialement,
    Hauwke

  3. #3
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Points : 43
    Points
    43
    Par défaut
    La deuxieme solution est intéressante mais elle n'est pas compliqué?

    Surtout que sur la nouvelle form il va y avoir deux boutonx et une listBox.

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Mickey.jet
    La deuxieme solution est intéressante mais elle n'est pas compliqué?
    Non il s'agit de la gestion dynamique de composants. Voir la FAQ :
    http://delphi.developpez.com/faq/?pa...ondyncomposant
    Citation Envoyé par Mickey.jet
    Surtout que sur la nouvelle form il va y avoir deux boutonx et une listBox.
    Peu importe son contenu en revanche les relations entre les 2 fiches (le partage de donnée, modal ou non, durée de vie,...) sont à étudier.

  5. #5
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Points : 43
    Points
    43
    Par défaut
    ok merci pour le liens il est tres intéressant.

    Donc j'ai ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        var
          bouton1 : Tbutton;
          form1 : Tform;
        begin
          form1 := TForm.Create (self); //le propriétaire est la form
          form1.Parent := self;    //s'affiche sur la form
          form1.ShowModal;
          bouton1 := TButton.create(Self);  
          bouton1.Parent := form1;  //s'affiche sur Form1;
        end;
    Mais ce code ne marche pas j'ai bien ma form mais pas le bouton dessus...
    Pourquoi?

  6. #6
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Points : 43
    Points
    43
    Par défaut
    y a personne pour m'aider?

  7. #7
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    sur ShowModal...
    « La simplicité est la sophistication suprême » (Léonard de Vinci)

  8. #8
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Bonjour,
    C'est période de solde sur DVP, profitez-en...
    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormDestroy(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
        Form2   :Tform;
        Bouton2 : TButton;
        {On met les variables à cet endroit de façon a pouvoir les détruires de n'importe
        quel endroit de ma form1}
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Form2:=Tform.Create(self);      // Création de la form2.
      Bouton2:= Tbutton.Create(Form2); // Création du bouton
      with bouton2 do                  // Réglage des options du bouton
      begin
        parent := Form2;
        left := 80;
        top := 88;
        height := 45;
        width := 170;
        caption := 'Et voilà votre gros bouton';
        end;
        Form2.ShowModal;              // Affichage modal de la form2
     
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
    Form2.Destroy;                    {// Destruction de la form2 qui est responsable de la destruction
                                          du bouton2 (on a mit parent := Form2).}
    end;
     
    end.
    Mais que ceci ne vous empêche pas de faire quelques recherches à l'avenir...
    Cordialement,
    Hauwke

  9. #9
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Mickey.jet
    Mais ce code ne marche pas j'ai bien ma form mais pas le bouton dessus...
    Pourquoi ?
    La lecture de l'aide en ligne t'aurais renseigné.
    Ici c'est la notion de propriétaire (Owner) qui est en cause, self c'est la fiche en cours et form1 la seconde fiche sur laquelle tu souhaites placer ton bouton.

    La libération de ce bouton est du ressort de form1 (c'est souvent le cas)
    Ici la libération de form1 libéreras automatiquement le bouton associé.

  10. #10
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Citation Envoyé par Mickey.jet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        var
          bouton1 : Tbutton;
          form1 : Tform;
        begin
          form1 := TForm.Create (self); //le propriétaire est la form
          form1.Parent := self;    //s'affiche sur la form
          form1.ShowModal;
          bouton1 := TButton.create(Self);  
          bouton1.Parent := form1;  //s'affiche sur Form1;
        end;
    Citation Envoyé par Laurent Dardenne
    La lecture de l'aide en ligne t'aurais renseigné.
    Ah! là je confirme !
    Citation Envoyé par Laurent Dardenne
    Ici c'est la notion de propriétaire (Owner) qui est en cause, self c'est la fiche en cours et form1 la seconde fiche sur laquelle tu souhaites placer ton bouton.
    Par contre je ne suis pas d'accord là, car ça n'est pas son problème principal. Certes Mickey crée le bouton dans une fiche et l'affiche dans une autre..., mais je pense que :
    Citation Envoyé par Mickey.jet
    Mais ce code ne marche pas j'ai bien ma form mais pas le bouton dessus...
    ce qui lui pose problème en l'occurence, c'est le ShowModal, d'où ma suggestion première.
    Quand il aura mis Show à la place, il aura "visuellement" réussi à faire ce qu'il souhaite.

    Ceci dit Mickey, cherches à comprendre quand meme ce dont te parle Laurent, c'est fondamental.

    Bon dev'
    « La simplicité est la sophistication suprême » (Léonard de Vinci)

  11. #11
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Il serait plus propre d'avoir une form qui manipule des frames. Mon tuto sur la programmation d'une "Fenêtre assistant" illustre ça :

    http://bloon.developpez.com/articles/delphi/assistant/

    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

Discussions similaires

  1. [CakePHP] Comment faire une recherche avec deux mots dans une table
    Par pierrot10 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 12/02/2014, 23h20
  2. Comment faire une classe abstraite avec un constructeur
    Par zemzoum89 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 16/10/2010, 00h01
  3. comment faire une classe avec des contrôles?
    Par jffaber dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/08/2008, 16h19
  4. Réponses: 10
    Dernier message: 30/06/2005, 12h20
  5. comment filtrer une table avec deux criteres càd 2 colonnes
    Par athmane2dz dans le forum Bases de données
    Réponses: 7
    Dernier message: 28/07/2004, 15h25

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