Mr Capone
Messages postés21Date d'inscriptionvendredi 21 janvier 2005StatutMembreDernière intervention19 juin 2005
-
19 juin 2005 à 11:58
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 2008
-
19 juin 2005 à 15:18
Bonjour je souhaite pouvoir rendre un bouton disponible si tout les
controle (combo box) ne sont pas vide (contiennent une valeur)...
J'ai essayé un truc mais ca me fait une boucle inifinie
vide := true;
while vide do
begin
if cb_genre.Text = '' then
messagedlg ('Séléctionner un genre', mtInformation,[mbOk], 0)
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20082 19 juin 2005 à 15:07
Non, cela n'est plus possible par la même technique (ou il faut implémenter différemment chaque objet).
Cependant, en utilisant les procedures RTTI de l'unité TypInfo, on peut arriver à cela:
<hr size= "2" width="100%"> uses
TypInfo;
procedure TForm1.RendreBoutonDispo;
var
i: Integer;
begin
{ Parcours de tous les composants de la fiche. }
for i: =0 to ComponentCount -1 do
{ Si c'est un composant qui publie la propriété Text et qu'elle n'est pas
remplie ( = EmptyStr) : Arret. }
if IsPublishedProp(Components[i],'Text') and PropIsType(Components[i],'Text',tkString) and
(GetStrProp(Components[i],'Text') = EmptyStr) then
Exit;
{ Si on arrive jusqu'ici, c'est que tous les combobox sont remplis. }
Button1.Enabled:= True;
end;
<hr size ="2" width="100%">Cete procédure doit être appelée pour
vérifier et activer le bouton: tu peux la mettre soit dans chaque
evenement de modification de tes composants ou à la suite d'un OnClick
d'un autre bouton qui vérifie le formulaire.
Je te renvoie à ce lien pour l'utilisation des procedures RTTI:
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20082 19 juin 2005 à 15:18
Ah, je me suis planté (pourtant mes tests étaient concluants ...):
La propriété Text d'un TControl est de type TCaption et non pas string,
il faut donc remplacer tkString par tkLString (je ne sais pas pourquoi
mais il faut le faire ).
Ce qui donne:
<hr size= "2" width="100%"> uses
[...], TypInfo;
procedure TForm1.RendreBoutonDispo;
var
i: Integer;
begin
Button1.Enabled: =False;
{ Parcours de tous les composants de la fiche. }
fori:= 0 to ComponentCount -1 do
{ Si c'est un composant qui publie la propriété Text et qu'elle n'est pas
remplie ( = EmptyStr) : Arret. }
if IsPublishedProp(Components[i],'Text') and PropIsType(Components[i],'Text',tkLString) and
(GetStrProp(Components[i],'Text') = EmptyStr) then
begin
Showmessage('Tous les champs ne sont pas remplis.');
Exit;
end;
{ Si on arrive jusqu'ici, c'est que tous les combobox sont remplis. }
Button1.Enabled: =True;
end;
<hr size="2" width="100%">
Ouf, j'y suis arrivé.
Ca doit être la chaleur (je ne sais pas pour vous mais chez moi, il fait 32°C à l'ombre ...)