Witam,
Sprawa wygląda dość interesująco i nie jeden programista siedział z załamaną głową próbując znaleźć przyczynę błędu "Undeclared Identifier" dla obiektów: LabelPytanie, Button1, Button2 i Button3.
Mój unit prezentuje się w ten sposób:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, mmsystem;
type
TForm2 = class(TForm)
LabelPytanie: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Const
LiczbaPytan = 9;
var
Form2: TForm2;
BGraRuszyla: Boolean; { Czy gra juz ruszyla ? }
IStanKonta: LongWord; { Stan Konta gracza }
IPoprawne: Byte; { Ilosc poprawnych odpowiedzi }
APytania: array[1..LiczbaPytan,1..4] of String; { Tablica przechowywujaca pytania, [1]Pytanie[2]DobraOdpowiedz[3]Zla[4]Zla }
ABylyPytania: array[1..LiczbaPytan] of Boolean; { Przechowuje czy pytanie o danym indexie juz bylo }
INumerPytania: Byte; { Numer pytania }
IIndexButtona: Byte; { Index buttona poprawnej odpowiedzi }
IZadanePytania: Byte; { Zmienna przechowuje ile zadano juz pytan }
implementation
{$R *.dfm}
procedure DodajPytania();
begin
{ Pierwsze pytanie }
APytania[1][1]:='4+3*2=?';
APytania[1][2]:='10';
APytania[1][3]:='14';
APytania[1][4]:='16';
{ drugie pytanie }
APytania[2][1]:='W którym roku odbyl się chrzest Polski?';
APytania[2][2]:='966';
APytania[2][3]:='696';
APytania[2][4]:='996';
{ trzecie pytanie }
APytania[3][1]:='Z jakiego sportu zrezygnowal znany Polski skoczek Adam Malysz?';
APytania[3][2]:='Ze skoków narciarskich';
APytania[3][3]:='Ze skoku w dal';
APytania[3][4]:='Ze skoku wzwyż';
{ czwarte pytanie }
APytania[4][1]:='Z jakiego sportu zrezygnowal znany Polski skoczek Adam Malysz?';
APytania[4][2]:='Ze skoków narciarskich';
APytania[4][3]:='Ze skoku w dal';
APytania[4][4]:='Ze skoku wzwyż';
{ piąte pytanie }
APytania[5][1]:='Z jakiego kraju pochodzi slynna piosenkarka Rihanna?';
APytania[5][2]:='Z Barbadosu';
APytania[5][3]:='Z USA';
APytania[5][4]:='Z Kenii';
{ szóste pytanie }
APytania[6][1]:='Kiedy obchodzony jest sylwester?';
APytania[6][2]:='31 grudnia';
APytania[6][3]:='30 listopada';
APytania[6][4]:='32 lutego';
{ siódme pytanie }
APytania[7][1]:='Za jaką datę traktuje się powstanie organizacji ZdobywcyGier?';
APytania[7][2]:='9 wrzesnia 2012';
APytania[7][3]:='1 wrzesnia 2012';
APytania[7][4]:='18 października 2012';
{ ósme pytanie }
APytania[8][1]:='Jaka jest druga litera polskiego alfabetu?';
APytania[8][2]:='Ą';
APytania[8][3]:='B';
APytania[8][4]:='A';
{ dziewiate pytanie }
APytania[9][1]:='Po co żolnierz ma plaszcz?';
APytania[9][2]:='Po kolana';
APytania[9][3]:='Po brzegi';
APytania[9][4]:='Po jaja';
end;
procedure LosujPytanie();
var i,j: Byte;
LABEL Lagain; { Deklaracja uchwytu dla goto }
begin
randomize;
Lagain:
INumerPytania:=random(LiczbaPytan);
if ABylyPytania[INumerPytania] then
goto Lagain;
LabelPytanie.Caption:=APytania[INumerPytania][1];
IIndexButtona:=random(3);
case IIndexButtona of
1:begin
Button1.Caption:=APytania[INumerPytania][2];
Button2.Caption:=APytania[INumerPytania][3];
Button3.Caption:=APytania[INumerPytania][4];
end;
2:begin
Button2.Caption:=APytania[INumerPytania][2];
Button1.Caption:=APytania[INumerPytania][3];
Button3.Caption:=APytania[INumerPytania][4];
end;
3:begin
Button3.Caption:=APytania[INumerPytania][2];
Button2.Caption:=APytania[INumerPytania][3];
Button1.Caption:=APytania[INumerPytania][4];
end;
end;
ABylyPytania[INumerPytania]:=True;
IZadanePytania:=IZadanePytania+1;
if IZadanePytania = LiczbaPytan then
begin
IZadanePytania := 0;
for j:=1 to LiczbaPytan do
ABylyPytania[j]:=False;
end;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
case IIndexButtona of
1:PlaySound('zla.wav',0,SND_ASYNC);
2:begin
IPoprawne:=IPoprawne+1;
PlaySound('dobra.wav',0,SND_ASYNC);
end;
3:PlaySound('zla.wav',0,SND_ASYNC);
end;
LosujPytanie();
end;
procedure TForm2.Button4Click(Sender: TObject);
begin
Application.Terminate
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
case IIndexButtona of
1:begin
IPoprawne:=IPoprawne+1;
PlaySound('dobra.wav',0,SND_ASYNC);
end;
2:PlaySound('zla.wav',0,SND_ASYNC);
3:PlaySound('zla.wav',0,SND_ASYNC);
end;
end;
procedure TForm2.Button3Click(Sender: TObject);
begin
case IIndexButtona of
1:PlaySound('zla.wav',0,SND_ASYNC);
2:PlaySound('zla.wav',0,SND_ASYNC);
3:begin
IPoprawne:=IPoprawne+1;
PlaySound('dobra.wav',0,SND_ASYNC);
end;
end;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Application.Terminate;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
DodajPytania();
end;
procedure TForm2.FormShow(Sender: TObject);
begin
BGraRuszyla:=True;
LosujPytanie();
while (IPoprawne < 5) and (BGraRuszyla) do
begin
IStanKonta:=IStanKonta-1;
sleep(25);
end;
while (IPoprawne >= 5) and (BGraRuszyla) do
begin
Button4.Visible:=True;
LabelPytanie.Visible:=False;
Button1.Visible:=False;
Button2.Visible:=False;
Button3.Visible:=False;
end;
end;
end.
Jest to nic innego niż prosty quiz jako projekt zaliczeniowy i na pierwszy rzut oka wszystko wygląda w porządku do czasu sprawdzenia czy to faktycznie działa i odpowiedź jest prosta: nie.
Kompilator tak jak na początku napisałem czepia się 4 obiektów i tego że deklaruję do nich tekst z tablicy.
W czym może tkwić problem?