Etre averti d'un Edit en blanc.

cs_yeho Messages postés 25 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 27 février 2007 - 22 févr. 2007 à 20:08
cs_yeho Messages postés 25 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 27 février 2007 - 25 févr. 2007 à 15:26
Salut!

J'ai écrit ces codes afin d'être averti parmon programme quand il y a un Tedit qui n'est pas rempli (ou auquel rien n'a été écrit dessus). Mais le bugg s'affiche là où j'ai coloré en rouge.
Que pensez-vous? Merci d'avance.

var
  Form1: TForm1;


implementation


{$R *.dfm}


function CheckForBlankText : Boolean;
var i : Integer;
begin
   for i := 0 to ComponentCount-1 do
    begin
      if (Components[i] is TEdit) then begin        Result :(Components[i] as TEdit).Text '';   
    if Result then Exit;     
end;
    end;
end;

7 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
22 févr. 2007 à 20:36
Salut,

Rajoute ce qu'il y a en rouge et appuie sur Ctrl+Maj+C (ce qui référencera la fonction dans l'objet Form1 dans la section PRIVATE)

function TForm1.CheckForBlankText : Boolean;
var i : Integer;
begin
   for i := 0 to ComponentCount-1do
    begin
      if (Components[i] is TEdit) then begin         Result : (Components[i] as TEdit).Text '';
      if Result then Exit;
      end;
    end;
end;

//Et pour tester la chose
procedure TForm1.Button1Click(Sender: TObject);
Const aMsg : Array[Boolean] of String = ('Non Vide', 'Vide');
begin
  ShowMessage(aMSG[CheckForBlankText]);
end;

 
@+
Cirec

<hr size="2" />
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
22 févr. 2007 à 20:42
Salut,

Je ne vois pas de "bug" dans ce code, mais tu oublies de te référer à un Owner quand tu appelles "ComponentCount" ou que tu évoques "Components[i]"...
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
22 févr. 2007 à 20:44
Salut Cirec,

Comme tu peux le constater, j'ai un léger problème de connexion/rafraîchissement...

A plus.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
22 févr. 2007 à 22:48
Salut Japee,

tu n'es ni le premier ni le dernier à qui ca arrive

Moi même je suis coutumier du fait

@ Yeho:
Voici un autre exemple qui n'a pas besoin d'être référencé ...

il permet, en plus, de cibler la recherche en fonction du conteneur ...

en admettant que tu as des TEdits placés directement sur ta Form et d'autres dans un TPanel et encore d'autres dans
un TGroupBox :

function CheckForBlankText2(Container : TWinControl) : Boolean;
var i : Integer;
begin
  With Container do
  If HasParent Then
   for i := 0 to ControlCount-1do
    begin
      if (Controls[i] is TEdit) then begin         Result : (Controls[i] as TEdit).Text '';
      if Result then Exit;
      end;
    end
    Else
   for i : = 0to ComponentCount-1do
    begin
      if (Components[i] is TEdit) then begin         Result :(Components[i] as TEdit).Text '';
      if Result then Exit;
      end;
    end;
end;

procedure TForm1.Button2Click(Sender: TObject);
Const aMsg : Array[Boolean] of String = (' il n''y a pas d''Edit Vide', ' il y a au moins un Edit Vide');
begin
  {Ne contrôle que dans Panel1}
  ShowMessage('Dans Panel1' + aMSG[CheckForBlankText2(Panel1)]);
  {Ne contrôle que dans GroupBox1}
  ShowMessage('Dans GroupBox1' + aMSG[CheckForBlankText2(GroupBox1)]);
  {Contrôle dans toute la Forme y compris dans Panel1 et GroupBox1}
  ShowMessage('Dans Form1' + aMSG[CheckForBlankText2(Self)]);
end;

 
@+
Cirec

<hr size ="2" />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_yeho Messages postés 25 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 27 février 2007
24 févr. 2007 à 12:15
Merci Cirec de me venir en aide.


Je suis un tout petit peu confus (peut être que c'est moi qui suis en erreur). J'ai fait comme vous m'aviez dit de faire. Mais il y a toujours un bugg (c'est peut être moi qui suis en erreur)... J'aimerai un conseil de plus de votre part. Au fait, dans quel evènement par exemple devais-je mettre ces codes (c'est juste pour beaucoup plus de PRECISION). Parce que j'ai essayé presque toute la soirée d'hier...

Grand merci d'avance,
Yeho
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
24 févr. 2007 à 16:23
Quel est le message d'erreur

Et à quelle ligne se produit l'erreur

Petite préscision :
function CheckForBlankText2(Container : TWinControl) : Boolean;

C'est une fonction qui n'est pas destinée à être liée à un évènement

Container :  représente le composant contenant les TEdits à contrôler ...  Ex. la Forme un TPanel, un TGoupBox ...etc...

ah oui ... au cas ou, il y a un espace après le zéro et après le 1 dans les deux lignes suivantes :
   for i := 0 to ControlCount-1do

   for i : = 0to ComponentCount-1do

Ou placer cette fonction ? :
Tu colles cette function le plus haut possible (Mais toujours dans la section Implementation) dans l'unité

Un exemple :
If CheckForBlankText2(Panel1) Then
// ne contrôle que les TEdits dans Panel1 renvoie True si un des TEdits est vide ...
// ici ton code si true
Else
// ... et False si aucun n'est vide
// ici ton code si False;

Un autre exemple :

CheckForBlankText2(Form1)
// Contrôle tous les TEdits que Form1 peut contenir et renvoie True si un des TEdits est vide ...

si c'est autre chose il me faut plus de préscisions

 
@+
Cirec

<hr size ="2" />
0
cs_yeho Messages postés 25 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 27 février 2007
25 févr. 2007 à 15:26
Salut Cirec!


Immensement merci d'avoir contribué à la solution à mon problème.
Comme tu l'aurai constaté...j'ai déjà cliqué sur 'reponse accepté'.
Seulement, j'ai encore une toute petite question toujours dans le même ordre d'idée qui pourra surement aider dans ce forum
un autre inicié comme moi.


voici ma question:
comme tu pourras le voire, j'ai ajouté quelques deux ou trois lignes de codes qui devra me permettre de sauvegarde.
Curieusement, quand je clique. Le dit message concernant les Edits s'affiche parfaitement bien. Mais seulement aucune
sauvegarde ne faite après le fameux message. Peux-tu suggerer quelque chose?




procedure TForm1.Button1Click(Sender: TObject);
Const aMsg : Array[Boolean] of String = (' il n''y a pas d''Edit Vide', ' il y a au moins un Edit Vide');
begin
  {Ne contrôle que dans Panel1}
  ShowMessage('Dans Panel1' + aMSG[CheckForBlankText2(Panel1)]);
  begin
Adotable1.Edit;
Edit1.Text:= Adotable1.FieldValues['name'];
Adotable1.Post;
end;


end;
0
Rejoignez-nous