Bład w kodzie Delphi - prosty program

0

Kolejny post.
Bardzo proszę o pomoc.
Otóż:
Tworzę niewielki program do szkoły. Polega on mniej więcej na czymś w rodzaju testu, sprawdzianu czy quizu (jakby go nie nazwać).
Gracz ma za zadanie wybrać właściwą odpowiedź (RADIObutton), a nastepnie nacisnąć przycisk Reply zatwierdzający wybór i przenoszący do kolejnego pytania. Wykonałem projekt, który możecie zobaczyć poniżej, ale gdy chciałem go przekompilować na program pojawił się problem.
Projekt nie chce się skompilować.
Podświetlił się fragment tekstu (zmiana koloru bg) procedure Ttest.formCreate (Sender: TObject);
Domyślam się, ze oznacza to bład w procedurze.
Więc teraz mam do Was proźbę o wskazanie, a najlepiej poprawę błedu i umieszczenie poprawnego kodu w poście. Byłbym bardzo wdzięczny, gdyz słabo znam się na programowaniu.
Oto kod:

 unit z;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Menus, jpeg;

type
  Ttest = class(TForm)
    panelPytanie: TPanel;
    panelOdpowiedzi: TPanel;
    panelStatystyka: TPanel;
    tekstPytanie: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    tekstLiczbaPytan: TLabel;
    tekstLiczbaPoprawnych: TLabel;
    tekstLiczbaNiepoprawnych: TLabel;
    radioOdpowiedz1: TRadioButton;
    radioOdpowiedz2: TRadioButton;
    radioOdpowiedz3: TRadioButton;
    przyciskOdpowiedz: TButton;
    MainMenu1: TMainMenu;
    Game1: TMenuItem;
    Reply1: TMenuItem;
    N1: TMenuItem;
    Quit1: TMenuItem;
    Author1: TMenuItem;
    Image1: TImage;
    procedure Quit1Click(Sender: TObject);
    procedure Author1Click(Sender: TObject);
    procedure przyciskOdpowiedzClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
const liczbaPytan= 10;
var
  test: Ttest;
  pytania: array [1..liczbaPytan] of string;
  odpowiedzi1: array[1..liczbaPytan]of string;
  odpowiedzi2: array[1..liczbaPytan]of string;
  odpowiedzi3: array[1..liczbaPytan]of string;
  poprawne: array[1..liczbaPytan] of integer;
  aktualnePytanie:integer;
  liczbaPoprawnych:integer;
implementation
uses unit2;
{$R *.dfm}

procedure Ttest.formCreate (Sender: TObject);
begin
pytania[1]:='(Kto jest najlepszym angilkiem');
odpowiedzi1[1]:=('Rowan Atkinosn');
odpowiedzi2[1]:=('ktos inny');
odpowiedzi3[1]:=('nie ma takiego');
poprawne[1]:=1;

pytania[1]:=('Kto jest angielksim pisarzem');
odpowiedzi1[2]:=('J. Bush');
odpowiedzi2[2]:=('Ruswell');
odpowiedzi3[2]:=('Tolkien');
poprawne[1]:=3;

pytania[1]:=('Kto ma na imie john');
odpowiedzi1[3]:=('Atkinson');
odpowiedzi2[3]:=('Cleese');
odpowiedzi3[3]:=('Van damme');
poprawne[1]:=2;

liczbaPoprawnych:=0;
aktualnePytanie:=1;
uaktualnijNapisy(aktualnePytanie);
end;


procedure Ttest.Quit1Click(Sender: TObject);
begin
close;

end;



procedure uaktualnijNapisy(numerPytania:integer);
begin
test.Caption:=Quiz "The Famous British People". Pytanie'+intToStr(aktualnePytanie)+'/'+intToStr(liczbaPytan);
test.tekstPytanie.Caption:=pytania[numerPytania]
test.radioOdpowiedz1.Caption:=odpowiedzi1[numerPytania];
test.radioOdpowiedz2.Caption:=odpowiedzi2[numerPytania];
test.radioOdpowiedz3.Caption:=odpowiedzi3[numerPytania];
test.tekstLiczbaPytan.Caption:=intToStr(aktualnePytanie - 1 );
test.tekstPytanie.LiczbaPoprawnych.Caption:=intToStr(liczbaPoprawnych) ;
test.tekstLiczbaNiepoprawnych.Caption:=intToStr(aktualnePytanie - liczbaPoprawnych -1 );
end;
procedure Ttest.Author1Click(Sender: TObject);
begin
form2.Showmodal;
end;

