AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unerklärlicher Syntaxfehler

Ein Thema von Basetyp · begonnen am 18. Apr 2012 · letzter Beitrag vom 19. Apr 2012
Antwort Antwort
Basetyp

Registriert seit: 18. Apr 2012
12 Beiträge
 
#1

Unerklärlicher Syntaxfehler

  Alt 18. Apr 2012, 18:00
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#2

AW: Unerklärlicher Syntaxfehler

  Alt 18. Apr 2012, 18:04
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. Types.Rect(... , oder in welcher Unit das drinsteckt.
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (18. Apr 2012 um 18:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.332 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Unerklärlicher Syntaxfehler

  Alt 18. Apr 2012, 18:06
Zu welcher Prozedur soll denn der Quelltext ganz unten gehören?
Delphi-Quellcode:
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.
Der hängt da irgendwie lose herum.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#4

AW: Unerklärlicher Syntaxfehler

  Alt 18. Apr 2012, 18:15
@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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Unerklärlicher Syntaxfehler

  Alt 18. Apr 2012, 18:17
Zu welcher Prozedur soll denn der Quelltext ganz unten gehören? ... Der hängt da irgendwie lose herum.
Wenn der da lose rumhängt, wird der als Initialization-Teil behandelt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#6

AW: Unerklärlicher Syntaxfehler

  Alt 18. Apr 2012, 18:18
Wenn der da lose rumhängt, wird der als Initialization-Teil behandelt.
Auch gut zu Erkennen am end.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Basetyp

Registriert seit: 18. Apr 2012
12 Beiträge
 
#7

AW: Unerklärlicher Syntaxfehler

  Alt 18. Apr 2012, 18:19
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. Types.Rect(... , oder in welcher Unit das drinsteckt.
Oder füge Windows einfach weiter vorne in die Usesklausel ein.

PS: Warum ist Zeichnen keine Methode der Form?
Sry, hatte nich dran gedacht, dass die zeilen nich nummeriert sind.
Ich habe jetzt einfach Windows als erstes in die uses eingetragen. Damit scheint es zu funktionieren.

Zu welcher Prozedur soll denn der Quelltext ganz unten gehören?
Delphi-Quellcode:
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.
Der hängt da irgendwie lose herum.
Das Stück Code soll einmal zum Start des Programms ausgeführt werden. Tadelt mich doch nicht so, ich bin noch relavtiv neu und habe erst seit einem Jahr Informatik in der Schule.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#8

AW: Unerklärlicher Syntaxfehler

  Alt 18. Apr 2012, 18:24
Ach, wer tadelt hier denn?

@jaenicke: Pssst, versteck die Peitsche.


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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (18. Apr 2012 um 18:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Unerklärlicher Syntaxfehler

  Alt 19. Apr 2012, 09:52
Ich habe jetzt einfach Windows als erstes in die uses eingetragen. Damit scheint es zu funktionieren.
Die Unit Windows weiter nach vorne zu setzen ist eine Möglichkeit der Lösung (diese Unit definiert übrigens auch einen von der LCL abweichenden Typ TBitmap , was auch öfters der Ursprung eines ähnlichen Fehlers ist). Eine andere Möglichkeit ist es die Unit LCLType an Stelle von Windows zu verwenden, welche ebenfalls die VK_* Konstanten enthält und noch dazu auch auf nicht-Windows-Systemen verfügbar ist.

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons

Geändert von JamesTKirk (19. Apr 2012 um 09:52 Uhr) Grund: Intention klarer gefasst
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz