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

Composants VCL Delphi Discussion :

Récupérer le Nom d'une Form


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut Récupérer le Nom d'une Form
    Bonsoir,

    J'aimerais récuperer le nom d'un form à partir d'un autre afin de modifier certaine valeur de mon form d'origine.

    Je voulais passer par l'intermediaire d'un champ text, mais ça me pose trop de problème, car je n'arrive pas à réutiliser ma variable qui est en "string" pour la réutiliser en temp que nom du form.

    Voici ce que je voudrais faire (avec l'intermediaire d'un champ text) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    //Form 1
    Form2.FormAppl.text:='Form 1' // Ajout du nom du form d'origine dans le champ text
     
    Form2.show;
     
    // Puis, action sur Form2 :
    //Selection d'une valeur (par exemple);
    NomDuFormDorigine.Nom.text:='nouveauNom';
    Je ne sais pas si j'ai été assez clair...

    Merci de votre aide.

  2. #2
    Membre expérimenté
    Avatar de Pascal Fonteneau
    Profil pro
    gérant
    Inscrit en
    Février 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : gérant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2007
    Messages : 139
    Par défaut tentative de réponse
    Bj

    Si tu connais la form qui doit être modifiée, alors ajoute simplement le nom de l'unité qui la contient dans la clauses uses (partie implementation si besoin).

    si tu as plusieurs fiches dont tu ne connais pas le nom, il faudra boucler sur les form (depuis la form principal )et tester leur proprieté name par exemple

  3. #3
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    En faite, il s'agit d'une form qui peut-être appelée de n'importe quel autre form.
    Sachant que tout mes form ont un champ text identique (exemple :ValeurRetournee.text) je veux a partir de mon deuxième form modifcier la valeur de ce champ text.

    Je pense que je vais proceder comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //Execution du FormCommun et donc on viens ajouter dans un champ text invisible le nom du form qui attent le retour d'info :
    //L'utilisateur fait un choix sur le formCommun, puis lorsqu'on valide, on vient tester quel form à demandé l'info grace au champ text :
     
    If ChampTextInvisible.Text='ChampNumero2' then begin
       ChampNumero2.ChampRetourInfo.text:=ChampInfo.text;
       close;
       end
    Else if ChampTextInvisible.text:='ChampNumero4' then begin 
       ChampNumero4.ChampRetourInfo.text:=ChampInfo.text;
       close;
       end;
    end;
    C'est vraiment simple, mais bon ça fonctionne...
    Si quelqu'un connait une autre methode, je suis preneur !

    Merci !

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Salut
    Je ne comprends pas bien: tu voudrais simplement avoir un champs text accessible depuis les autres Forms et accéder à ta Form d'après le contenu de ce champ Text c'est bien ça?
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 123
    Par défaut
    Voir dans Classes.pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function FindGlobalComponent(const Name: string): TComponent;
    Qui utilise la propriété Name et l'objet Screen (lequel j'ai cité dans l'autre sujet)

    l'Avantage, c'est que le nom d'une fenêtre est unique !
    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

  6. #6
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Ok, Je vais voir ça.

    Merci de votre aide !

  7. #7
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Voir dans Classes.pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function FindGlobalComponent(const Name: string): TComponent;
    Qui utilise la propriété Name et l'objet Screen (lequel j'ai cité dans l'autre sujet)

    l'Avantage, c'est que le nom d'une fenêtre est unique !
    Cette methode fonctionne correctement, mais dans mon cas, l'une des forms est integrées dans une form principal (MaForm.Parent:=FormPrincipale). Et donc, je ne peut pas modifier les valeurs d'un champ text qui se trouve sur cette form...

    Si quelqu'un avait une petite idée...

    Merci !

  8. #8
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par jojo86 Voir le message
    Bonsoir,

    J'aimerais récuperer le nom d'un form à partir d'un autre afin de modifier certaine valeur de mon form d'origine.

    Je voulais passer par l'intermediaire d'un champ text, mais ça me pose trop de problème, car je n'arrive pas à réutiliser ma variable qui est en "string" pour la réutiliser en temp que nom du form.

    Voici ce que je voudrais faire (avec l'intermediaire d'un champ text) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    //Form 1
    Form2.FormAppl.text:='Form 1' // Ajout du nom du form d'origine dans le champ text
     
    Form2.show;
     
    // Puis, action sur Form2 :
    //Selection d'une valeur (par exemple);
    NomDuFormDorigine.Nom.text:='nouveauNom';
    Je ne sais pas si j'ai été assez clair...

    Merci de votre aide.
    ok, tout dépend de ce que tu veux faire.

    l'appelant tu peux tout simplement le déclarer dans Form2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    type
     TForm2=class(TForm)
     private
      fCaller:TForm;
     public
      property Caller:TForm read fCaller write fCaller;
     end;
    du coup dans Form1 tu feras un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     Form2.Caller:=Self;
     Form2.Show;
    et dans Form2 tu pourras faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Caller.Caption:='coucou';
    ensuite, comme tu le soulignes, le TForm générique ne possède pas les composants de TForm1...et là tu as plusieurs solutions en fonction de ton besoin

    Si c'est pour mettre à jour un TEdit par exemple, au lieu de placer Form1 dans Form2.Caller:TForm tu placer Form1.Edit1 dans Form2.Edit:TEdit

    si c'est plusieurs composants, peut-être qu'une frame tu permettrais de les regrouper et alors Form2.Frame de type TMyFrame prend la valeur de Form1.Frame1:TMyFrame

    au solution plus orientée objets, toutes les fiches modifiables par Form2 doivent dériver d'un TMyForm qui sera le type de Form2.Form

    et si ce n'est pas possible, tu va devoir passer par une classe intermédiaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    type
     TModifier=class
     private
      fTarget:TForm;
     public
      constructor Create(Target:TForm); 
      procedure UpdateWith(Form2:TForm2); virtual; abstract;
      property Target:TForm read fTarget;
     end;
    cette classe sera utilisée par Form2, chaque fiche devra créer un descandant de TModifier qui surcharge UpdateWith() pour a récupérer ce qui l'intéresse dans 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    type
     TForm1Modifier=class(TModifier)
      procedure UpdateWith(Form2:TForm2); override;
     end;
     
    procedure TForm1Modifier.UpdateWith(Form2:TForm2); 
    begin
     TForm1(Target).Edit1.Text:=Form2.Edit1.Text;
    end;
     
    procedure Tform1.Button1Click(Sender:TComponent);
    begin
     Form2.Modifier:=TForm1Modidier.Create(Self);
     Form2.Show;
    end;
     
    // et dans Form2
    procedure TForm2.Button1click(Sende:rTComponent);
    begin
     if Modifier<>nil then begin
      Modifier.UpdateWith(Self);
      Modifier.Free;
      Modifier:=nil;
     end;
    end;
    voila de qui te donner mal à la tête
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #9
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    voila de qui te donner mal à la tête
    Je pense oui... je vais étudier ça... et je reviens plus tard pour les questions !

  10. #10
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Yes ! j'y arrive avec des TEdit !!!

    Bon par contre, j'aimerais bien une ou deux petite explication si c'est possible...

    Notament à ce sujet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    type
        TForm3 = class(TForm)
    private
     fCaller:TForm; 
    public
    property Caller:TForm read fCaller write fCaller;
    private
    fCaller:TForm;

    Est-ce la "variable" qui contiendra le nom de la Form d'appel (Caller)?

    public
    property Caller:TForm read fCaller write fCaller;

    Pour cette ligne... c'est un peu flou pour mes yeux de débutant...
    Property c'est la déclaration de la propriété c'est ça?

    Caller c'est le nom de la propriété?

    Read fCaller write fCaller je ne comprend pas ce qu'on vient lire et ecrire...

    Voila, désolé d'être currieux, mais c'est plus fort que moi !!!

    Et Encore merci de prendre le temp de m'aider, c'est super gentil !

    Merci à tout Developpez !!

  11. #11
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    private
    fCaller:TForm;

    > Est-ce la "variable" qui contiendra le nom de la Form d'appel (Caller)?

    c'est pas un "nom", c'est un pointeur, mais c'est en effet lui qui va contenir l'adresse de la fiche d'appel

    public
    property Caller:TForm read fCaller write fCaller;

    > Pour cette ligne... c'est un peu flou pour mes yeux de débutant...

    c'est donc une propriété qui se nomme Caller qui contient l'adresse d'une instance de TForm...read indique comment la lire, write comment la mettre à jour.

    Delphi, contrairement aux autres langages, propose d'indiquer simplement le nom d'un champ de l'objet qui contiendra la valeur.

    on aurait pu également utiliser des méthode comme ceci :

    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
     
    type
     TForm2=class(TForm)
     ...
     private
      fCaller:TForm;
      procedure SetCaller(Value:TForm);
      function GetCaller:TForm;
     public
      property Caller read GetCaller write SetCaller;
     end;
     
    procedure TForm2.SetCaller(Value:TForm);
    begin
     fCaller:=Value;
    end;
     
    function TForm2.GetCaller:TForm;
    begin
     Result:=fCaller;
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

Discussions similaires

  1. récupérer le nom d'une valeur d'un formulaire select
    Par kenny49 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 14/06/2006, 15h59
  2. Réponses: 4
    Dernier message: 20/05/2006, 18h30
  3. [javascript]Récupérer le nom d'une image
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/10/2005, 14h56
  4. [Debutant] Récupérer le nom d'une image
    Par Djoul dans le forum Débuter
    Réponses: 4
    Dernier message: 30/05/2005, 10h52
  5. Récupérer le nom d'une base
    Par nic_moq dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 24/03/2004, 11h50

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