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

Langage Delphi Discussion :

Mais d'où je viens ?


Sujet :

Langage Delphi

  1. #1
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut Mais d'où je viens ?
    Bonjour à toutes et à tous...

    Surement une question déjà soulevée, mais je n'ai pas trouvé de réponse.
    (Tout lien est le bien venue).

    J'ai un Menu dans lequel un item possede cette evenement au Click

    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
    procedure TFPrincipal.SocieteClick(Sender: TObject);
    begin
      Try
    // ...
        FSociete := TFSociete.Create(Application);
        Try
    // ...
          FSociete.ShowModal;
          FSociete.Release;
        Finally
          FSociete.free;
        end;
      Except
        on E : Exception do
        Begin
          ShowMessage('Mon erreur');
        end;
      end;
    end;
    J'ai également une autre Form qui au clique sur un boutton fait exactement la même chose :

    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
    procedure TFDossier.Bt1Click(Sender: TObject);
    begin
      Try
    //...
        FSociete := TFSociete.Create(Application);
        Try
    // ...
          FSociete.ShowModal;
          FSociete.Release;
        Finally
          FSociete.free;
        end;
      Except
        on E : Exception do
        Begin
          ShowMessage('Mon Erreur');
        end;
      end;
    end;

    Comment je peux savoir au Create de ma Form Fsociete de quel de ces 2 procédure je viens ? J'ai tenté d'utiliser les Sender mais sans résultat.

    Merci à vous.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 393
    Points : 637
    Points
    637
    Par défaut
    si tes procédures sont identiques le mieux est de les regrouger en un seul endroit et d'y effectuer des appels dans tes évènements tu pourras alors y ajouter un paramètre distinctif

    regarde aussi du coté de TScreen tu peux réagir à chaque changement de forme pour coder un historique de tes formes, mais la 1ère solution me semble plus simple

  3. #3
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par exoseven Voir le message
    regardes la forme active avec Screen.ActiveForm

    si tes procédures sont identiques le mieux est de les regrouger en un seul endroit et d'y effectuer des appels dans tes évènements tu pourras alors y ajouter un paramètre distinctif si besoin
    Salut Exo, je ne peux pas mes appels provienne de 2 Form différentes l'un de Fprincipal par le biais d'un itme d'un menu et l'autre d'une autre form (en showmodal).

    J'ai pensé à modifier le tag de FSociete et de tester le tag 0 ou 1 est-ce valable ?

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Une 1° remarque: il est inutile de faire un Free derrière un Release, puisque Release appelle Free.
    Donc ceci suffit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    FSociete := TFSociete.Create(Application);
        Try
    // ...
          FSociete.ShowModal;
        Finally
          FSociete.Release;
        end;
    Question: Tu souhaites changer le comportement de ta fiche suivant le contexte d'appel. Quoi donc exactement ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 393
    Points : 637
    Points
    637
    Par défaut
    oui tu peux utiliser Tag ou rajouter une propriété à TFSociete

  6. #6
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Salut

    Une 1° remarque: il est inutile de faire un Free derrière un Release, puisque Release appelle Free.
    Donc ceci suffit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    FSociete := TFSociete.Create(Application);
        Try
    // ...
          FSociete.ShowModal;
        Finally
          FSociete.Release;
        end;
    Question: Tu souhaites changer le comportement de ta fiche suivant le contexte d'appel. Quoi donc exactement ?

    Merci pour la remarque, j'ai toujours fais ainsi par souci de bien faire sachant déjà ce que tu as remarqué (realese...free).

    Pour te répondre sur ce qui change, dans un cas je ne doit pas faire la fameuse procédure InitForm (autre topic) car mon Datamodule ne connais pas le chemin de la base et dans l'autre cas le chemin est connu.


    Merci Exo je vais voir aussi avec le TAG.

    a+

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 393
    Points : 637
    Points
    637
    Par défaut
    j'avais pas percuté mais si tu veux savoir d'où tu viens dans TFSociete.create tu ne pourras pas utiliser tag...

    tu devrais pouvoir faire un FSociete := TFSociete.Create(Screen.ActiveForm)

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par exoseven Voir le message
    oui tu peux utiliser Tag ou rajouter une propriété à TFSociete
    Ou surcharger le constructeur de ta fiche en lui ajoutant un boolean pour appeler ou non la procédure InitForm.

    [Edit] quoi que ! Cela obligerait à surcharger les constructeurs de chaque fiche.

  9. #9
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Re;

    je pense que tout ça doit être fait au niveau d'un serveur qui aurait comme but le recensement des formes créés, des items des menus cliqués, etc..

    cette façon de procéder ne requiert ni le tag ni la surcharge, en plus elle peut-être élargie ; utilisateur connecté, temps de connexion, etc..

    Bonne chance.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  10. #10
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Re,

    Exoseven : bon j'ai testé par le biais du TAG effectivement, ancun effet

    Citation Envoyé par Cl@udius Voir le message
    Ou surcharger le constructeur de ta fiche en lui ajoutant un boolean pour appeler ou non la procédure InitForm.

    [Edit] quoi que ! Cela obligerait à surcharger les constructeurs de chaque fiche.
    C'est la bonne soulution alors.. car seul une de Mes forms aura cet aspect !!!.

    Mais je n'ai jamais utiliser la notion de surcharge et encore moins ajouter un element boolean.

    Comment puis-je procéder ?

  11. #11
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 709
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 709
    Points : 13 172
    Points
    13 172
    Par défaut
    Juste une petite remarque. C'est plutôt dans InitForm que tu devrais vérifier la validité du chemin.

  12. #12
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Juste une petite remarque. C'est plutôt dans InitForm que tu devrais vérifier la validité du chemin.
    Salut AndnotOr, j'utilise InitForm dans toutes mes form... et deplus selon la où j'ai cliqué je reviens au même problême, je ne peux pas savoir d'où viens mon clique au moment ou FSociete s'ouvre.

    Merci.

  13. #13
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 709
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 709
    Points : 13 172
    Points
    13 172
    Par défaut
    Dans test événements, pour connaître le propriétaire:

    Mais aussi dans tes InitForm:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if DataModule1.ADOQry.ConnectionString = '' then Exit;
    ou quelque chose d'approchant.

  14. #14
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Tu peux utiliser le Tag

    Procédure 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        Try
         FSociete.Tag:= 0;// 
          FSociete.ShowModal;
        Finally
          FSociete.Release;
        end;
    Procédure 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Try
         FSociete.Tag:= 1;// 
          FSociete.ShowModal;
        Finally
          FSociete.Release;
        end;

    Ah j'ai pas lu le poste de exoseven

  15. #15
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    Effectivement la remarque d'Andnotor (le mélomane ) est pleine de bon sens. C'est au niveau d'InitForm qu'il faut faire le test.

    Par exemple, si tu as utilisé un TADOConnexion il suffit d'examiner la valeur de Connected et d'effectuer le traitement sur les contrôles ou de sortir directement.

    @+ Claudius.

  16. #16
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Question de béotien : pourquoi ne pas mettre ce code qui se repète dans une fonction public de TFSociete, et de mettre en parametre de cette fonction l'origine de l'appel ? Il ne reste plus qu'à coder dans le OnCreate de TFSociete le traitement en fonction du parametre récupéré.


    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
    var
      MonIdOrigin : integer;
     
    procedure TFSociete.FormCreate(Sender : TObject);
    begin
      case MonIdOrigin of  // traitement de l'origine de l'appel
        1 : ....
        2 : ....
      end;
    end;
     
     
    function TFSociete.Appeler(idorigin : integer) : boolean;
    begin
      Result := False;
      MonIdOrigin := IdOrigin;
      TRY
        with TFSociete.Create(Application) do
        try
          ShowModal;
        finally
          Release;
        end;
      EXCEPT
        on E : Exception do
        Begin
          ShowMessage('Mon erreur');
        end;
      END;
      Result := True; // ou autre fonction
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFPrincipal.SocieteClick(Sender: TObject);
    begin
        SocieteResult := FSociete.Appeler(1);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFDossier.Bt1Click(Sender: TObject);
    begin
        Bt1Result := FSociete.Appeler(2);
    end;
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  17. #17
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exoseven : bon j'ai testé par le biais du TAG effectivement, ancun effet
    Mon code foncfionne il faut pas changer le tag avant le constructeur

  18. #18
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par archonte Voir le message
    Question de béotien : pourquoi ne pas mettre ce code qui se repète dans une fonction public de TFSociete, et de mettre en parametre de cette fonction l'origine de l'appel ? Il ne reste plus qu'à coder dans le OnCreate de TFSociete le traitement en fonction du parametre récupéré.
    +1, est c'est ce que je fait pour toutes mes forms crée dynamiquement,
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  19. #19
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 709
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 709
    Points : 13 172
    Points
    13 172
    Par défaut
    Cela fonctionnera uniquement si MonIdOrigin est une variable globale et non une variable appartenant à TfSociete. L'objet TfSociete n'ayant pas encore été créé au moment de l'assignation de MonIdOrigin.

    Si cette variable appartient à TfSociete on passera plutôt par une surcharge du constructeur:

    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
    type
      TfSociete = class(TForm)
      protected
        FIdOrigin :integer;
      public
        constructor Create(aOwner :TComponent; aIdOrigin :integer);
      end;
     
    constructor TfSociete.Create(aOwner :TComponent; aIdOrigin :integer);
    begin
      inherited Create(aOwner);
      FIdOrigin := aIdOrigin;
     
      case FIdOrigin of
        ...
      end;
    end;
    Ensuite si un autre type hérite de TfSociete, le nouveau type ne sera jamais utilisé puisque TfSociete est défini en dure dans la procédure Appeler. On doit donc définir une procédure de classe et utiliser Self pour référencer la classe courante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    type
      TfSociete = class(TForm)
      protected
        FIdOrigin :integer;
      public
        class function Appeler(aIdOrigin : integer) : boolean;
        constructor Create(aOwner :TComponent; aIdOrigin :integer);
      end;
     
    class function TFSociete.Appeler(aIdOrigin : integer) : boolean;
    begin
      with Self.Create(Application, aIdOrigin) do
      ...
    end;

  20. #20
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Tu dois avoir un avertissement à la compilation sur la surcharge du constructeur sans un reintroduce. Non ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [PostgreSQL]PostgreSQL sous windows mais sans Cygwin
    Par manou dans le forum Administration
    Réponses: 8
    Dernier message: 17/04/2003, 16h19
  2. template match="node() mais pas text()"
    Par Manu_Just dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/03/2003, 10h52
  3. Réponses: 11
    Dernier message: 17/03/2003, 10h56
  4. [Choix SGBD] Application mono-poste mais beaucoup de données
    Par Wavyx dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 16/03/2003, 18h24
  5. Lancer un programme, mais sur une autre machine
    Par GOUGOU1 dans le forum Réseau
    Réponses: 12
    Dernier message: 08/12/2002, 20h36

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