function ktoraOdpowiedzWybrano: integer;
begin
    if test.radioOdpowiedz1.Checked then
    begin
         test.radioOdpowiedz1.Checked:=false;
         ktoraOdpowiedzWybrano:=1;
    end
    else if test.radioOdpowiedz2.Checked then
    begin
         test.radioOdpowiedz2.Checked:=false;
         ktoraOdpowiedzWybrano:=2;
    end
    else if test.radioOdpowiedz3.Checked then
    begin
         test.radioOdpowiedz3.Checked:=false;
         ktoraOdpowiedzWybrano:=3;
    end
    else
        ktoraOdpowiedzWybrano:=1;
end;             
procedure Ttest.przyciskOdpowiedzClick(Sender: TObject);
var wybranaOdpowiedz:integer;
begin
     wybranaOdpowiedz:= ktoraOdpowiedzWybrano();
     if wybranaOdpowiedz=-1 then
     showMessage ('Select answer')
     else
     begin
          if wybranaOdpowiedz=poprawne[aktualnePytanie] then
          liczba Poprawnych:=liczbaPoprawnych+1;
          aktualnePytanie:=aktualnePytanie+1;
          if aktualnePytanie<=liczbaPytan then
          uaktualnijNapisy(aktualnePytanie)
     else
     begin
        test.tekstLiczbaPytan.Caption:=intToStr(liczbaPytan );
        test.tekstLiczbaPoprawnych.Caption:=intToStr(liczbaPoprawnych) ;
        test.tekstLiczbaNiepoprawnych.Caption:=intToStr(liczbaPytan - liczbaPoprawnych );
        showmessage('You reply for all questions');
        close;
        end;
end;

end;

end.

Proszę o nie wyrzucanie do kosza tego tematu, dopóty, dopóki nie zostanie poprawiony błąd

0

Jest przynajmniej pare błędów, po pierwsze, źle zamykasz nawiasy w FormCreate, składnia tego wygląda tak:
a:='x'; a nie a:=('x'); Na dodatek Ty napisałeś a:=x'('); - bez sensu
po drugie, podaj dokładny komunikat błędu który Ci wywala.
I na dodatek, nie zamknełeś jednego bloku > ' <, i cały kod od tego miejsca jest czerwony - popraw.
Logiczne myślenie to podstawa rozwiązywania błędów, druga sprawa to znajomość składni języka.
Ktoś to przeniesie do newbie... - Widzę że moderatorzy szybsi ode mnie.

0

nav dał ci podpowiedź: http://4programmers.net/Forum/Kosz/107337-blad_w_projekcie_-_prosty_program_w_delphi?p=747826#id747826 - nie umiesz sam pokombinowac?

test.Caption:=Quiz "The Famous British People". Pytanie'+intToStr(aktualnePytanie)+'/'+intToStr(liczbaPytan);
  • nie umiesz używać apostrofów? Przecież to co piszesz nie ma prawa działać i kompilator WYRAŹNIE TO POKAZUJE!
test.Caption := 'Quiz "The Famous British People" - Pytanie' + IntToStr(aktualnePytanie) + '/' + IntToStr(liczbaPytan);

Błąd został poprawiony, temat nadaje się więc do kosza... następnym razem chociaż trochę samodzielności!

0

No więc zmieniłem. Teraz jest tak i nadal nie działa ;/

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Menus, jpeg;

type
  Ttest = class(TForm)
    panelPytanie: TPanel;
    panelOdpowiedzi: TPanel;
    panelStatystyka: TPanel;
    tekstPytanie: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    tekstLiczbaPytan: TLabel;
    tekstLiczbaPoprawnych: TLabel;
    tekstLiczbaNiepoprawnych: TLabel;
    radioOdpowiedz1: TRadioButton;
    radioOdpowiedz2: TRadioButton;
    radioOdpowiedz3: TRadioButton;
    przyciskOdpowiedz: TButton;
    MainMenu1: TMainMenu;
    Game1: TMenuItem;
    Reply1: TMenuItem;
    N1: TMenuItem;
    Quit1: TMenuItem;
    Author1: TMenuItem;
    Image1: TImage;
    procedure Quit1Click(Sender: TObject);
    procedure Author1Click(Sender: TObject);
    procedure przyciskOdpowiedzClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
