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 :

Passer des données d'une Form à l'autre


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Programmeur
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 46
    Points
    46
    Par défaut Passer des données d'une Form à l'autre
    Bonjour,

    j'ai besoin de quelques précisions sur l'ordre des événements de création des Forms sous Windows et OSX
    Je dispose de 2 Forms, Form1 et Form2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    unit Unit2;
    interface
     
    uses
     
    type
      TForm2 = class(TForm)
         procedure FormActivate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
         IDin : String;
      end;
    Form1 appelle Form2 "en" lui transmettant une valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    unit Unit1;
    uses Unit2;
     
    if not assigned(Form2) then
      Application.CreateForm(TForm2, Form2);
    Form2.IDin := 'aValue';
    Form2.ShowModal;
    [...]
    FreeAndNil(Form2);
    Si je place un Showmessage(IDin) dans le create de Form2, j'obtiens évidemment une chaîne vide. Là n'est pas la question. Ma question est quel est le premier événement traité systématiquement par un ShowModal afin que je puisse récupérer la valeur de IDin tansmise dans l'appel par Form2.IDin := 'aValue'; ? FormActivate ? Valable dans tous les OS Desktop ? Valable qu'assigned(Form2) soit vrai ou pas ? Valable pour un Show (à la place d'un ShowModal) ?
    Bref, je cherche l'ordre des événements d'ouverture d'une Form par Show ou ShowModal sous Windows et sous OS X avec FireMonkey ?
    Je pourrais tester, mais si un tel document existe cela me simplifierait la vie... et pour avoir pratiquer lazarus, j'ai constaté qu'il existait de petites différences d'un OS (Windows) à l'autre (Linux).

    Merci. Zac

  2. #2
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour.

    Pour l'ordre des événements : http://bardou.pagesperso-orange.fr/m...eexecution.htm

    Dans ton cas, puisque tu crées dynamiquement Form2, l'initialisation des variables, propriétés, composants de Form2 peut se faire à partir de Form1, ou dans l'événement OnShow de Form2.

    Cordialement
    Thierry

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 420
    Points : 5 819
    Points
    5 819
    Par défaut
    salut
    pourquoi ne pas creer une methode dans Form2 que tu appel par exemple init

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Procedure TForm2.Ini(Avalue : String);
    begin
      // Je traite mon info 
      Showmodal;
    end;
    et dans form1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      if not assigned(Form2) then
         Application.CreateForm(TForm2, Form2);
      Form2.init('aValue');
      [...]
      FreeAndNil(Form2);
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #4
    Membre du Club
    Homme Profil pro
    Programmeur
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Bonjour

    Anapurna, cela me semble simple en effet. Appeler showmodal à partir d'une méthode de Form2 elle-même, cela ne semble pas poser de problème...

    Un classique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TfMain.Button1Click(Sender: TObject);
    begin
       if not Assigned(Form1) then
          Application.CreateForm(TForm1, form1);
          Form1.ShowModal;
    end;
    crée la succession des événements suivante :
    • Create
    • FormResize x 2
    • Paint x 2 [Apparition de la Form au 1er]
    • FormShow
    • OnActivate

    puis
    • OnClose
    • OnActivate
    • FormSaveStat


    Et avec ta méthode, j'obtiens un OnCreate, OnResize, OnInit (appel de ton init) , OnResize, OnPaint x2, OnShow, OnActivate puis à la fermeture Hide.... Donc au niveau de la séquence des événements cela semble équivalent. Et dans le cas précis, c'est la séquence des événements d'ouverture qui m'intéresse. J'ai besoin qu'elle soit la même sous les 2 OS.

    Cela sous windows. Je n'ai pas d'os X en ce moment. Mon nouveau Mac Mini est déjà reparti chez mon fournisseur. J'avais choisis le modèle 8 Go le plus puissant de cette gamme (et disponible immédiatement) pour l'amener à 16 Go... pensais-je, et utiliser VirtualBox... Mais contrairement à mon ancien modèle (que j'ai donné un peu précipitamment ), le nouveau boitier est scellé et en plus, la RAM est soudée... donc à priori, impossible de l'amener à 16Go.

    Franchement j'hésite. VirtualBox, c'est sûr mais sur quel OS de départ ? Mon PC est maintenant à 16 Go, dispose de VirtualBox...

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Zacheus Voir le message
    Mais contrairement à mon ancien modèle (que j'ai donné un peu précipitamment ), le nouveau boitier est scellé et en plus, la RAM est soudée... donc à priori, impossible de l'amener à 16Go.
    encore un sale coup de la marque
    Franchement j'hésite. VirtualBox, c'est sûr mais sur quel OS de départ ? Mon PC est maintenant à 16 Go, dispose de VirtualBox...
    sauf que, s'il est permis de mettre un Windows dans un virtualbox sous Mac, l'inverse (OSX sur Windows) n'est pas possible pour cause de licence, la manip est néanmoins faisable mais passible de la loi
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre du Club
    Homme Profil pro
    Programmeur
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Ce n'est pas ce que m'assuré le vendeur à qui j'ai rapporté le Mac. Mais, il a peut-être (certainement) dit cela face à mon agacement. A priori, selon ses dires, la licence OS X peut-être achetée séparément. Ce qui ne signifie pas que cela te permet de l'installer légalement sur un autre matériel qu'un Apple. Mais il est vrai que je n'ai jamais lu la licence OS X ni celle de Windows d'ailleurs, pas plus que celle de VirtualBox . En regardant sur le net, cela semble effectivement illégal. Mais pour l'instant, je crois que je vais m'abstenir d'en recommander un autre. Il faudrait pas prendre les clients... pour des "pommes". Vivement que Delphi passe à Linux !

    Au fait, j'ai reçu une réponse pour la TMSFMXgrid avec l'utilisation de la méthode AllCells[] pour les cellules cachées (ShowMessage(AllCells[aCol, aRow])); mais je n'ai pas testé encore. Je suis en train de me battre avec FireDac pour réaliser le duplicata d'un DataSet à partir d'une classe dédiée aux accès. Je crois qu'une nouvelle fois je vais basculer vers Uni.

Discussions similaires

  1. Passer des variables d'une form à l'autre
    Par flydan dans le forum Débuter
    Réponses: 3
    Dernier message: 11/10/2007, 13h19
  2. problème à passer des valeurs d'une form à l'autre
    Par gibea00 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/08/2007, 13h45
  3. Réponses: 8
    Dernier message: 04/04/2006, 17h29
  4. passer des données a une autre page php
    Par questionneuse dans le forum Langage
    Réponses: 10
    Dernier message: 25/01/2006, 00h56
  5. Réponses: 2
    Dernier message: 04/10/2005, 20h54

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