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 :

Erreur dans une fonction personnalisée


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Points : 51
    Points
    51
    Par défaut Erreur dans une fonction personnalisée
    Salut tous le monde, je veux faire un contrôle pour éviter les valeurs vide des Tedit alors j'ai crée cette fonction qui a comme entrée la tform et ça marchais bien mais quand j'ai rajouter un autre paramètre à la function qui est tgroupbox j'ai une erreur qui est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Identificateur non déclaré : 'y'
    pour les USES les voilà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    uses
    Controls, Forms,StdCtrls;
    et pour la fonction là voila:
    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
    function CheckEdit(x:tform; y:tgroupbox):boolean;
    var
    i:integer;
    b:boolean;
    begin
    b:=false;
    i:=0;
    while ((i< x.y.ComponentCount-1) and (b=false)) do
    begin
    if x.components[i] is tedit then
    if tedit(x.y.components[i]).Text='' then
    begin
    b:=true;
    tedit(x.y.components[i]).SetFocus;
    end;
    i:=i+1;
    end;
    CheckEdit:=b;
    end;
    alors comment fixer cette erreur. Merci à tous.

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    x est un TForm, il ne connait pas de groupbox nommé y

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    à adapter selon le besoin

    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
     
    function CheckEmpty(Form: TForm): Boolean;
    var
      C: TControl;
      I, J: Integer;
      G: TGroupBox;
    begin
      for I := 0 to Pred(Form.ControlCount) do
      begin
     
        if Form.Controls[I] is TEdit then
        begin
          TEdit(Form.Controls[I]).Clear;
          // ...
        end;
     
        if Form.Controls[I] is TGroupBox then
        begin
          G := TGroupBox(Form.Controls[I]);
          for J := 0 to Pred(G.ControlCount) do
            if G.Controls[J] is TEdit then
            begin
              TEdit(G.Controls[J]).Clear;
              // ...
            end;
        end;
     
      end;
    end;

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    en plus propre ça donne ça

    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
     
    function CheckEmpty(Form: TForm): Boolean;
    var
      C: TControl;
      I, J: Integer;
      G: TGroupBox;
     
      function CheckEdit(Control: TControl):Boolean;
      begin
        if (Control is TEdit) and (TEdit(Control).Text = EmptyStr) then
        begin
          TEdit(Control).Clear;
          TEdit(Control).SetFocus;
          Abort;
        end;
      end;
     
    begin
      try
        for I := 0 to Pred(Form.ControlCount) do
        begin
     
          CheckEdit(Form.Controls[I]);
     
          if Form.Controls[I] is TGroupBox then
          begin
            G := TGroupBox(Form.Controls[I]);
            for J := 0 to Pred(G.ControlCount) do
              CheckEdit(G.Controls[J]);
          end;
     
        end;
     
        Result := False;
      except
        on E: EAbort do
          Exit(True);
      end;
     
    end;

  5. #5
    Membre du Club
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Points : 51
    Points
    51
    Par défaut
    Merci papy214 ce que je cherche à faire est de chercher dans certaines TEdit qui appartiennent a un groupbox c'est pour ça que je voulais le faire passer comme un paramètre dans la fonction.

  6. #6
    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
    Euh, pourquoi la ligne 13 TEdit(Control).Clear; alors que dans le test il faut que ce soit déjà vide (TEdit(Control).Text = EmptyStr)Un truc qui m'échappe avec EmptyStr ?
    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

  7. #7
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Euh, pourquoi la ligne 13 TEdit(Control).Clear; alors que dans le test il faut que ce soit déjà vide (TEdit(Control).Text = EmptyStr)Un truc qui m'échappe avec EmptyStr ?
    J'étais un peu aux fraises quand j'ai écris ça. Bien vu

  8. #8
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    Citation Envoyé par bm1990 Voir le message
    Merci papy214 ce que je cherche à faire est de chercher dans certaines TEdit qui appartiennent a un groupbox c'est pour ça que je voulais le faire passer comme un paramètre dans la fonction.
    Avec un peu d'adaptation .... il suffit de tester en plus l'égalité entre le TEdit passsé en paramètre et ceux listés par la fonction.

    Mais bon, le message original présentait une fonction comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function CheckEdit(x:tform; y:tgroupbox):boolean;
    Je ne vois aucun TEdit en paramètre.
    Et dans ce cas, ce serait plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function CheckEdit(Groupbox: TGroupbox; Edit: TEdit):boolean;

  9. #9
    Membre du Club
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Je ne vois aucun TEdit en paramètre.
    Le contenu et le but de la fonction sont claires dans tous les cas j'ai trouvé une solution à mon problème malgré que c'est une solution insatisfaisante à ce que je cherche et je vais pas marqué cette discussion comme résoulu puisque c'est pas vraiment ce que je cherche mais ça resolu le problème

    Bon ce que j'ai fais est de désactiver les Edits que je ne veux pas les vérifier comme le montre le code suivant:

    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
    function CheckEdit(x:tform):boolean;
    var
    i:integer;
    b:boolean;
    begin
    b:=false;
    i:=0;
    while ((i< x.ComponentCount-1) and (b=false)) do
    begin
    if x.components[i] is tedit then
    if (tedit(x.components[i]).Text='') and (tedit(x.components[i]).Enabled=true) then
    begin
    b:=true;
    tedit(x.components[i]).SetFocus;
    end;
    i:=i+1;
    end;
    CheckEdit:=b;
    end;

  10. #10
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Voila ton code revu. CheckEdit a été mis dans l'objet donc self remplace x
    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
    55
    56
     
    unit ex01a;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
      System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls;
     
    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        GroupBox1: TGroupBox;
        Edit3: TEdit;
        Edit4: TEdit;
        Panel1: TPanel;
        Edit5: TEdit;
        Edit6: TEdit;
        procedure FormActivate(Sender: TObject);
      private
        function CheckEdit: boolean;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    { TForm1 }
     
    function TForm1.CheckEdit: boolean;
    var
      i1: integer;
    begin
      for i1 := 0 to self.ComponentCount - 1 do
      begin
        if self.components[i1] is tedit then
          if (tedit(self.components[i1]).Text = '') and
            tedit(self.components[i1]).Enabled then
          begin
            tedit(self.components[i1]).SetFocus ;
            break ;
          end;
      end;
    end;
     
    procedure TForm1.FormActivate(Sender: TObject);
    begin
      CheckEdit ;
    end;
     
    end.

Discussions similaires

  1. erreur dans une fonction
    Par nicerico dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/10/2006, 11h02
  2. Trouver l'erreur dans une fonction
    Par Seth77 dans le forum Langage
    Réponses: 4
    Dernier message: 28/06/2006, 16h38
  3. [débutant] erreur dans une fonction
    Par Skizo dans le forum Access
    Réponses: 7
    Dernier message: 18/05/2006, 10h46
  4. Erreur dans une fonction
    Par dark_vidor dans le forum Langage
    Réponses: 6
    Dernier message: 15/01/2006, 10h23
  5. Réponses: 2
    Dernier message: 11/08/2004, 15h01

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