const liczbaPytan= 10;
var
  test: Ttest;
  pytania: array [1..liczbaPytan] of string;
  odpowiedzi1: array[1..liczbaPytan]of string;
  odpowiedzi2: array[1..liczbaPytan]of string;
  odpowiedzi3: array[1..liczbaPytan]of string;
  poprawne: array[1..liczbaPytan] of integer;
  aktualnePytanie:integer;
  liczbaPoprawnych:integer;
implementation
uses unit2;
{$R *.dfm}

procedure Ttest.FormCreate(Sender: TObject);
begin
pytania[1]:='Kto jest najlepszym angilkiem';
odpowiedzi1[1]:='Rowan Atkinosn';
odpowiedzi2[1]:='ktos inny';
odpowiedzi3[1]:='nie ma takiego';
poprawne[1]:=1;

pytania[1]:='Kto jest angielksim pisarzem';
odpowiedzi1[2]:='J. Bush';
odpowiedzi2[2]:='Ruswell';
odpowiedzi3[2]:='Tolkien';
poprawne[1]:=3;

pytania[1]:='Kto ma na imie john';
odpowiedzi1[3]:='Atkinson';
odpowiedzi2[3]:='Cleese';
odpowiedzi3[3]:='Van damme';
poprawne[1]:=2;

liczbaPoprawnych:=0;
aktualnePytanie:=1;
uaktualnijNapisy(aktualnePytanie);
end;


procedure Ttest.Quit1Click(Sender: TObject);
begin
close;

end;



procedure uaktualnijNapisy(numerPytania:integer);
begin
test.Caption:='Application Software "The Famous British People" - Pytanie'+intToStr(aktualnePytanie)+'/'+intToStr(liczbaPytan);
test.tekstPytanie.Caption:=pytania[numerPytania]
test.radioOdpowiedz1.Caption:=odpowiedzi1[numerPytania];
test.radioOdpowiedz2.Caption:=odpowiedzi2[numerPytania];
test.radioOdpowiedz3.Caption:=odpowiedzi3[numerPytania];
test.tekstLiczbaPytan.Caption:=intToStr(aktualnePytanie - 1 );
test.tekstPytanie.LiczbaPoprawnych.Caption:=intToStr(liczbaPoprawnych) ;
test.tekstLiczbaNiepoprawnych.Caption:=intToStr(aktualnePytanie - liczbaPoprawnych -1 );
end;
procedure Ttest.Author1Click(Sender: TObject);
begin
form2.Showmodal;
end;

function ktoraOdpowiedzWybrano: integer;
begin
    if test.radioOdpowiedz1.Checked then
    begin
         test.radioOdpowiedz1.Checked:=false;
         ktoraOdpowiedzWybrano:=1;
    end
    else if test.radioOdpowiedz2.Checked then
    begin
         test.radioOdpowiedz2.Checked:=false;
         ktoraOdpowiedzWybrano:=2;
    end
    else if test.radioOdpowiedz3.Checked then
    begin
         test.radioOdpowiedz3.Checked:=false;
         ktoraOdpowiedzWybrano:=3;
    end
    else
        ktoraOdpowiedzWybrano:=1;
end;             
procedure Ttest.przyciskOdpowiedzClick(Sender: TObject);
var wybranaOdpowiedz:integer;
begin
     wybranaOdpowiedz:= ktoraOdpowiedzWybrano();
     if wybranaOdpowiedz=-1 then
     showMessage ('Select answer')
     else
     begin
          if wybranaOdpowiedz=poprawne[aktualnePytanie] then
          liczba Poprawnych:=liczbaPoprawnych+1;
          aktualnePytanie:=aktualnePytanie+1;
          if aktualnePytanie<=liczbaPytan then
          uaktualnijNapisy(aktualnePytanie)
     else
     begin
        test.tekstLiczbaPytan.Caption:=intToStr(liczbaPytan );
        test.tekstLiczbaPoprawnych.Caption:=intToStr(liczbaPoprawnych) ;
        test.tekstLiczbaNiepoprawnych.Caption:=intToStr(liczbaPytan - liczbaPoprawnych );
        showmessage('You reply for all questions');
        close;
        end;
