Problème avec un formulaire

John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009 - 17 juil. 2004 à 20:05
cs_LeGuepard Messages postés 38 Date d'inscription mardi 16 septembre 2003 Statut Membre Derniè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 ?

Merci à vous.

8 réponses

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
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...

O- ... heu... A+ ;)
0
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Derniè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.

A+
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
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 ;)
0
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Derniè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.
0

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

Posez votre question
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
18 juil. 2004 à 18:30
Bon, alors "Form1.ShowModal;"

Et quand tu fermes le Form, tu fais appel à une méthode qui va déclencher la suite (en passant une variable au besoin)...

Tant qu'il n'y a pas plus de code, je ne peux pas aller plus loin.

T'es pas tendre en affaire non plus, dis donc >:(
0
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
18 juil. 2004 à 19:02
ShowModal n'est pas blocant ...
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
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. :)
0
cs_LeGuepard Messages postés 38 Date d'inscription mardi 16 septembre 2003 Statut Membre Dernière intervention 7 septembre 2015 2
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 !

A+.
0
Rejoignez-nous