Bład w kodzie Delphi - prosty program

2011-05-28 14:08

Rejestracja: 8 lat temu

Ostatnio: 4 miesiące temu

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

edytowany 1x, ostatnio: madmike, 2011-05-28 18:08

Pozostało 580 znaków

2011-05-28 14:14

Rejestracja: 10 lat temu

Ostatnio: 8 lat temu

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 odemnie.


Nie pisz do mnie PM o czymś co nie dotyczy bezpośrednio mnie. | Nie rozmawiaj ze mną jeśli brak Ci kultury (wystarczy że mi brakuje) | Nie jestem zły, jestem po prostu zły.
A, i naucz się formatować kod, jak ten ktoś od kogo wziełeś resztę kodu. - payl 2011-05-28 14:16

Pozostało 580 znaków

2011-05-28 14:15

Rejestracja: 14 lat temu

Ostatnio: 7 miesięcy temu

0

nav dał ci podpowiedź: http://4programmers.net/Forum/Kosz/107337-blad_wprojekcie-_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!


Pozostało 580 znaków

2011-05-28 14:22

Rejestracja: 8 lat temu

Ostatnio: 4 miesiące temu

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?

edytowany 3x, ostatnio: Oskarro, 2011-05-28 14:26
Następna linijka bez średnika! - jakie błędy wypisuje kompilator??? - madmike 2011-05-28 14:29

Pozostało 580 znaków

2011-05-28 14:25

Rejestracja: 14 lat temu

Ostatnio: 7 miesięcy temu

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


Pozostało 580 znaków

2011-05-28 14:28

Rejestracja: 8 lat temu

Ostatnio: 4 miesiące temu

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

edytowany 1x, ostatnio: Oskarro, 2011-05-28 14:29

Pozostało 580 znaków

2011-05-28 14:40
Moderator

Rejestracja: 12 lat temu

Ostatnio: 3 godziny temu

Lokalizacja: Wrocław

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]

edytowany 3x, ostatnio: Patryk27, 2011-05-28 14:43

Pozostało 580 znaków

2011-05-28 14:43

Rejestracja: 8 lat temu

Ostatnio: 4 miesiące temu

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ść

edytowany 1x, ostatnio: Oskarro, 2011-05-28 14:46

Pozostało 580 znaków

2011-05-28 14:46

Rejestracja: 9 lat temu

Ostatnio: 5 lat temu

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);

Pozostało 580 znaków

2011-05-28 14:49

Rejestracja: 8 lat temu

Ostatnio: 4 miesiące temu

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);

nie dociera do ciebie że chcemy komunikat błędu? - payl 2011-05-28 14:59
nie dociera... będzie tak zapewne linijka po linijce leciał... @Oskarro - kompilator zawsze wypisuje błedy komplilacji (co mu się nie podoba) - więc co tym razem pisze? - madmike 2011-05-28 15:06

Pozostało 580 znaków

2011-05-28 15:03

Rejestracja: 8 lat temu

Ostatnio: 4 miesiące temu

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;
edytowany 1x, ostatnio: Oskarro, 2011-05-28 15:04

Pozostało 580 znaków

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