end;

end;

end.

Cały czas tak jak wczesniej podświetla się ta sama formuła. jaka moze byc inna przyczyna błędu?

0

Wyrzucę zaraz do kosza, jeśli nie nauczysz się szybko opisywać co to znaczy nie działa. Mi się nie chce włączać delphi czy analizować całego kodu, żeby zobaczyć jakie błędy kompilator wyrzuci.

Jakie błędy wypisał kompilator? Co to znaczy nie działa? Czekamy na dokładny opis tego nie działa

0

Po poprawieniu kodu chciałem rozpocząć kompilację poprzez Compile Project.
Niestety, kliknąwszy na ten przycisk wyświetliło mi się okno z kodem i podświetlił się ten sam kod co wcześniej
dokładnie: procedure Ttest.FormCreate(Sender: TObject);
Po prostu background tekstu stał się ciemno czerwony

0

1.Wiesz, co to spacja, czy tabulator ? A umiesz formatować kod (mam na myśli pierwszą część) ?
2.Nie widzę średnika w tym kodzie:

test.tekstPytanie.Caption:=pytania[numerPytania]
0

Umiem. Ale tak jak mówilem. Nie za bardzo się na tym znam. Robiłem to "na szybko"

Wprowadziłem poprawki, ale nadal wyświetla sie ta sama procedura. Z czym to może być związane?
Może wprowadziłem nie taką wartość

0

A według mnie błąd polega na tym (między innymi, bo pewnie są też inne, a nie chce mi się sprawdzać), że skasowałeś jedną linijkę kodu, więc powinieneś ją teraz sam dopisać. Wstaw to bezpośrednio przed słowem private

procedure FormCreate(Sender: TObject);
0

Simplex. Dzięki wielkie udało się....
ale nie do końca..
bo tym razem podświetliła się kolejna część kodu
tym razem:
uaktualnijNapisy(aktualnePytanie);

0

No to napiszę Wam:
Po raz kolejny, gdy klikam na Compile Project, to wyświetla mi się okno z kodem Delphi i podświetla mi się tło tekstu na czerwono w linijce:
uaktualnijNapisy(aktualnePytanie); która znajduje się tutaj:

liczbaPoprawnych:=0;
aktualnePytanie:=1;
uaktualnijNapisy(aktualnePytanie);
end;
1

A masz otwarte okienko z błędami i ostrzeżeniami ?
A czytałeś helpa ?
A masz to otwarte.gif

Jest gif, tylko, że się nie animuje :(
Trza na niego nacisnąć.

2

W takim razie teraz zaznacz całą procedurę uaktualnijNapisy (12 linijek) i przesuń ją przed procedurę FormCreate i będziemy się bawić dalej (bo przyznam się, że trochę mnie to rozbawiło)

Mała uwaga do payl: odpowiedzieć na zadane pytanie, to żadna sztuka, ale odpowiedzieć bez pytania to dopiero jest coś ;)

0

[Error] Unit1.pas(78):Undeclared identifier: 'uaktualnijNapisy'

To się wyświetliło w tym oknie.

0

'procedure uaktualnijNapisy(bleble: integer)' przed słowo private (tylko o Boże! zmień bleble na odpowiednią nazwę zmiennej!)
A do procedury <font size="100">PO</span> słowie private dopisz na początku (po słowie procedura, a przed słowem 'uaktualnij') 'TTest.' (z kropką)
I tak do wszystkich bez słowa 'TTest.' na początku.
Rozumiesz, czy nie ?

Czyli poprawny kod będzie tak (chyba):

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Menus, jpeg;
 
