John Dogget
Messages postés384Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention 7 mai 2009
-
17 juil. 2004 à 20:05
cs_LeGuepard
Messages postés38Date d'inscriptionmardi 16 septembre 2003StatutMembreDernière intervention 7 septembre 2015
-
22 juil. 2004 à 16:54
Bonjour à tous.
Voila ce que j'ai écrit ...
procedure MAJ;
begin
AfficherFormulaire;
TraiterFormulaire;
end;
Mon soucis était dans un premier temps que le programme lançait la funtion 'TraiterFormulaire' alors que le formulaire était encore à l'écran, l'utilisateur n'avait donc pas le temps de rentrer ses parametres.
Pour résoudre cela j'ai réécrit ma function comme ça ...
procedure MAJ;
begin
AfficherFormulaire;
while FicheFormulaire.Visible do
Application.ProcessMessage;
TraiterFormulaire;
end;
Mon premier problème a disparu mais un autre est apparu :-(. Lorsque la fenêtre FicheFormulaire est visible, l'occupation de mon processeur est à 100%.
Y a t'il une autre manière d'arriver à ce que je veux ?
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 18 juil. 2004 à 13:39
Ta question n'est pas assez précise :
- on suppose que FicheFormulaire est un TForm ?
- on ne sait pas ce que fait la fonction AfficherFormulaire...
- et accessoirement (peut-être, faut voir) traiteFormulaire.
Il y a forcément une solution à ton problème, mais il va falloir donner plus d'explications...
John Dogget
Messages postés384Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention 7 mai 2009 18 juil. 2004 à 13:49
Re.
Arf, ok alors j'explique un peu mieux ...
FicheFormulaire est un TForm, que j'affiche avec AfficherFormulaire. Si tu preferres, ça pourrais donner ça :
Form1.Show;
while Form1.visible do ...
Traiter formulaire utilise les infos entrées dans FicheFormulaire (ou Form1 dans mon exemple) pour continuer le programme, d'où la nécessité absolu de marquer une pause dans le programme tant que le formulaire Form1 n'as pas été rempli correctement.
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 18 juil. 2004 à 15:02
Mais bon, vite fait, là, je dirais qu'il te faut créer une procedure ou function qui vérifie si le formulaire est correctement rempli, le résultat serait un Boolean, et si la condition est remplie (if VerifieValide then... // la suite), là tu passes à la suite.
Toujours pas assez d'explications ou de morceaux de code pour être plus précis ;)
John Dogget
Messages postés384Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention 7 mai 2009 18 juil. 2004 à 16:25
Re.
T'est dur en affaire didonc :-D !
Mon problème n'est pas à propos des vérifications d'erreurs.
Si j'écris :
Form1.Show; // Affichage de la form et correction des erreurs
Cette instruction n'est pas blocante, les instructions à la suite de celle-ci seront executée immediatement. C'est bien la le problème, je veux que le programme marque une pause tant que la fenêtre est visible.
Vous n’avez pas trouvé la réponse que vous recherchez ?
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 18 juil. 2004 à 20:03
Je n'ai jamais dit que ShowModal était bloquant.
Mais là, je ne peux pas extrapoler plus, à ce stade, il faut vraiment voir le code.
Désolé, mais on ne peut pas tout deviner, et j'ai moi-même "d'autres-choses-sur-le-feu-qui-prennent-bien-la-tête", mais si je peux t'aider, ça sera avec plaisir. :)
cs_LeGuepard
Messages postés38Date d'inscriptionmardi 16 septembre 2003StatutMembreDernière intervention 7 septembre 20152 22 juil. 2004 à 16:54
Hé les gars, vous vous prenne la tête pour un vol de mouche!
D'apres ce que j'ai compris de la situation, John veut afficher un formulaire contenu dans un TForm et quand on a fini de jouer avec (le remplir), il traite les données.
C'est simple comme le Delphi ce truc !!!!
1. Afficher la Form
2. Quand on ferma le formulaire, traiter les données
Pour reprendre l'explication de Japee, imaginons que ton formulaire soit la Form1 et que tu y fais appel à partir de la Form2 en cliquant sur le Button1, voici le code:
procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.ShowModal; // En utilisant ShowModal, la procédure arrete là tant que la Form1 n'est pas fermée.
TraiterFormulire; // Appel de la procédure de traitement
end;
Maintenant, une autre solution serait de lancer la procédure de traitement a partir de l'évènement OnClose de la Form1, sous entendu que lors que le formulaire se ferme, il traite les données.
Mais dans le cas d'une annulation, il traiterait quand même les données, alors la meilleure solution serait simplement de mettre en bas du formulaire un boutons "Valider" qui a pour tâche de fermer le formulaire et de traiter les données, et si tu dois ajouter des test de remplissage correct, tu peux les faire la aussi.
Et comme je suis en forme malgré la chaleur, je te donne même une code de base de ce qui devrait-être la procédure OnClick de ce boutton "Valider":
procedure TForm1.BtnValidClick(Sender: TOblect);
var
valide: Boolean;
begin
{-- partie test du formulaire --}
valide:=True;
// Au départ, on initialise la variable "valide" à True, elle passera à False dès que un éléments n'est pas valable.
if EditNom.Text='' then valide:=False;
if EditPrenom.Text='' then valide:=False;
// et ainsi de suite pour tous tes tests.
{-- partie fermeture --}
if valide then
begin
Form1.Close;
TraiterFormulaire; // si la procédure TraiterFormulaire est dans l'unité de la Form1.
Form2.TraiterFormulaire; // si la procédure est dans l'unité de la Form2. Attention que dans ce cas, elle doit-être déclarée dans la partie publique.
end;
end;
Voilà, si tu as d'autres question, tu sais ou me trouver !