![]() |
Fehlermeldung bei begin und then
Hab mal noch ne Frage heute:
Ich bekomme hier ne ganze Reihe an Fehlermeldungen rein [Fehler] Unit3.pas(49): E2029 Ausdruck erwartet, aber 'BEGIN' gefunden [Warnung] Unit3.pas(50): W1019 FOR-Schleifenvariable muss eine einfache lokale Variable sein [Fehler] Unit3.pas(57): E2029 ':=' erwartet, aber '=' gefunden [Fehler] Unit3.pas(62): E2029 'END' erwartet, aber 'THEN' gefunden [Warnung] Unit3.pas(170): W1019 FOR-Schleifenvariable muss eine einfache lokale Variable sein [Warnung] Unit3.pas(172): W1019 FOR-Schleifenvariable muss eine einfache lokale Variable sein [Fataler Fehler] VierGewinnt.dpr(5): F2063 Verwendete Unit 'Unit3.pas' kann nicht compiliert werden sehe aber nciht was ich falsch gemacht habe:
Delphi-Quellcode:
procedure Kontrolle(const Target: TStringgrid);
var a, b :integer; begin y:=-1; if begin //<-- das unterstreicht er rot For x := 1 to 6 do begin For a := 1 to 4 do begin For b := 1 to 4 do begin y:=a+b; Target.cells[x,y]=IntToStr(Spieler); end; end; end; end then //<-- und das showmessage('Spieler' +IntToStr(Spieler) +'hat gewonnen!')); end; könnte bitte nochmal wer sein Wissen mit mir teilen??? |
Re: Fehlermeldung bei begin und then
Delphi-Quellcode:
procedure Kontrolle(const Target: TStringgrid);
var a, b :integer; begin y:=-1; if // hier fehlt die Bedingung// begin //
Delphi-Quellcode:
procedure ...
begin if a = b then begin // Ja, a = b end else begin //nein, a ist ungleich b end; end; |
Re: Fehlermeldung bei begin und then
Schleifen in einer If-Abfrage? Was soll das denn werden?
|
Re: Fehlermeldung bei begin und then
Delphi-Quellcode:
das gekennzeichnete ist die bedingung bei mir
begin //<-- das unterstreicht er rot
For x := 1 to 6 do begin For a := 1 to 4 do begin For b := 1 to 4 do begin y:=a+b; Target.cells[x,y]=IntToStr(Spieler);//<-- wenn das bei jedem Schleifendurchlauf wahr ist soll er weiter machen(Bedingung) end; end; end; end |
Re: Fehlermeldung bei begin und then
falls das mit der Schleife im if nicht geht
könnte ich dann nen Unterprogaufruf im If machen praktisch alles ins UP packen und dann das da aufrufen??? |
Re: Fehlermeldung bei begin und then
Ja, das nennt sich "Funktion mit Rückgabewert Boolean" ;)
Oder du definierst vorher ne extra Boolean-Variable, machst deine Schleifen und prüfst dann diese Variable ;) |
Re: Fehlermeldung bei begin und then
Machs halt so:
Delphi-Quellcode:
[Edit]
procedure Kontrolle(const Target: TStringgrid);
var a, b :integer; gefunden: Boolean; begin y:=-1; gefunden := false; begin For x := 1 to 6 do begin For a := 1 to 4 do begin For b := 1 to 4 do begin y:=a+b; gefunden := Target.cells[x,y] = IntToStr(Spieler); If gefunden then break; end; If gefunden then break; end; If gefunden then break; end; end If not gefunden then showmessage('Spieler' +IntToStr(Spieler) +'hat gewonnen!')); end; aus dem Stregreif geschrieben, kann leicht fehlerhaft sein.... |
Re: Fehlermeldung bei begin und then
thx helmi und auch allen anderen danke
Delphi-Quellcode:
das scheint jetzt erstmal zu funzen aber jetzt bekomme ich immer ne Fehlermeldung
procedure Kontrolle(const Target: TStringgrid);
var a, b, r, richtig :integer; gefunden :boolean; begin y:=-1; begin For r := 1 to 6 do begin For a := 1 to 4 do begin richtig:=0; For b := 1 to 4 do begin y:=a+b; gefunden:=Target.cells[r,y]=IntToStr(Spieler); if gefunden=true then richtig:=richtig+1 end; if richtig=4 then break; end; if richtig=4 then break; end; if richtig=4 then break; end; if richtig=4 then showmessage('Spieler' +IntToStr(Spieler) +'hat gewonnen!'); end; "Zugriffsverletzung bei Addresse 07FF0652 in Modul 'dcc90.dll'. Lesen von Adresse 00000000." (8mal 0) was heißt das jetzt????? |
Re: Fehlermeldung bei begin und then
Du hast kein Stringgrig übergeben, sondern nil.
Lass das Target weg und schreib einfach Form1.Stringgrid1... ;) |
Re: Fehlermeldung bei begin und then
Auch wenn es nichts mit deiner Fehlermeldung zu tun hat,
aber ändere:
Delphi-Quellcode:
in
If gefunden=true then
Delphi-Quellcode:
das ist sauberer.
If gefunden then
Es gab darüber auch schon einige Threads.... |
Re: Fehlermeldung bei begin und then
@helmi hab ich geändert danke für den tipp
@jfhans aber ich hab ne frage kannst du mir kurz GANZ GENAU sagen was ich in procedure zeile ändern muss (hab mir das heute erst erfragt mit dem unterprogramm auf formular beziehen(das mit dem target)) plz :roteyes: |
Re: Fehlermeldung bei begin und then
Zeig doch mal den Aufruf der Prozedur. Außerdem musst Du noch nicht einmal nil übergeben, sondern es genügt, wenn Du Dich mit dem Zeilen-/Spaltenindex vertan hast.
|
Re: Fehlermeldung bei begin und then
Hallo Foerster.
Du hast jetzt eine freie Prozedur, aus dieser kannst du nicht direkt auf Controls des Forms zugreifen. Mache daraus eine Methode, dann brauchst du den Parameter gar nicht mehr, weil du das Grid direkt ansprechen kannst. |
Re: Fehlermeldung bei begin und then
Zitat:
|
Re: Fehlermeldung bei begin und then
so also mein stringgrid hat 7 Spalten(6 die ich benutze) und 8 Zeilen (7 die ich benutze)
das is der ganze quelltext (soll mal nen 4 Gewinnt werden(muss danach nur noch die Abfrage für spalten und diagonalen machen (nichts vorsagen was die beiden abfragen angeht das will ich alleine austüfteln 8) )))
Delphi-Quellcode:
unit Unit3;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm3 = class(TForm) StringGrid1: TStringGrid; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Label1: TLabel; Button8: TButton; Button9: TButton; procedure Button8Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button9Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form3: TForm3; Spieler, y, x :integer; implementation {$R *.dfm} procedure Kontrolle(const Target: TStringgrid); var a, b, r, richtig :integer; gefunden :boolean; begin y:=-1; begin For r := 1 to 6 do begin For a := 1 to 4 do begin richtig:=0; For b := 1 to 4 do begin y:=a+b; gefunden:=Target.cells[r,y]=IntToStr(Spieler); if gefunden then richtig:=richtig+1 end; if richtig=4 then break; end; if richtig=4 then break; end; if richtig=4 then break; end; if richtig=4 then showmessage('Spieler' +IntToStr(Spieler) +'hat gewonnen!'); end; procedure Spielstein(const Target: TStringgrid); begin If Spieler=2 then Spieler:=0; Spieler:=Spieler+1; If (Target.cells[y,1] ='1') or (Target.Cells[y,1] ='2') then showmessage('Hier passt kein Spielstein mehr rein wählen sie eine andere Reihe!') else begin If (target.cells[y,2] ='1') or (target.Cells[y,2] ='2') then target.cells[y,1]:=IntToStr(Spieler) else begin If (target.cells[y,3] ='1') or (target.Cells[y,3] ='2') then target.cells[y,2]:=IntToStr(Spieler) else begin If (target.cells[y,4] ='1') or (target.Cells[y,4] ='2') then target.cells[y,3]:=IntToStr(Spieler) else begin If (target.cells[y,5] ='1') or (target.Cells[y,5] ='2') then target.cells[y,4]:=IntToStr(Spieler) else begin If (target.cells[y,6] ='1') or (target.Cells[y,6] ='2') then target.cells[y,5]:=IntToStr(Spieler) else target.cells[y,6]:=IntToStr(Spieler) end; end; end; end; end; end; procedure TForm3.Button1Click(Sender: TObject); begin y:=1; Spielstein(Stringgrid1); Kontrolle(Stringgrid1) end; procedure TForm3.Button2Click(Sender: TObject); begin y:=2; Spielstein(Stringgrid1); Kontrolle(Stringgrid1) end; procedure TForm3.Button3Click(Sender: TObject); begin y:=3; Spielstein(Stringgrid1); Kontrolle(Stringgrid1) end; procedure TForm3.Button4Click(Sender: TObject); begin y:=4; Spielstein(Stringgrid1); Kontrolle(Stringgrid1) end; procedure TForm3.Button5Click(Sender: TObject); begin y:=5; Spielstein(Stringgrid1); Kontrolle(Stringgrid1) end; procedure TForm3.Button6Click(Sender: TObject); begin y:=6; Spielstein(Stringgrid1); Kontrolle(Stringgrid1) end; procedure TForm3.Button7Click(Sender: TObject); begin y:=7; Spielstein(Stringgrid1); Kontrolle(Stringgrid1) end; procedure TForm3.Button8Click(Sender: TObject); begin For y:= 1 to 7 do begin For x:= 1 to 6 do begin Stringgrid1.Cells[y,x]:=''; end; end; end; procedure TForm3.Button9Click(Sender: TObject); begin close; end; end. |
Re: Fehlermeldung bei begin und then
Zitat:
|
Re: Fehlermeldung bei begin und then
ich lese nciht über die zeilen hinaus :gruebel:
mit dem ersten kontrolliere ich die spalten mit dem zweien such ich mir jeweils eine spalte aus und mit dem letzten kontrolliere ich die diese und die 3 folgenden auf true wo gehe ich da über die zeilen hinaus???????????????? 1-7 nutze ich und die 0.Zeile lass ich weg |
Re: Fehlermeldung bei begin und then
Zitat:
|
Re: Fehlermeldung bei begin und then
Bei 8 Zeilen hat die erste Index 0 und die letzte Index 7. Jeder Zugriff auf Cells[x,8] führt ins Nirvana.
|
Re: Fehlermeldung bei begin und then
ja richtig
und wann bitte greif ich auf die 8. zu??? |
Re: Fehlermeldung bei begin und then
Zitat:
|
Re: Fehlermeldung bei begin und then
y:=-1
|
Re: Fehlermeldung bei begin und then
Und was soll uns das nun sagen?
Fakt ist, was Detlef gesagt hat. :gruebel: |
Re: Fehlermeldung bei begin und then
da ich anfangs y auf -1 setze siehe seite 1
is dann y erst 7 d.h. ich greife auf die 7. Zeile zu |
Re: Fehlermeldung bei begin und then
Du kannst auch 1000 mal y auf -1 setzen, sobald Du a und b addierst, ist y wieder 8.
|
Re: Fehlermeldung bei begin und then
:roll:
Wenn aber in der Schleife a = 4 und b = 4 ist, ist y = 8, da beißt die Maus kein Faden ab. |
Re: Fehlermeldung bei begin und then
aso stimmt mein Fehler :wall: :wall: :wall: :wall: :wall: :wall:
hab da irgendwie garnicht nachgedacht naja das weg und einfach y:=a+b-1; jetzt kann ichs starten aber er ignort dsa up........... naja mal gucken was sich machen lässt thx dann nochma |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz