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 :

[D7] Erreur à la compilation sur une forme d'appel


Sujet :

Langage Delphi

  1. #1
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 410
    Points : 3 174
    Points
    3 174
    Par défaut [D7] Erreur à la compilation sur une forme d'appel
    Bonjour,

    pour la saisie de nombres dans mes TEdit, j'utilise cette fonction (trouvée sur le net) que j'ai dupliquée dans plusieurs Form contenant des TEdit. Par exemple dans l'unité S_Te.pas (Form TF_Te) j'ai :

    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
    { ====================================================================== }
    procedure TF_Te.MasqueSaisie(Sender: TObject; var Key: Char);
    { Filtre sur la saisie d'une valeur numérique dans un TEdit }
    var
     texte         : String;
    begin
       With Sender As  TEdit  Do
          Begin
             texte:=text;
             { La saisie d'une lettre n'est pas acceptée :  }
             if not (Key in ['0'..'9',',','.','-',#8,#13]) then Key := #15;
             {  Interdiction de la saisie de plusieurs virgules successives :
             en outre, la saisie d'un point est remplacée par une virgule :     }
             if (Key = ',') or (Key = '.') then
                if (Pos(',',Texte) > 0) or (Pos('.',Texte) > 0) then
                   Key := #15
                else
                   Key := DecimalSeparator;
             { un point (une virgule) sera toujours précédé de 0 :    }
             if (Key = ',') or (Key = '.') then
             if length(texte)<1  then
                Begin
                   text:='0,';
                   selstart:=2;
                   Key :=#0;
                end;
             if (Key = ',') or (Key = '.') then
             if ((length(texte)<2) And (copy(texte,1,1)='-'))  then
                Begin
                   text:='-0,';
                   selstart:=3;
                   Key :=#0;
                end;
             {  pas d'espace :     }
             if Key = #32 then Key := #15;
             {  ni de tiret :   }
             if Key = '-' then if ((length(Texte) > 0)And(SelStart >1)) then Key := #15;
             if Key <> #0 then inherited KeyPress(Key);
          End ;
       { Suppression de certaines touches qui sonnent dans le Edit des champs }
       If Ord(Key)=13 Then Key := Chr(0) ;
    end;
    { ======================================================================= }
    J'aimerais la mettre en commun dans l'unité WinUtil pour éviter de la dupliquer.
    Si je la mets dans Winutil en enlevant le préfixe TF_Te. j'ai cette erreur :

    [Erreur] Winutil.pas(271): Forme d'appel de méthode autorisée seulement dans les méthodes de types dérivés
    Y a t il un moyen pour m'en sortir ?

    Merci
    A+
    Charly

  2. #2
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 410
    Points : 3 174
    Points
    3 174
    Par défaut
    J'ai trouvé une version de AndnotOr qui va bien :

    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
    procedure TForm1.Masquesaisie(Sender: TObject; var Key: Char);
    var
      s   :string;
      i,j :integer;
     
    begin
      with TEdit(Sender) do
        case Key of
          chr(VK_BACK)   :;
     
          chr(VK_RETURN) : begin
                             Text := FloatToStr(StrToFloatDef(Text, 0));
                             SelectAll;
                           end;
     
          '-'            : if Length(Text) > 0 then
                           begin
                             s := Text;
                             i := SelStart;
                             j := SelLength;
     
                             if s[1] = Key then
                             begin
                               Delete(s, 1, 1);
                               Dec(i);
                             end
                             else
                             begin
                               Insert(Key, s, 1);
                               Inc(i);
                             end;
     
                             Text      := s;
                             SelStart  := i;
                             SelLength := j;
                             Key       := #0;
                           end;
     
          else             try
                             s := Text;
     
                             if SelLength > 0 then
                               Delete(s, SelStart +1, SelLength);
     
                             Insert(Key, s, SelStart +1);
     
                             StrToFloat(s);
                           except
                             Key := #0;
                           end;
       end;
    end;
    je vais essayer de la transformer pour en faire une autre version pour saisir des entiers

    A+
    Charly

  3. #3
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 410
    Points : 3 174
    Points
    3 174
    Par défaut
    Voici la version pour saisir des entiers :

    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
    { ======================================================================== }
    procedure SaisieInt(Sender: TObject; var Key: Char);
    var
      s   :string;
      i,j :integer;
    begin
      with TEdit(Sender) do
        case Key of
          chr(VK_BACK)   : ;
     
          chr(VK_RETURN) : begin
                             Text := IntToStr(StrToIntDef(Text, 0));
                             SelectAll;
                           end;
     
          '-'            : if Length(Text) > 0 then
                           begin
                             s := Text;
                             i := SelStart;
                             j := SelLength;
                             if s[1] = Key then
                             begin
                               Delete(s, 1, 1);
                               Dec(i);
                             end
                             else
                             begin
                               Insert(Key, s, 1);
                               Inc(i);
                             end;
                             Text      := s;
                             SelStart  := i;
                             SelLength := j;
                             Key       := #0;
                           end;
     
          else             try
                             s := Text;
                             if SelLength > 0 then
                               Delete(s, SelStart +1, SelLength);
                             Insert(Key, s, SelStart +1);
                             StrToInt(s);
                           except
                             Key := #0;
                           end;
       end;
    end;
    { ======================================================================== }
    A+
    Charly

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

Discussions similaires

  1. Erreur de compilation sur une itération
    Par JeanNoel53 dans le forum Débuter avec Java
    Réponses: 15
    Dernier message: 04/05/2015, 23h29
  2. Erreur de compilation sur une fonction utilisant les flux
    Par alves1993 dans le forum Débuter
    Réponses: 10
    Dernier message: 19/07/2013, 12h56
  3. Réponses: 3
    Dernier message: 23/09/2010, 18h05
  4. Erreur de propriété sur une forme
    Par Masmeta dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/05/2007, 16h19
  5. Erreur de compilation sur une librairie en mode debug
    Par bakaneko dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/05/2006, 17h32

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