![]() |
Unerklärlicher Syntaxfehler
Hi, ich arbeite grade an einem Snake. Es steckt noch in den Kinderschuhen und eigentlich brauche ich auch keine Hilfe. Nur eine Sache macht mich stutzig. Lässt man im angefügten Code bei den uses die Windows.pas raus (welche ich allerdings für OnKeyDown Events brauche), wird das Programm einwandfrei kompiliert. Habe ich "Windows" allerdings in den uses stehen, führt dies zu einem Syntaxfehler (snake.pas(95,46) Fatal: Syntax error, ")" expected but "," found). Ändere ich den Fehler, so wie vorgeschlagen, gibt er in der nächsten Klammer welche Kommas enthält nach dem ersten Komma den selben fehler. Ich kann also davon ausgehen, das irgendwo im Code weiter oben ein Fehler ist. Und zwar zwischen dem auftretenden Fehler und der vorherigen Klammer mit Kommas drin. Doch ich finde einfach keine Lösung.
Das gesamte Problem scheint mir sehr suspekt, da alles einwandfrei funktioniert, bis ich "Windows" in die Uses setze (alle anderen uses die ich hinzufüge funktionieren).
Delphi-Quellcode:
unit Snake;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Windows; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); // procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { private declarations } public { public declarations } end; procedure Zeichnen(StartPoint_Rect: TPoint; Transparenz: Integer); var Form1: TForm1; Koerper: Array of TPoint; Richtung: Integer; const Groesse_Pixel: Integer = 5; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin Repeat Memo1.Clear; For i := 0 to Length(Koerper) -1 do // Schleife um alle Abschnitte zu zeichnen begin Zeichnen(Koerper[i],0); Memo1.Lines.Insert(i, InttoStr(i) + ' = ' + InttoStr(Koerper[i].X) + ',' + InttoStr(Koerper[i].Y)); end; Zeichnen(Koerper[Length(Koerper)-1],1); sleep(1000); For i:= High(Koerper) downto 0 do // Verschieben der abschnitte auf den Abschnitt näher des Kopfes begin If i = 0 Then // Kopfrichtung bestimmen begin If Richtung = 1 Then begin Koerper[0].Y := Koerper[0].Y + Groesse_Pixel; end else if Richtung = 2 Then begin Koerper[0].X := Koerper[0].X + Groesse_Pixel; end else if Richtung = 3 Then begin Koerper[0].Y := Koerper[0].Y - Groesse_Pixel; end else if Richtung = 4 Then begin Koerper[0].X := Koerper[0].X - Groesse_Pixel; end; Memo1.Lines.Insert(High(Koerper),InttoStr(Richtung)); end else Koerper[i] := Koerper[i-1]; end; Application.ProcessMessages; Until Koerper[0].X >= Form1.Width; end; {procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState ); begin if key = vk_up then Richtung := 1; if key = vk_right then Richtung := 2; if key = vk_down then Richtung := 3; if key = vk_left then Richtung := 4; end;} Procedure Zeichnen(StartPoint_Rect: TPoint; Transparenz: Integer); begin If Transparenz = 0 Then Form1.Canvas.Brush.Color := clblack else if Transparenz = 1 Then Form1.Canvas.Brush.Color := clbtnFace; Form1.Canvas.FillRect(Rect(StartPoint_Rect.X,StartPoint_Rect.Y, StartPoint_Rect.X + Groesse_Pixel,StartPoint_Rect.Y + Groesse_Pixel)); Form1.Canvas.Brush.Color := clblack; end; begin Setlength(Koerper,7); Koerper[0] := Point(30,100); Koerper[1] := Point(25,100); Koerper[2] := Point(20,100); Koerper[3] := Point(15,100); Koerper[4] := Point(10,100); Koerper[5] := Point(5,100); Koerper[6] := Point(0,100); end. |
AW: Unerklärlicher Syntaxfehler
Wo/Was ist die Zeile 95?
[edit] Schön daß man selber nachzählen darf. Vermutung: In der Unit Windows existiert auch ein Rect. Tipp: Entweder mit Namespace arbeiten, bzw.
Delphi-Quellcode:
, oder in welcher Unit das drinsteckt.
Types.Rect(...
Oder füge Windows einfach weiter vorne in die Usesklausel ein. PS: Warum ist Zeichnen keine Methode der Form? Tipp: Sobald du auf globale Variablen, wie Form1 zugreifen mußt, dann kannst du dir denken, daß da vermutlich irgendwo ein Fehler in deiner Planung vorliegt. |
AW: Unerklärlicher Syntaxfehler
Zu welcher Prozedur soll denn der Quelltext ganz unten gehören? :zwinker:
Delphi-Quellcode:
Der hängt da irgendwie lose herum.
begin
Setlength(Koerper,7); Koerper[0] := Point(30,100); Koerper[1] := Point(25,100); Koerper[2] := Point(20,100); Koerper[3] := Point(15,100); Koerper[4] := Point(10,100); Koerper[5] := Point(5,100); Koerper[6] := Point(0,100); end. |
AW: Unerklärlicher Syntaxfehler
@jaenicke: Befüllen einer bösen globalen Variable.
Läge Diese in der Form (z.B. Private), dann könnte man es nach OnCreate verschieben. :roll: |
AW: Unerklärlicher Syntaxfehler
Zitat:
|
AW: Unerklärlicher Syntaxfehler
Zitat:
|
AW: Unerklärlicher Syntaxfehler
Zitat:
Ich habe jetzt einfach Windows als erstes in die uses eingetragen. Damit scheint es zu funktionieren. Zitat:
|
AW: Unerklärlicher Syntaxfehler
Ach, wer tadelt hier denn?
@jaenicke: Pssst, versteck die Peitsche. :roll: Tipp: Glaub nicht alles, was die Leerer Lehrer sagen (die haben manchmal selber keine Ahnung). Und sieh es als gut gemeinte Tipps an. Denn Vieles hat einen gewissen Hintergrund. Globale Variablen, sorgen für die selben Probleme, wie du auch gerade einen hattest. z.B. erstell mal eine lokale Variable (oder was Anderes), mit dem selben Namen ... und wundere dich dann, warum du nicht mehr auf die globale Variable zugreifen kannst. Darum immer alles so nach wie möglich am Bestimmungsort deklarieren. Die Funktion und die Variablen werden ja wohl nur innerhalb der Form verwendet, also sollten sie dort auch rein. :zwinker: |
AW: Unerklärlicher Syntaxfehler
Zitat:
Delphi-Quellcode:
weiter nach vorne zu setzen ist eine Möglichkeit der Lösung (diese Unit definiert übrigens auch einen von der LCL abweichenden Typ
Windows
Delphi-Quellcode:
, was auch öfters der Ursprung eines ähnlichen Fehlers ist). Eine andere Möglichkeit ist es die Unit
TBitmap
Delphi-Quellcode:
an Stelle von
LCLType
Delphi-Quellcode:
zu verwenden, welche ebenfalls die VK_* Konstanten enthält und noch dazu auch auf nicht-Windows-Systemen verfügbar ist.
Windows
Gruß, Sven |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:00 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-2025 by Thomas Breitkreuz