Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Jak napisać test wyboru w Delphi?

elektronik_tk 20 Lut 2006 18:13 2643 4
  • #1 20 Lut 2006 18:13
    elektronik_tk
    Poziom 26  

    Witam. Mam napisac test wyboru a),b),c),d).
    Nie wiem jak się za to zabrać, jeszcze najlepiej gdyby podliczało poprawne i błędne odpowiedzi.
    Moja najprostrzą koncepcją jest jedynie takie coś:
    na każdym formularzu osobne pytanie. odpowiedzi zaznaczane Radiobuttonami, potem podliczane w programie dobre odpowiedzi, np przypisując dobremu zaznaczeniu liczbe 1 i potem dodaniu ich. no ale bym musial mieć duużo formularzy, bo do każdego pytania osobny i jakiś przycisk gdy przechodzi do nastepnego pytania to zamyka ten formularz i otwiera następny.
    na pewno jest jakiś lepszy sposob. Pomóżcie.
    może już ktoś robił coś podobnego?

    0 4
  • #2 20 Lut 2006 19:34
    Jaro15l_90r
    Poziom 13  

    Zrób sobie plik INI np taki:

    Code:
    [dane]
    
    ile_pytan=1

    [pytanie_1]
    pytanie=Jakieś tam pytanie numer 1
    odp_a=Odpowiedź a
    odp_b=Odpowiedź b
    odp_c=Odpowiedź c
    odp_d=Odpowiedź d
    poprawna=b

    I tak zrób sobie kilka sekcji pytanie_2, pytanie_3 itd. i zmień ilość pytań w sekcji dane. Plik zapisz pod nazwą pytania.ini w katalogu programu.

    W programie w uses wpisz dodaj IniFiles;
    Dodaj zmienne: INI: TIniFile;, ile_pytan, teraz, punkty: integer; oraz poprawne: string;. Stwórz label: pyt, odp_a, odp_b, odp_c, odp_d oraz buttony a, b, c, d.
    W procedurze OnFormCreate dopisz takie linijki:
    Code:
    INI := TIniFile.Create(Application.Exename)+'pytania.ini');
    
    ile_pytan := INI.Readinteger('dane', 'ile_pytan', 0);
    punkty := 0;
    teraz := 1;
    Pytanie(1);


    Stwórz procedurę np.:
    Code:
    procedure Pytanie(numer: integer);
    
    begin
    pyt.caption := INI.Readstring('pytanie_'+inttostr(numer), 'pytanie', '');
    odp_a.caption := INI.Readstring('pytanie_'+inttostr(numer), 'odp_a', '');
    odp_b.caption := INI.Readstring('pytanie_'+inttostr(numer), 'odp_b', '');
    odp_c.caption := INI.Readstring('pytanie_'+inttostr(numer), 'odp_c', '');
    odp_d.caption := INI.Readstring('pytanie_'+inttostr(numer), 'odp_d', '');
    poprawne := INI.Readstring('pytanie_'+inttostr(numer), 'poprawna', '');
    end;


    Stwóz teraz akcję OnClick na przyciskach a, b, c, d i wpisz coś takiego:
    Code:
    If poprawne = 'a' then // Dla przycisku A, dla innych odpowiednio b, c, d...
    
    begin
    inc(punkty);
    If teraz < ile_pytan then
    begin
    inc(teraz);
    Pytanie(teraz);
    end
    else
    Application.Messagebox(PAnsiChar('Koniec testu! Zdobyłeś '+inttostr(punkty)+' punktów, gratulacje.'), 'Test', MB_OK+MB_IconInformation);
    end;


    Oczywiście kod jest pisany na szybko i nie wiem czy będzie działał poprawnie, jeżeli ni, to przepraszam za pomyłki.

    0
  • #3 20 Lut 2006 19:47
    one_eddie
    Poziom 25  

    Najprosciej bylo by to zrobic z wykorzystaniem html, kontrolki WebBrowser (ew wlasnej) lub z wykorzystaniem skrolowanego formularza (ew czegos co nazywa sie wizard).

    Ja zrobil bym to tak:
    1. ustalil format danych (testu): osobiscie preferuje XML (moze byc nawet kodowany)
    2. program odczytuje w jakis sposob dane, chodzi mi o to ze uzytkownik wybiera test albo ma go narzuconego odgornie.
    3. tworzysz kontrolki dynamicznie wczytujac kazda kontrolke do kontenera. Kontener przechowuje informacje o typie ew informacjach (np zew obrazku, odpowiedzi, pytaniu, itp). Potem w petli sprawdasz jaki jest rodzaj pytania jaka kontrolke nalezy wstawic. majac je wszystkie w kontenerze bez problemu obliczysz sobie rozmiar formularza. Podczas wstawiania kontrolek bez problemu obliczysz sobie w jakim miejscu nalezy ja wstawic. pracy jest sporo. Chociaz to zalezy na jaki efekt koncowy liczysz. Zasze mozna odwalic fuszere. Nauczylo mnie to przegladanie kodow umieszczanych od czasu do czasu na tym forum:)

    Kod tworzacy w zasadzie jest najciekawsza czescia zadania.
    Nad szczegolami zastanow sie sam.

    Jesli wybierzesz HTML sprawa renderingu jest bardzo prosta poniewaz zrobi to za ciebie sama kontrolka jedyny problem to odebranie i sprawdzenie danych. Przy uzyciu DHTML bedziesz mogl latwo dynamicznie smieniac zawartosc strony.

    Osobiscie proponuje HTML. Bedziesz mogl latwo zmieniac layout-y.

    0
  • #4 20 Lut 2006 22:26
    _h
    Poziom 20  

    elektronik - Twoj pomysl jest dobry. Ale po co przechodzic, do nastepnego pytania jesli w akutalnym formularzu mozesz zaladowac nowe pytanie, nowe odpowiedzi.

    Ile pytan tyle rekordow postaci [pytanie,odp_a,odp_b,odp_c,odp_d,praw_odp] albo
    [pytanie,[odp_a,pktow],[odp_b,pktow],[odp_c,pktow],[odp_d,pktow]]

    Przycisk 'dalej' obslugiwal by zdarzenie rpzejscia do nowego rekordu - wyswietlenia w labelu pytania, zaladowania nowych caption do radiogroup. Wszystko oparte o jeden formularz, jden radiogorup itd

    Dodano po 2 [minuty]:

    Dodatkowo mozna byloby spokojnie przechodzic miedzy pytaniami dodajac opcje w rekordzie [wybrana_wczesniej_odpowiedz]

    0
  • #5 21 Lut 2006 07:50
    elektronik_tk
    Poziom 26  

    _h napisał:
    elektronik - Twoj pomysl jest dobry. Ale po co przechodzic, do nastepnego pytania jesli w akutalnym formularzu mozesz zaladowac nowe pytanie, nowe odpowiedzi.

    Ile pytan tyle rekordow postaci [pytanie,odp_a,odp_b,odp_c,odp_d,praw_odp] albo
    [pytanie,[odp_a,pktow],[odp_b,pktow],[odp_c,pktow],[odp_d,pktow]]

    Przycisk 'dalej' obslugiwal by zdarzenie rpzejscia do nowego rekordu - wyswietlenia w labelu pytania, zaladowania nowych caption do radiogroup. Wszystko oparte o jeden formularz, jden radiogorup itd

    Dodano po 2 [minuty]:

    Dodatkowo mozna byloby spokojnie przechodzic miedzy pytaniami dodajac opcje w rekordzie [wybrana_wczesniej_odpowiedz]


    no właśnie pisałem, że to co ja tam obmyśliłem nie jest najlepsze, bo poprostu sie na tym aż tak dobrze nie znam ;)
    znalazłem jakiś artykuł w Espercie :D właśnie jest coś podobnego o czym piszesz. Moze już sobie sam poradze. Jakby co to jeszcze się odezwę z pytaniami ;]

    0