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 :

passage d'objet en paramètre


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut passage d'objet en paramètre
    Hello,

    Je voudrais savoir s'il existe une solution pour ce que j'aimerais réaliser :

    J'ai une form sur laquelle j'ai un control avec des tabs(TPageControl). Dans chaqu'un de ces tabs (TTabSheet) j'ai un champ d'édition (TEdit).

    imaginons que j'ai cette procédure :

    procedure maProcedure(var tabSheet : TTabSheet);
    begin
    tabSheet.edtChampBidon.Value := 'du_text';
    end;

    Serait-il possible de passer en paramètre l'un des TabSheet de mon PageControl et ainsi pouvoir modifier le champ d'édition (TEdit)?

    Je sais que ce code n'est pas compilable, mais y a-t-il une autre solution qui aurait le même effet?

    Merci d'avance !!

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    Essayes de passer un index pour indiquer la feuille.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure maProcedure(var tabSheet : TTabSheet; Indx: byte);
    TComponent posséde 3 propriétés intéressantes: ComponentCount, ComponentIndex et Components.

  3. #3
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    La solution la plus simple que je vois, c'est d'utiliser la propriété Tag pour stocker l'instance d'objet TEdit (dans Delphi, les variables objets sont en réalité des pointeurs sur une structure complexe, pointeurs qu'on peut facilement transtyper en entier).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TabSheet1.tag := Integer(Edit1); // Si si, ça marche...
    La fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure maProcedure(var tabSheet : TTabSheet);
    begin
     TEdit(tabSheet.tag).Text := 'du_text';
    end;
    Il faut être sûr que la propriété tag est bien initialisée, sinon gare aux violations d'accès !

    Voilà, je manque d'inspiration aujourd'hui.

    Edit : @FABRICE ROUXEL -> il n'y a pas de propriété de type TEdit dans un TTabSheet. Passer l'index ne résoudra rien, et puis ça fait double usage avec le passage de l'objet tabSheet !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Les 2 solutions proposées sont valides, suivant le contexte.

    La question est : y a t il plusieurs TEdit sur chaque TabSheet.

    En cas de non, la solution propre est celle des couponents[index], du genre

    For I := 0 to MyTabSheet.ComponentCount-1 do
    If MyTabSheet.Components[I] is TEdit Then
    Begin
    TEdit(MyTabSheet.Components[I]).Text := 'mon texte';
    Break;
    End;

    En cas de oui, il nous manque la règle qui permet de déterminer quel est le TEdit à modifier.

  5. #5
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    J'y ai pensé, mais rien ne nous dit qu'il n'y a pas plusieurs TEdit sur la feuille...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    Rectification: Il faut utiliser Controls, ControlCount.

    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 SendText(PC: TPageControl; Indx: Integer; aText: string);
    var
      I: Integer;
      TS: TTabSheet;
    begin
      TS := PC.Pages[Indx];
      for I := 0 to TS.ControlCount - 1 do
      begin
        if (TS.Controls[I] is TEdit) then
        begin
          (TS.Controls[I]) as TEdit).Text := aText;
        end;
      end;
    end;
     
    procedure TForm1.Button5Click(Sender: TObject);
    begin
      SendText(PageControl1, 0, 'du texte');
    end;
    Eventuellement tester la propriété tag de TEdit pour l'identifier.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Merci
    Super merci pour toutes ces infos

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

Discussions similaires

  1. [POO] Passage d'objet en paramètre
    Par tintin72 dans le forum Langage
    Réponses: 6
    Dernier message: 13/08/2008, 20h06
  2. Passage d'Objet en paramètre d'un formulaire
    Par wadoo dans le forum IHM
    Réponses: 9
    Dernier message: 03/07/2008, 09h54
  3. Passage d'objet en paramètre de DLL
    Par nek_kro_kvlt dans le forum Langage
    Réponses: 22
    Dernier message: 22/07/2007, 19h50
  4. [WD10]Passage d'objet en paramètres de methode
    Par Isildur dans le forum WinDev
    Réponses: 25
    Dernier message: 26/03/2007, 17h35
  5. [DLL] Passage d'objet en paramètre
    Par TitiFr dans le forum Langage
    Réponses: 4
    Dernier message: 20/08/2005, 23h18

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