kopierreko
Messages postés139Date d'inscriptionmercredi 12 mars 2008StatutMembreDernière intervention10 juillet 2010
-
23 avril 2008 à 14:10
Sat83
Messages postés166Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention13 octobre 2008
-
5 mai 2008 à 17:59
Bonjour tout le monde;
Je dois créer un questionnaire en deplhi, mais par étape: C-A-D
1ère question, je rempli le formulaire, et là, un message apparait me disant si j'ai bon ou si j'ai faux, et en même temps, là fenêtre se quitte et passe à la question d'après.
Comment procéder ?
Merci
procedure TForm1.BtnValidClick(Sender: TObject);
var nbrQuestion : integer ;
messageTmp : string ;
begin
if ( uppercase( EdtReponse.Text ) = uppercase( listReponse.strings[index] )) then
begin
Application.MessageBox('FELICITATION, VOUS AVEZ LA BONNE REPONSE!','RESULTAT',MB_ICONINFORMATION + MB_OK) ;
cptBonneRep := cptBonneRep + 1 ; // on compte les bonnes reponses
end else
begin
messageTmp := 'DOMMAGE, VOUS N''AVEZ PAS LA BONNE REPONSE!'
+ #10#13 //on saute une ligne
+ 'La bonne reponse était : '
+ listReponse.strings[index] ; //on construit le message
Application.MessageBox(PChar(messageTmp),'RESULTAT SUR CETTE QUESTION',MB_ICONINFORMATION + MB_OK) ;
end;
index := index+1 ; //on passe a laquestion suivante
// recupere le nombre de question (<=> le nombre d'élement dans la liste)
nbrQuestion := listQuestion.Count ;
if index >= nbrQuestion then // on verifie si il reste des questions
begin
messageTmp := 'Vous obtenez une note de : ' + IntToStr(cptBonneRep) + '/' + IntToStr(nbrQuestion) ;
Application.MessageBox( PChar(messageTmp) ,'RESULTAT FINAL',MB_ICONINFORMATION + MB_OK) ;
BtnValid.Enabled := false ; // on desactive le bouton car il n'y a plus de questions
end else
begin
LblQuestion.caption := listQuestion.strings[index] ; //on l'affiche
EdtReponse.Text := '' ; //on efface la reponse précedante
end ;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
listQuestion := TStringList.Create; //on creer la liste de questions
listReponse := TStringList.Create; // on creer la liste de reponses
listQuestion.LoadFromFile('C:\question.txt'); //on charge depuis le fichier
listReponse.LoadFromFile('C:\reponse.txt'); //on charge depuis le fichier
index := 0;
LblQuestion.caption := listQuestion.strings[index];
cptBonneRep := 0 ;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
listQuestion.Free; //on detruit les listes
listReponse.Free;
end;
procedure TForm1.BtnQuitClick(Sender: TObject);
begin
Close ; // on quitte le programme
end;
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 23 avril 2008 à 14:49
Où en es-tu dans l'avancée de ce code ?
Tu peux nous montrer un morceau ?
Si tu n'as encore rien fait, et que tu attends une solution ou un programme tout fait, passe ton chemin.
merci
kopierreko
Messages postés139Date d'inscriptionmercredi 12 mars 2008StatutMembreDernière intervention10 juillet 2010 23 avril 2008 à 15:02
Ben pour l'instant j'ai testé avec les frames et tout ça mais je patoge ...
J'ai pensé à quand le message apparait pour dire si on a bon, en cliquant sur continuer, la fenêtre se ferme, celle avec la question aussi et une autre s'ouvre ac la question suivante, mais je sais pas du tout comment je peux procéder
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm1.validClick(Sender: TObject);
begin
TForm.Create(nil);
if Edit1.Text='CO2' then //Si le texte de l'edit est "delphi" alors...
ShowMessage('Exelent ! Vous pouvez passer à la question suivante !') //On affiche un message indiquant que le mot de passe est correct
else if Edit1.Text='co2' then //Si le texte de l'edit est "delphi" alors...
ShowMessage('Exelent ! Vous pouvez passer à la question suivante !') //On affiche un message indiquant que le mot de passe est correct
else //Sinon...
ShowMessage('Mot de passe incorrect !'); //On affiche un message indiquant que le mot de passe est incorrect
cs_Shai
Messages postés50Date d'inscriptionmardi 8 octobre 2002StatutMembreDernière intervention21 décembre 2011 23 avril 2008 à 15:20
Ah, l'éditeur avancé, il l'est surtout en bug,
bon, plus court, ce sujet "http://www.developpez.net/forums/showpost.php?p=2953247&postcount=12" devrait t'intéresser, il s'appuie sur la boucle Run et les évènements pour gérer l'ensemble d'un questionnaire, mon exemple est en dur, mais avec un peu d'imagination on peut lire un fichier XML contenant les questions et les comportement entre les questions ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Sat83
Messages postés166Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention13 octobre 2008 23 avril 2008 à 15:52
Un point de départ simple pour commencer :
- tu crée deux fichier contenant la liste des question (question.txt) et la liste des reponses (reponse.txt)
- sur ta forme tu place un label, un edit et un bouton
- en variable globale (ou mieux en donnée membre privée de ta classeTForm1 si tu sais ce que c'est) tu creé:
>2 TStringList listQuestion et listReponse >1 entier index
var listQuestion, listReponse : TStringList ;
index : Integer ;
- dans le OnCreate de ta Form (tu double clique dessus) tu charge ta liste de question/reponse:
listQuestion := TStringList.Create; //on creer la liste de questions
listReponse := TStringList.Create; // on creer la liste de reponses
listQuestion.LoadFromFile('C:\MonDossier\question.txt'); //on charge depuis le fichier
listReponse.LoadFromFile('C:\MonDossier\reponse.txt') //on charge depuis le fichier
index := 0 ;
label1.caption = listQuestion.strings[index] ;
- dans la fonction de ton bouton :
if ( uppercase( Edit1.Text ) = uppercase( listReponse.strings[index] )) then
ShowMessage('Bonne reponse')
else
ShowMessage('Mauvaise reponse ');
index := index + 1 ; //on passe a laquestion suivante
label1.caption = listQuestion.strings[index] ; //on l'affiche
Edit1.Text = '' ; /on efface la reponse précedante
- dans le OnDestroy de ta Form (je te laisse cherché comment le créer)
//on detruit ce qu'on a creer ( un Create implique un Free qqpart dans le code )
listQuestion.Free; //on detruit les listes
listReponse.Free;
Cet exemple ne montre evidemment pas la meilleurs manière de s'y prendre pour faire ce que tu veux faire, mais ca propose une solution simple a mettre en oeuvre, pas trop difficile a comprendre (je pense) et facilement améliorable, même avec peux de connaissance (tu peux par exemple créer des fonctions pour les trucs répétitifs, compté les bonnes reponses, etc...).
Cet methode a pas mal de defaut (par exmeple dans tes fichiers les question/reponses doivent parfaitement correspondre, sinon ca marche pas), mais je pense que ca te fera une premiere approche.
Sat83
Messages postés166Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention13 octobre 2008 23 avril 2008 à 16:06
Ah oui, il va de soit que ce que je t'ai proposé n'est qu'une ebauche, tu va vite tombé sur des problèmes et exceptions (fichier non trouvé, indice de liste hors limite, etc...).
Le but c'est que tu prenne en compte ces problèmes quand tu tombera dessus, et tenté de les resoudres par toi même.
Et petit a petit tu améliorera ton application en ajoutant des tests et des protections evitant divers plantages possible.
var
Form1: TForm1;
listQuestion, listReponse : TStringList ;
index : Integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
listQuestion := TStringList.Create; //on creer la liste de questions
listReponse := TStringList.Create; // on creer la liste de reponses
listQuestion.LoadFromFile('C:\1-Pierre\9-Programmation\Delphi\Mr DETRE\questions\questions.txt'); //on charge depuis le fichier
listReponse.LoadFromFile('C:\1-Pierre\9-Programmation\Delphi\Mr DETRE\questions\reponses.txt'); //on charge depuis le fichier
index:=0;
label1.caption := listQuestion.strings[index];
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if ( uppercase( Edit1.Text ) = uppercase( listReponse.strings[index] )) then
ShowMessage('Bonne reponse')
else
ShowMessage('Mauvaise reponse ');
index:=index+1; //on passe a laquestion suivante
label1.caption := listQuestion.strings[index] ; //on l'affiche
Edit1.Text := '' ; //on efface la reponse précedante
//on detruit ce qu'on a creer ( un Create implique un Free qqpart dans le code )
listQuestion.Free; //on detruit les listes
listReponse.Free;
end;
end.
Et je voudrais savoir aussi comment éviter que les textes mauvaise réponse et bonne réponse s'affiche dans un fenêtre appellée project1
Merci pour tout, grâce à vous, je comprend des tas de choses que je n'avais pas compris avant !!!
var
Form1: TForm1;
listQuestion, listReponse : TStringList ;
index : Integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
listQuestion := TStringList.Create; //on creer la liste de questions
listReponse := TStringList.Create; // on creer la liste de reponses
listQuestion.LoadFromFile('C:\1-Pierre\9-Programmation\Delphi\Mr DETRE\questions\questions.txt'); //on charge depuis le fichier
listReponse.LoadFromFile('C:\1-Pierre\9-Programmation\Delphi\Mr DETRE\questions\reponses.txt'); //on charge depuis le fichier
index:=0;
label1.caption := listQuestion.strings[index];
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if ( uppercase( Edit1.Text ) = uppercase( listReponse.strings[index] )) then
ShowMessage('Bonne reponse')
else
ShowMessage('Mauvaise reponse ');
index:=index+1; //on passe a laquestion suivante
label1.caption := listQuestion.strings[index] ; //on l'affiche
Edit1.Text := '' ; //on efface la reponse précedante
end;
end.
Je voudrais juste savoir comment afficher l'apréciation dans une fenêtre nommé apréciations
^^
Merci ^^
Sat83
Messages postés166Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention13 octobre 2008 25 avril 2008 à 18:18
Avec une icône en plus :
Application.MessageBox('blablablablablablablablablabla','TITRE DU MESSAGE',MB_ICONINFORMATION + MB_OK) ;
Et n'oublis pas de détruire les TStringList que tu a crées, c'est très important !
Dans l'inspecteur d'objet de ta Form1, tu va dans l'onglet Evenement, tu va dans OnDestroy et tu double clique, ca te creera une procedure:
procedure TForm1.FormDestroy(Sender: TObject);
begin
listQuestion.Free; //on detruit les listes
listReponse.Free;
end;
Et on conseil lorsque tu developpe, pense a renommer tes composant en leurs donnant des noms significatifs (là avec 3 composant ça va, mais imagine un projet avec des centaine de composant). Par exemple LblQuestion, EdtReponse, BtnValid (ce n'est que des proposition, a toi de trouvé un nom qui te semble parlant pour tes composants.
Et pour la déclaration de tes variables, plutot que de les déclaré en variable globale (comme tu l'as fait), tu peux les déclaré en donnée membre de ta classe :
procedure TForm1.FormCreate(Sender: TObject);
begin
listQuestion := TStringList.Create; //on creer la liste de questions
listReponse := TStringList.Create; // on creer la liste de reponses
listQuestion.LoadFromFile('templates\chmnd.data'); //on charge depuis le fichier
listReponse.LoadFromFile('templates\drxfm.data'); //on charge depuis le fichier
index := 0;
LblQuestion.caption := listQuestion.strings[index];
cptBonneRep := 0 ;
end;
procedure TForm1.BtnValidClick(Sender: TObject);
var nbrQuestion : integer ;
messageTmp : string ;
begin
if ( uppercase( EdtReponse.Text ) = uppercase( listReponse.strings[index] )) then
begin
Application.MessageBox('FELICITATION, VOUS AVEZ LA BONNE REPONSE!','RESULTAT',MB_ICONINFORMATION + MB_OK) ;
cptBonneRep := cptBonneRep + 1 ; // on compte les bonnes reponses
end else
begin
messageTmp := 'DOMMAGE, VOUS N''AVEZ PAS LA BONNE REPONSE!'
+ #10#13 //on saute une ligne
+ 'La bonne reponse était : '
+ listReponse.strings[index] ; //on construit le message
Application.MessageBox(PChar(messageTmp),'RESULTAT SUR CETTE QUESTION',MB_ICONINFORMATION + MB_OK) ;
end;
index := index+1 ; //on passe a laquestion suivante
// recupere le nombre de question (<=> le nombre d'élement dans la liste)
nbrQuestion := listQuestion.Count ;
if index >= nbrQuestion then // on verifie si il reste des questions
begin
messageTmp := 'Vous obtenez une note de : ' + IntToStr(cptBonneRep) + '/' + IntToStr(nbrQuestion) ;
Application.MessageBox( PChar(messageTmp) ,'RESULTAT FINAL',MB_ICONINFORMATION + MB_OK) ;
BtnValid.Enabled := false ; // on desactive le bouton car il n'y a plus de questions
end else
begin
LblQuestion.caption := listQuestion.strings[index] ; //on l'affiche
EdtReponse.Text := '' ; //on efface la reponse précedante
end ;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
listQuestion.Free; //on detruit les listes
listReponse.Free;
end;
procedure TForm1.OnShow(Sender: TObject; var Key: Char);
var nbrQuestion : integer ;
messageTmp : string ;
begin
media := TMediaPlayer.Create(form1);
media := TMediaPlayer.CreateParented(form1.Handle);
media.FileName := myMp3Location;
media.Open;
media.Play;
begin
if Key=#32 then
begin
if ( uppercase( EdtReponse.Text ) = uppercase( listReponse.strings[index] )) then
begin
Application.MessageBox('FELICITATION, VOUS AVEZ LA BONNE REPONSE!','RESULTAT',MB_ICONINFORMATION + MB_OK) ;
cptBonneRep := cptBonneRep + 1 ; // on compte les bonnes reponses
end else
begin
messageTmp := 'DOMMAGE, VOUS N''AVEZ PAS LA BONNE REPONSE!'
+ #10#13 //on saute une ligne
+ 'La bonne reponse était : '
+ listReponse.strings[index] ; //on construit le message
Application.MessageBox(PChar(messageTmp),'RESULTAT SUR CETTE QUESTION',MB_ICONINFORMATION + MB_OK) ;
end;
index := index+1 ; //on passe a laquestion suivante
// recupere le nombre de question (<=> le nombre d'élement dans la liste)
nbrQuestion := listQuestion.Count ;
if index >= nbrQuestion then // on verifie si il reste des questions
begin
messageTmp := 'Vous obtenez une note de : ' + IntToStr(cptBonneRep) + '/' + IntToStr(nbrQuestion) ;
Application.MessageBox( PChar(messageTmp) ,'RESULTAT FINAL',MB_ICONINFORMATION + MB_OK) ;
BtnValid.Enabled := false ; // on desactive le bouton car il n'y a plus de questions
end else
begin
LblQuestion.caption := listQuestion.strings[index] ; //on l'affiche
EdtReponse.Text := '' ; //on efface la reponse précedante
end ;
end;
end;
end;
procedure TForm1.BtnQuitClick(Sender: TObject);
begin
media.Stop;
application.terminate;
end;