type
  Ttest = class(TForm)
    panelPytanie: TPanel;
    panelOdpowiedzi: TPanel;
    panelStatystyka: TPanel;
    tekstPytanie: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    tekstLiczbaPytan: TLabel;
    tekstLiczbaPoprawnych: TLabel;
    tekstLiczbaNiepoprawnych: TLabel;
    radioOdpowiedz1: TRadioButton;
    radioOdpowiedz2: TRadioButton;
    radioOdpowiedz3: TRadioButton;
    przyciskOdpowiedz: TButton;
    MainMenu1: TMainMenu;
    Game1: TMenuItem;
    Reply1: TMenuItem;
    N1: TMenuItem;
    Quit1: TMenuItem;
    Author1: TMenuItem;
    Image1: TImage;
    procedure Quit1Click(Sender: TObject);
    procedure Author1Click(Sender: TObject);
    procedure przyciskOdpowiedzClick(Sender: TObject);
    procedure uaktualnijNapisy(numerPytania:integer);
    procedure FormCreate(Sender: TObject);
    function ktoraOdpowiedzWybrano: integer;;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
const liczbaPytan= 10;
var
  test: Ttest;
  pytania: array [1..liczbaPytan] of string;
  odpowiedzi1: array[1..liczbaPytan]of string;
  odpowiedzi2: array[1..liczbaPytan]of string;
  odpowiedzi3: array[1..liczbaPytan]of string;
  poprawne: array[1..liczbaPytan] of integer;
  aktualnePytanie:integer;
  liczbaPoprawnych:integer;
implementation
uses unit2;
{$R *.dfm}
 
procedure Ttest.FormCreate(Sender: TObject);
begin
pytania[1]:='Kto jest najlepszym angilkiem';
odpowiedzi1[1]:='Rowan Atkinosn';
odpowiedzi2[1]:='ktos inny';
odpowiedzi3[1]:='nie ma takiego';
poprawne[1]:=1;
 
pytania[1]:='Kto jest angielksim pisarzem';
odpowiedzi1[2]:='J. Bush';
odpowiedzi2[2]:='Ruswell';
odpowiedzi3[2]:='Tolkien';
poprawne[1]:=3;
 
pytania[1]:='Kto ma na imie john';
odpowiedzi1[3]:='Atkinson';
odpowiedzi2[3]:='Cleese';
odpowiedzi3[3]:='Van damme';
poprawne[1]:=2;
 
liczbaPoprawnych:=0;
aktualnePytanie:=1;
uaktualnijNapisy(aktualnePytanie);
end;
 
 
procedure Ttest.Quit1Click(Sender: TObject);
begin
close;
 
end;
 
 
 
procedure TTest.uaktualnijNapisy(numerPytania:integer);
begin
test.Caption:='Application Software "The Famous British People" - Pytanie'+intToStr(aktualnePytanie)+'/'+intToStr(liczbaPytan);
test.tekstPytanie.Caption:=pytania[numerPytania]
test.radioOdpowiedz1.Caption:=odpowiedzi1[numerPytania];
test.radioOdpowiedz2.Caption:=odpowiedzi2[numerPytania];
test.radioOdpowiedz3.Caption:=odpowiedzi3[numerPytania];
test.tekstLiczbaPytan.Caption:=intToStr(aktualnePytanie - 1 );
test.tekstPytanie.LiczbaPoprawnych.Caption:=intToStr(liczbaPoprawnych) ;
test.tekstLiczbaNiepoprawnych.Caption:=intToStr(aktualnePytanie - liczbaPoprawnych -1 );
end;
procedure Ttest.Author1Click(Sender: TObject);
begin
form2.Showmodal;
end;
 
function TTest.ktoraOdpowiedzWybrano: integer;
begin
    if test.radioOdpowiedz1.Checked then
    begin
         test.radioOdpowiedz1.Checked:=false;
         ktoraOdpowiedzWybrano:=1;
    end
    else if test.radioOdpowiedz2.Checked then
    begin
         test.radioOdpowiedz2.Checked:=false;
         ktoraOdpowiedzWybrano:=2;
    end
    else if test.radioOdpowiedz3.Checked then
    begin
         test.radioOdpowiedz3.Checked:=false;
         ktoraOdpowiedzWybrano:=3;
    end
    else
        ktoraOdpowiedzWybrano:=1;
