Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehler: Constant expression expected (https://www.delphipraxis.net/53299-fehler-constant-expression-expected.html)

fuisch 13. Sep 2005 20:10


Fehler: Constant expression expected
 
Wenn ich meinen Code so schreibe bekomme ich in der markierten Zeile die Fehlermeldung "Constant expression expected":
Delphi-Quellcode:
procedure TStein.zeichne();
begin
  case Typ of
    0:
      Spielfeld.farbefestlegen(x,y,Farbe);
      Spielfeld.farbefestlegen(x+1,y,Farbe); // hier ist der fehler
      Spielfeld.farbefestlegen(x,y+1,Farbe);
      Spielfeld.farbefestlegen(x+1,y+1,Farbe);
Schreibe ich dagegen
Delphi-Quellcode:
      //...
      with form1 do begin
        Spielfeld.farbefestlegen(x,y,Farbe);
        Spielfeld.farbefestlegen(x+1,y,Farbe);
        Spielfeld.farbefestlegen(x,y+1,Farbe);
        Spielfeld.farbefestlegen(x+1,y+1,Farbe);
      end;
funktioniert alles. Dabei ist es egal ob ich form1 schreibe oder irgendwas andres...

Spielfeld.farbefestlegen schaut so aus:
Delphi-Quellcode:
procedure TSpielfeld.farbefestlegen(x,y:byte;farbe:TColor);
begin
  with form1.Image1.Canvas do begin
    brush.Style:=bssolid;
    brush.color:=farbe;
    Rectangle(x*30,y*30,x*30+30,y*30+30);
  end;
end;

faux 13. Sep 2005 20:14

Re: Fehler: Constant expression expected
 
Zitat:

Zitat von fuisch
Delphi-Quellcode:
procedure TStein.zeichne();
begin
  case Typ of
    0:
      Spielfeld.farbefestlegen(x,y,Farbe);
      Spielfeld.farbefestlegen(x+1,y,Farbe); // hier ist der fehler
      Spielfeld.farbefestlegen(x,y+1,Farbe);
      Spielfeld.farbefestlegen(x+1,y+1,Farbe);

Ich denke, du hast das begin vergessen... ;)

Khabarakh 13. Sep 2005 20:17

Re: Fehler: Constant expression expected
 
Anmerkung: Dein Klassenkonzept solltest du nochmal überdenken. Wenn du aus einer Klasse auf deine Form zugreifst, ist die Wiederverwendbarkeit kleiner/gleich 0 :wink: .

fuisch 13. Sep 2005 20:29

Re: Fehler: Constant expression expected
 
Ist mein erstes Programm das ich überhaupt objektorientiert schreibe... :???:

Ach du Schande wenn man eine mehrzeilige Anweißung hat braucht man da auch begin. Warum erklären Informatikbücher und die Delphi-Online-Hilfe case of nur mit einzeiligen Anweißungen. :wall:

Dankeschön!

faux 13. Sep 2005 20:34

Re: Fehler: Constant expression expected
 
Khabarakh meinte glaube ich, dass du die Klasse nicht als Unterklasse von TForm1, sondern als eigenständige Klasse machen sollst. (Im Quellcode einfach in der Implementation über die zeile mit "class TForm1 = (TForm)" (oä.) setzen....

Grüße
Faux

fuisch 13. Sep 2005 20:41

Re: Fehler: Constant expression expected
 
und...was macht das für einen Unterschied?

Luckie 13. Sep 2005 20:53

Re: Fehler: Constant expression expected
 
Zitat:

Zitat von fuisch
und die Delphi-Online-Hilfe case of nur mit einzeiligen Anweißungen. :wall:

Weil sie das Block-Konzept bei for udn if schon zu genüge erklärt haben. ;)

faux 13. Sep 2005 20:56

Re: Fehler: Constant expression expected
 
Wobei ganz unrecht hat er nicht. In C#, PHP, etc. braucht man bei switch auch kein begin und end (bzw { und }), sondern der code wird bis zum break ausgeführt. Insofern is es verwirrend, wenn man zB von C++ her kommt und Delphi mit dem Buch von fuisch lernen will. ;)

fuisch 17. Sep 2005 20:46

Re: Fehler: Constant expression expected
 
Zitat:

Zitat von Khabarakh
Anmerkung: Dein Klassenkonzept solltest du nochmal überdenken. Wenn du aus einer Klasse auf deine Form zugreifst, ist die Wiederverwendbarkeit kleiner/gleich 0 :wink: .

War das nun so gemeint dass ich das Spielfeld von TImage ableiten sollte?

Khabarakh 17. Sep 2005 21:13

Re: Fehler: Constant expression expected
 
Delphi-Quellcode:
with form1 do begin
   Spielfeld.farbefestlegen(x,y,Farbe);
Hier greifst du aus einer Klasse auf die globale Formvariable zu. Damit geht die ganze Selbstständigkeit und Wiederverwendbarkeit der Klasse flöten. Stattdessen könntest du die Zeichenfläche z.B. per Parameter übergeben:
Delphi-Quellcode:
procedure TStein.zeichne(Dest: TCanvas);


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:49 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