Hilfe bei Delphi

halopole

Lt. Commander
Registriert
Dez. 2007
Beiträge
1.065
Hallo. Jetzt mal ne ganz dumme frage. wie füge ich zahlen in ein memofeld ein.
ich dacht eig immer das geht mit memo1.lines.add(inttostr(hier die varieble))
aber iwie will das nid funzen.

Und ich bräucht mal verdammt schnell ne antwort

der meint halt immer undeclared identifier memo1

hier noch die prozedur (noch nich ganz fertig) :


procedure kaefer_krabbele(p,k :TZeiger);
var h:integer;
begin

h:=1;
Zahl:=random(3)+1;
case Zahl of 1: k:= p^.Zeiger1^.Zeiger;
2: k:= p^.Zeiger2^.Zeiger;
3: k:= p^.Zeiger3^.Zeiger;
4: k:= p^.Zeiger4^.Zeiger;
if k^.Zeiger<>nil then
begin
if k^.Inhalt='z' then
h:=h+1
else
begin Zahl:=random(3)+1;
case Zahl of 1: k:= p^.Zeiger1;
2: k:= p^.Zeiger2;
3: k:= p^.Zeiger3;
4: k:= p^.Zeiger4;
if k^.Zeiger<>nil then
begin if k^.Inhalt='z' then
begin h:=h+1
end;
end;
end;
end;
Memo1.lines.add(inttostr(h));

end;
 
Zuletzt bearbeitet von einem Moderator: (Vierfachpost zusammengeführt, bitte "Ändern" - Button nutzen.)
Ganz klarer Fall von Nichtbeachten des Sichtbarkeitsbereiches.

memo1 ist in Deiner Prozedur nicht sichtbar, da sie dort nicht deklariert wurde (Oh Wunder: "undeclared identifier memo1")

Na und? Sie ist doch auf der Form...

Ja richtig, aber nicht in einer TForm1...Funktion sondern außerhalb des Sichtbarkeitsbereichs von TForm1.

Also entweder ein "Form1." vor jedem referenzierten Zugriff auf memo1, oder die Prozedur in den Sichtbarkeitsbereich der TForm1 holen.
 
ehm ja und wie ist es jetzt korrekt?

und ich hab jez noch en fehler: siehe bild
 

Anhänge

  • hilfe.jpg
    hilfe.jpg
    222,5 KB · Aufrufe: 183
Zuletzt bearbeitet von einem Moderator: (Doppelpost zusammengeführt, bitte "Ändern" - Button nutzen.)
Ganz toll - ein "case ... of" ohne end; (Zeile 103) - stattdessen mit einer Bedingung außerhalb einer Anweisung.

Mit grundlegenden Englischkentnissen und einem Fünkchen Logik verrät uns "Constant expression expected", dass es einen konstanten Ausdruck erwartet.

Jetzt schau Dir das case ... of mal an:

Code:
case Zahl of 1: k:= p^.Zeiger1;
2: k:= p^.Zeiger2;
3: k:= p^.Zeiger3;
4: k:= p^.Zeiger4;

Was sind 1,2,3,4? Richtig - Zahlen. Und was noch!? Konstante Ausdrücke!

Als Programmierer erkennt man folgendes Muster: in einem "case ... of" stehen ein oder mehrere Zeilen folgenden Schemas:

<konstanter Ausdruck> <Doppelpunkt> <Anweisung(-sblock)> <Semikolon>

Beispiel:
konstanter Ausdruck: "2"
Doppelpunkt: ":"
Anweisung(-sblock): einstellige Anweisung, daher kein "begin ... end;" benötigt "k:=p^.Zeiger2"
Semikolon: ";"

Nachdem der Compiler das "case Zahl of" 1 bis 4 korrekt durchlaufen hat, erwartet er nun wiederum einen konstanten Ausdruck oder ein end;

Aber was ist "if k^. ..." ??? Kein konstanter Ausdruck, sondern eine Bedingung für sich!!!

Ein case ... of ist nämlich auch nichts weiter als mehrere "if ... then ... else if ... then ... else if ..." hintereinander.

Hier steht also etwas wie ein "if zahl=if k^. ..."

Also simpel ausgedrückt fehlt hier ein "end;" Da die Bedingung nichts mit "case Zahl of" zu tun hat.


Tipp: Als nächstes würde ich mal alle end, auf die keine else folgen mit einem Semikolon versehen (sonst erwartet Pascal nämlich ein else).


Und wie das nun mit dem Memo1 geht:

Tja und wenn Du meinen Post richtig gelesen hättest:

XunnD schrieb:
Also entweder ein "Form1." vor jedem referenzierten Zugriff auf memo1, oder die Prozedur in den Sichtbarkeitsbereich der TForm1 holen.

...wüsstest Du, dass Du vor Dein Memo1.Lines.Add(blablabla) ein "Form1." (ohne ") einfügen sollst. Weil Memo1 ein Member von Form1 ist (siehe Kopf der Datei) und nach außen ohne den Zugriff über Form1 nicht sichtbar ist!
 
Zurück
Oben