end;             
procedure Ttest.przyciskOdpowiedzClick(Sender: TObject);
var wybranaOdpowiedz:integer;
begin
     wybranaOdpowiedz:= ktoraOdpowiedzWybrano();
     if wybranaOdpowiedz=-1 then
     showMessage ('Select answer')
     else
     begin
          if wybranaOdpowiedz=poprawne[aktualnePytanie] then
          liczba Poprawnych:=liczbaPoprawnych+1;
          aktualnePytanie:=aktualnePytanie+1;
          if aktualnePytanie<=liczbaPytan then
          uaktualnijNapisy(aktualnePytanie)
     else
     begin
        test.tekstLiczbaPytan.Caption:=intToStr(liczbaPytan );
        test.tekstLiczbaPoprawnych.Caption:=intToStr(liczbaPoprawnych) ;
        test.tekstLiczbaNiepoprawnych.Caption:=intToStr(liczbaPytan - liczbaPoprawnych );
        showmessage('You reply for all questions'); 
        close;
        end;
end;
 
end;
 
end.

PS: Jak już masz kopiować czyjś kod, to podpisz na końcu lub na początku, że to nie ty go pisałeś :P

0

Ok już jest OK.
No ale znowu się podświetlił kolejny fragment kodu.
Tym razem podświetlony fragment to:
test.tekstPytanie.LiczbaPoprawnych.Caption:=intToStr(liczbaPoprawnych) ;

A wyświetlony w oknie błąd jest następujący:
[Error] Unit1.pas(99): Undeclared Identifier: 'LiczbaPoprawnych'

Kod pisałem sam!!!!

0

Jak się kompilatorowi nie podoba, to weź i skasuj LiczbaPoprawnych (razem z kropką oczywiście).

0

Weź wywal '.tekstPytanie'
Powinno wtedy działać.
PS: Ale masz wszystkie komponenty na formie ?

0

Nie bo wtedy nie bedzie dzialac tak jak nalezy - do simplexa'

Tak mam wsyztskie komponenty- do Patryka

0

A komponent 'tekstPytanie' to co ?
Panel ?

0
Oskarro napisał(a)

Nie bo wtedy nie bedzie dzialac tak jak nalezy - do simplexa'

A teraz działa jak należy?

PS. Oczywiście wiesz, o które wystąpienie LiczbaPoprawnych chodzi.

0

tekst...

Już działa, ale teraz znowu błąd wrocił to poczatku i podswietla się to:
procedure uaktualnijNapisy(aktualnePytanie:integer);

a błąd jest następujący:
[Error] Unit1.pas(36): Unsatisfiked forward or external declaration 'Ttest.uaktualnijNapisy'

pOMOŻCIE!! ;P

0

Trochę się już pogubiłem, bo nie wiem czy zastosowałeś się do tego co napisałem ja, czy do tego, co podał Patryk27. Jeżeli przed słowem private dodałeś deklarację

procedure uaktualnijNapisy(aktualnePytanie:integer);

to implementacja tej procedury (czyli drugie wystąpienie, gdzieś dalej po słowie implementation) powinna zaczynać się tak

procedure Ttest.uaktualnijNapisy(aktualnePytanie:integer);

Jeżeli tak jest (nazwa procedury musi byc poprzedzona Ttest.) to nie wiem gdzie tkwi błąd. Pokaż aktualny kod

0

To jest aktualny kod

 unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Menus, jpeg;

type
  Ttest = class(TForm)
    panelPytanie: TPanel;
    panelOdpowiedzi: TPanel;
    panelStatystyka: TPanel;
    tekstPytanie: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    tekstLiczbaPytan: TLabel;
    tekstLiczbaPoprawnych: TLabel;
    tekstLiczbaNiepoprawnych: TLabel;
    radioOdpowiedz1: TRadioButton;
    radioOdpowiedz2: TRadioButton;
    radioOdpowiedz3: TRadioButton;
    przyciskOdpowiedz: TButton;
    MainMenu1: TMainMenu;
    Game1: TMenuItem;
    Reply1: TMenuItem;
    N1: TMenuItem;
    Quit1: TMenuItem;
    Author1: TMenuItem;
    Image1: TImage;
    procedure Quit1Click(Sender: TObject);
    procedure Author1Click(Sender: TObject);
    procedure przyciskOdpowiedzClick(Sender: TObject);
    procedure FormCreate(Sender: TObject) ;
    procedure uaktualnijNapisy(aktualnePytanie:integer);
    function  ktoraOdpowiedzWybrano: integer;

  private
    { Private declarations }
  public
    { Public declarations }
  end;
