Multiple choice test i Delphi

Tags:    delphi

Hej

Jeg har fået en opgave i Programmering C på HTX, hvor jeg skal lave en multiple choice test i Borland Turbo Delphi Explorer.

Jeg forestiller mig at lægge alle spørgsmålene og 4 svar til hvert spørgsmål ind i en XML-fil, og så hente spørgsmål og svar ud i en tilfældig rækkefølge, så man ikke får den samme test to gange.

Jeg har ledt et stykke tid på nettet nu, men jeg synes kun jeg kan finde artikler om, hvordan man læser filen ind i en DBGrid, hvilket jeg ikke er interesseret i. Jeg vil gerne hive et spørgsmål ud fra XML-filen, og så de 4 svar, som så skal skrives på formen i labels med tilhørende radiobuttons.

Er der nogen, som lige kender til en artikel, som fortæller om dette? Eller som kan introducere mig til det, for jeg mangler lige lidt hjælp til at komme igang.

På forhånd tak

Mvh. Emil Bjerglund Pedersen

Edit: Jeg er naturligvis også åben over for andre forslag, som kan fungere som en færdig løsning



Indlæg senest redigeret d. 15.01.2008 10:00 af Bruger #5426
6 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Hvis den er helt galt med XML, hvorfor så ikke bare bruge gode gamle INI?



Jeg må indrømme at jeg ikke kan se den store idé i at loade an XML-fil ind i en TDBGrid først. Nu sidder jeg desværre ikke ved en computer med Delphi på, men jeg ville nok løse problemet nogenlunde således:

Der skal bruges en TRadioGroup til svarmulighederne og en TXMLDocument til at læse XML-filen med.
Jeg forestiller mig at XML-filen vil se nogenlunde sådanne ud:
Fold kodeboks ind/udKode 

Din TXMLDocument sættes til at pege på XML-filen og autoopen* skal sættes til true.

Nu er det at jeg mangler min Delphi-dokumentation da jeg ikke kan huske de korrekte navne på properties i TXMLDocument så jeg skriver muligvis de forkerte navne. Du bør tjekke med dokumentationen for at finde de rigtige navne.

Du skal have en IXMLNode til at pege på XML-filens rod (<questions>;).

Fold kodeboks ind/udKode 


DocumentRoot giver dig nu let tilgang til alle dens 'børn' og jeg må her igen henvise til dokumentationen for yderligere detaljer.
Grundidéen er dog at du kan få adgang til et hvilket som helst 'barn' med ChildNodes som fungerer ligesom en array.

Fold kodeboks ind/udKode 


Når brugeren har svaret vil du blot tjekke om den angivne <answer> har attributten correct = '1'.

Fold kodeboks ind/udKode 


Dette burde overordnet være nok til at kunne få dig i gang. Der mangler selvfølgelig noget med at vælge og arrangere spørgsmålene tilfældigt, men det vil jeg lade dig ordne. Et muligt vink er dog at du kunne tilføje en attribut i root-elementet som fortæller hvor mange spørgsmål der er (hvis dette ikke allerede findes i IXMLNode).
Som sagt er navnene dog med stor sandsynlighed ikke korrekte så du må tjekke dokumentationen for at finde de rigtige kald.



Hvor har du problemer? Er det ved indlæsning af XML-filen?
Hvis du kan læse fra XML-filen bør det jo være nemt at smide spørgsmålene ind i en TRadioGroup.



Jeg har fået læst en XML fil ind i en TDBGrid, men jeg kan ikke lige regne ud hvordan jeg får hevet et enkelt felt ud, og smider det i en label ud for en radiobutton.



Jeg vælger at lukke tråden og give point til Peter, pga. den hjælp jeg har fået fra ham.

Jeg endte bare med at smide det hele i et array, for jeg havde ikke tid til at få den anden løsning til at virke.







t