Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Inputbox und For-Schleife -> Fehler?! (https://www.delphipraxis.net/25725-inputbox-und-schleife-fehler.html)

ISAS 11. Jul 2004 11:19


Inputbox und For-Schleife -> Fehler?!
 
Wie gesagt bereitet mir eine Inputbox in einer For-Schleife einen Fehler.

Wenn ich einfach ein Programm erstellen würde, was, wenn ich auf einen Button klicke folgende procedure macht:

Delphi-Quellcode:
for i:=0 to 3 do begin
   eingabe:=inputbox('','','');
end;
dann funktioniert das ja, aber in meinem Falle nicht, da das ganze Programm ein bisschen komplexer ist.

Delphi-Quellcode:
for i:=0 to 3 do begin
 if Gegenstand[i].hand=true then begin
  eingabe:=inputbox('','','');
 end;
end;
Bei folgendem Code hängt sich das Programm auf und makiert die Zeile if Gegenstand[k]... blau. Aber wieso?? Würde diese if-Bedingung nicht hier stehen, würde alles funktionieren.

Weiss nicht, ob das von bedeutung ist, aber Gegenstand ist folgendes:

Delphi-Quellcode:
 TGegenstand = class(TImageSprite)
  public
 constructor Create(AParent: TSprite ); override;
 end;

var Gegenstand:=array[0..3] of TGegenstand

kiar 11. Jul 2004 11:31

Re: Inputbox und For-Schleife -> Fehler?!
 
hallo,

lass mal in der folgenden zeile das = weg
Delphi-Quellcode:
var Gegenstand:=array[0..3] of TGegenstand
raik

mytar 11. Jul 2004 11:34

Re: Inputbox und For-Schleife -> Fehler?!
 
Statt

Code:
if Gegenstand[i].hand=true then begin
kannst du

Code:
if Gegenstand[i].hand then begin
schreiben


Ist die Methode Hand in TImageSprite, oder selbst definiert?

Has du den Konstruktor aufgerufen?

mytar

Sharky 11. Jul 2004 11:34

Re: Inputbox und For-Schleife -> Fehler?!
 
Hai ISAS,

wie und wo ist denn Hand deklariert?
BTW: Du solltest es auf jeden fall vermeiden eine Variable vom Typ BOOLEN mit = True zu prüfen.

Schlecht:
Delphi-Quellcode:
var
  blubb : Boolean;
begin
  blubb := True;
  if (blubb = True) then
  begin
  end;
end;
Gut:
Delphi-Quellcode:
var
  blubb : Boolean;
begin
  blubb := True;
  if (blubb) then
  begin
  end;
end;
[Edit] Und der Hinweiss von Kiar ist natürlich auch richtig (schnell mal die Brille putzt)

kiar 11. Jul 2004 11:38

Re: Inputbox und For-Schleife -> Fehler?!
 
hallo hai, es ist aber auch noch früh :mrgreen:

ISAS 11. Jul 2004 11:48

Re: Inputbox und For-Schleife -> Fehler?!
 
Bei dem Gegenstand:Array[0..3] of Tgegenstand hab ich mich nur hier verschrieben.

Das Hand ist bei TGegenstand drinnen. Deswegen heissts ja Gegenstand[i].hand. Und wenn ich bei der If-Bedinngung das so schreibe, wie ihr gesagt habt, ändert sich leider nichts. Der Fehler wird noch immer angezeigt.

Ich erläutere mal mehr:

Das ist eine selbstgeschriebene procedure:

Delphi-Quellcode:
procedure TSpiel;
begin

end;
Sie wird bei OnMouseUp aufgerufen. Das wäre alles, was man noch dazu sagen kann

mytar 11. Jul 2004 11:50

Re: Inputbox und For-Schleife -> Fehler?!
 
Hast du die Klasse für jedes Arrayselement instanziert (Construktor aufgerufen) ?

ISAS 11. Jul 2004 11:52

Re: Inputbox und For-Schleife -> Fehler?!
 
Ja, das hab ich

mytar 11. Jul 2004 11:56

Re: Inputbox und For-Schleife -> Fehler?!
 
Ich denke wir kommen hier schwer weiter, vielleicht wärst du so nett

und postest die Klassendeklaration, den Konstruktor und die Hand - Methode

dann schaun wir weiter

mytar

ISAS 11. Jul 2004 12:02

Re: Inputbox und For-Schleife -> Fehler?!
 
Delphi-Quellcode:
 TGegenstand = class(TImageSprite)
  public
  hand:boolean;
 constructor Create(AParent: TSprite ); override;
 end;

gegenstand:array [0..3] of tgegenstand;

constructor tgegenstand.Create(AParent: TSprite );
begin
  inherited Create(AParent);
  Image:=Form1.DXImageList1.Items[1];
  Width :=Image.Width;
  Height :=Image. Height;
  X:=32;
  Y:=32;
  z:=1;
end;

  if typ=5 then begin
   with TGegenstand.Create(DXSpriteEngine1.Engine) do
    begin
     Gegenstand[e]:=TGegenstand.Create(DXSpriteEngine1.Engine);
     Gegenstand[e].Image:=Form1.DXImageList1.Items[10];
     Gegenstand[e].x:=strtoint(s)*32;
     Gegenstand[e].y:=strtoint(t)*32;
     e:=e+1;
    end;
   end;    (Ist unwichtig. Das is nur das laden des Levels bei OnCreate)

procedure TForm1.PSpiel;
begin
 for k:=0 to e do begin
  if (Gegenstand[k].hand) then begin
   eingabe:=inputbox('nm','l','klj');
  end;
 end;
end;

Sonst noch etwas?? Das wäre eigentlich schon fast alles.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 Uhr.
Seite 1 von 2  1 2      

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