const liczbaPytan= 10;
var
  test: Ttest;
  pytania: array [1..liczbaPytan] of string;
  odpowiedzi1: array[1..liczbaPytan]of string;
  odpowiedzi2: array[1..liczbaPytan]of string;
  odpowiedzi3: array[1..liczbaPytan]of string;
  poprawne: array[1..liczbaPytan] of integer;
  aktualnePytanie:integer;
  liczbaPoprawnych:integer;
implementation
uses unit2;
{$R *.dfm}

procedure Ttest.FormCreate(Sender: TObject);
begin
pytania[1]:='Kto jest najlepszym angilkiem';
odpowiedzi1[1]:='Rowan Atkinosn';
odpowiedzi2[1]:='ktos inny';
odpowiedzi3[1]:='nie ma takiego';
poprawne[1]:=1;

pytania[1]:='Kto jest angielksim pisarzem';
odpowiedzi1[2]:='J. Bush';
odpowiedzi2[2]:='Ruswell';
odpowiedzi3[2]:='Tolkien';
poprawne[1]:=3;

pytania[1]:='Kto ma na imie john';
odpowiedzi1[3]:='Atkinson';
odpowiedzi2[3]:='Cleese';
odpowiedzi3[3]:='Van damme';
poprawne[1]:=2;

liczbaPoprawnych:=0;
aktualnePytanie:=1;
uaktualnijNapisy(aktualnePytanie);
end;


procedure Ttest.Quit1Click(Sender: TObject);
begin
close;

end;



procedure uaktualnijNapisy(numerPytania:integer);
begin
test.Caption:='Application Software "The Famous British People" - Pytanie'+intToStr(aktualnePytanie)+'/'+intToStr(liczbaPytan);
test.tekstPytanie.Caption:=pytania[numerPytania];
test.radioOdpowiedz1.Caption:=odpowiedzi1[numerPytania];
test.radioOdpowiedz2.Caption:=odpowiedzi2[numerPytania];
test.radioOdpowiedz3.Caption:=odpowiedzi3[numerPytania];
test.tekstLiczbaPytan.Caption:=intToStr(aktualnePytanie - 1 );
test.tekstLiczbaPoprawnych.Caption:=intToStr(liczbaPoprawnych) ;
test.tekstLiczbaNiepoprawnych.Caption:=intToStr(aktualnePytanie - liczbaPoprawnych -1 );
end;
procedure Ttest.Author1Click(Sender: TObject);
begin
form2.Showmodal;
end;

function ktoraOdpowiedzWybrano: integer;
begin
    if test.radioOdpowiedz1.Checked then
    begin
         test.radioOdpowiedz1.Checked:=false;
         ktoraOdpowiedzWybrano:=1;
    end
    else if test.radioOdpowiedz2.Checked then
    begin
         test.radioOdpowiedz2.Checked:=false;
         ktoraOdpowiedzWybrano:=2;
    end
    else if test.radioOdpowiedz3.Checked then
    begin
         test.radioOdpowiedz3.Checked:=false;
         ktoraOdpowiedzWybrano:=3;
    end
    else
        ktoraOdpowiedzWybrano:=1;
end;             
procedure Ttest.przyciskOdpowiedzClick(Sender: TObject);
var wybranaOdpowiedz:integer;
begin
     wybranaOdpowiedz:= ktoraOdpowiedzWybrano();
     if wybranaOdpowiedz=-1 then
     showMessage ('Select answer')
     else
     begin
          if wybranaOdpowiedz=poprawne[aktualnePytanie] then
          liczbaPoprawnych:=liczbaPoprawnych+1;
          aktualnePytanie:=aktualnePytanie+1;
          if aktualnePytanie<=liczbaPytan then
          uaktualnijNapisy(aktualnePytanie)
     else
     begin
        test.tekstLiczbaPytan.Caption:=intToStr(liczbaPytan );
        test.tekstLiczbaPoprawnych.Caption:=intToStr(liczbaPoprawnych) ;
        test.tekstLiczbaNiepoprawnych.Caption:=intToStr(liczbaPytan - liczbaPoprawnych );
        showmessage('You reply for all questions');
        close;
        end;
end;

end;

end.
0

Poprawilem i to nic niestety nie pomaga.
A moze ktoś mółgby wykonac za mnie ten program?

0

W załączniku umieszczam skompresowane wszystkie pliki projektu programu

Proszę jeszcze raz bardzo ładnie o pomoc! xd

0

Postanowiłem, że programu za Ciebie nie będę poprawiał, ale dam Ci w kodzie wskazówki (są cztery), dzięki którym będziesz mógł skompilować projekt.
Tak więc otwórz projekt z załącznika i próbuj go skompilować. Oczywiście pojawią się błędy, a tam gdzie przeniesie Cię kompilator masz napisane, co trzeba zrobić, aby wyeliminować dany błąd. Poprawiasz pierwszy błąd i próbujesz kompilacji, poprawiasz drugi... i tak dalej.
Gdy poprawisz wszystkie 4 błędy, to program się wreszcie skompiluje. Hurra!
... Niestety, to jeszcze nie koniec problemów. Mimo iż program już działa, to jeszcze nie zachowuje się zgodnie z oczekiwaniami. Trzeba jeszcze poprawić 2 rzeczy.

  • Chociaż w kodzie jest zadeklarowana procedura FormCreate, to nie jest ona przypisana do zdarzenia **OnCreate **formularza. Bez tego przypisania nigdy się nie wykona. Co więc trzeba zrobić? W oknie **Object Inspector **po lewej stronie ekranu wybierasz obiekt test (Ttest), przechodzisz do zakładki Events, odszukujesz zdarzenie OnCreate i z rozwijanej listy wybierasz FormCreate
  • Funkcja ktoraOdpowiedzWybrano powinna zwrócić w wyniku -1, gdy użytkownik nie zaznaczy żadnego CheckBox-a, a w kodzie zwraca 1. Popraw więc ostatnią linijkę tej procedury
    Jeżeli zrobisz dokładnie to, co napisałem, to program powinien wreszcie działać jak należy, a ty będziesz miał satysfakcję, że zrobiłeś to sam.

// Edit
W procedurze FormCreate wszędzie masz pytania[1] i poprawne[1], a powinno być 1, potem 2 itd.

0

Kurde... próbuje poprawiac te błędy i zupełnie nie mam pomysłu. Proszę napiszcie mi jak, bo zależy mi na czasie. Musze to niedługo oddać. Będę bardzo wdzięczny.

0

Ja widzę tylko jedno rozwiązanie, skoro otrzymałeś kompleksową wręcz pomoc oraz wyjaśnienia i nadal nie chcesz czy nie umiesz z nich skorzystać to dołączasz kod do posta napisanego w dziale Praca gdzie zlecasz to komuś, proponując stawkę, i opisując co poprawiony ewentualnie program ma robić. Od odpowiedzi simplex'a mineło 14 dni przez które w tym temacie nie pisałeś. To że goni Ciebie czas to niestety Twój problem. Napiszę obrazowo, jak nie masz możłiowsci albo wiedzy żeby samodzielnie upiec chleb,a chcesz zjeść chleb - to idziesz i go kupujesz w sklepie, nie inaczej jest z programowaniem. Nie posiadasz odpowiedniej wiedzy i nie chcesz jej posiąść, nie umiesz skorzystać ze wskazówek to jedynym rozwiązaniem jest zlecenie tego komuś w dziale Praca. Skonczyly się czasy że olesio wszystko za wszystkich tutaj robił jak tylko mógł. Przykro mi, może ktoś inny się zlituje, ale za darmo to wątpie. Również zlecenia od nieznanej osoby się raczej nie podajmę, bo można się na tym "przejechać" czego niestety raz doświadczyłem "idąć komuś na rękę".

0
Oskarro napisał(a)

Kurde... próbuje poprawiac te błędy i zupełnie nie mam pomysłu. Proszę napiszcie mi jak, bo zależy mi na czasie. Musze to niedługo oddać. Będę bardzo wdzięczny.

Brutalna prawda jest taka, że jest to Twój problem. Jeżeli nie potrafisz poradzić sobie nawet z podpowiedziami jakie zostały Tobie udzielone, to otrzymasz ocenę na jaką zasługujesz. Zapewne miałeś cały rok (lub pół roku), żeby to opanować. Darmowe Gotowce (Darmowus Programus da Nierobus) to dzisiaj co raz rzadszy gatunek niestety. Przykro mi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1