Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi index wird ohne aufruf auf 0 gesetzt (https://www.delphipraxis.net/46224-index-wird-ohne-aufruf-auf-0-gesetzt.html)

Nicodius 20. Mai 2005 19:08


index wird ohne aufruf auf 0 gesetzt
 
ich habe hier eine Methoe schauenundhinzufuegen()

bevor ich in die schleife " For i := 0 to index-1 do" komme ... ist der idnex schon auf 0 ... obwohl er vorher fuenf oder hoeher war - es kann nur in diesem codesegment passiert sein :




bitte kann mir wer helfen den Fehler zu finden? (ich habe schon durchgestept)

Delphi-Quellcode:
procedure SchauenUnsHinzufuegen();
var i : Integer;
    theimg : TImage;
begin
for i := 0 to Length(SelList) do
  SelList[i] := nil;
theimg := TImage.Create(Form1);
  For i := 0 to index-1 do
  begin

  theimg := TImage(Form1.FindComponent('Soldier_' + IntToStr(i)));
    if (theimg.Left >= Auswahlrec.Left) then
    if (theimg.left + theimg.width > Auswahlrec.Right) then
    if (theimg.top >= Auswahlrec.Top)
    then
    if (theimg.Top + theimg.Width > Auswahlrec.Bottom)
      then
      begin
        selList[i] := theimg;
        theimg.Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+ '\Bilder\standSel.bmp');
      end;
    //Form1.caption := Form1.caption + ' + Soldier' + IntToStr(i);
  end;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  z := false;
  Form1.Canvas.Refresh;
  Form1.Canvas.Draw(0,0,zurueck);
  Auswahlrec := Rect(Min(X,X), Min(Y,Y), Max(XX,XX), Max(YY, YY));
  SchauenUnsHinzufuegen();
  Form1.Repaint;
end;
danke

Mooreel

Phistev 20. Mai 2005 19:46

Re: index wird ohne aufruf auf 0 gesetzt
 
Wo ist index deklariert?

Nicodius 20. Mai 2005 20:08

Re: index wird ohne aufruf auf 0 gesetzt
 
globale variable, wirt mit 0 initialisiert - on bei jedem Onmousedown um 1 erhöht

dizzy 20. Mai 2005 20:12

Re: index wird ohne aufruf auf 0 gesetzt
 
Delphi-Quellcode:
for i := 0 to Length(SelList) do
  SelList[i] := nil;

// Hiernach ist i undefiniert - wie immer bei Schleifenvariablen nach einer Schleife.
// Würdest du nachher etwas wie
  variable := i;
// scheiben, mekert der Compiler auch genau das an ;)

theimg := TImage.Create(Form1);
  For i := 0 to index-1 do
  begin

Schönen Gruss,
Fabian

Nicodius 20. Mai 2005 20:16

Re: index wird ohne aufruf auf 0 gesetzt
 
index <> i ;)


Delphi-Quellcode:
  index, index2 : Integer;

DGL-luke 20. Mai 2005 20:17

Re: index wird ohne aufruf auf 0 gesetzt
 
:gruebel:

aber i hat doch mit index nix zu tun?

Nicodius 20. Mai 2005 20:33

Re: index wird ohne aufruf auf 0 gesetzt
 
ja sag ich doch ?


index kommt nur 2 mal vor und zwar beim initialisieren und beim raufzählen .. wies auf 0 gesetzt wird kann ich nicht nachvollziehen.

dizzy 20. Mai 2005 20:37

Re: index wird ohne aufruf auf 0 gesetzt
 
:wall: Wenn man nicht gaaanz genau liest... sorry.

Ich vermute mal du hast irgendwo ein Array, und die Bereichsprüfung aus, und jagst irgendwo über die Arraygrenze hinweg, und erwischt zufällig "index". Ist vor der Deklaration von "index" evtl. sogar ein Array deklariert? Dann wäre es nämlich sehr sehr wahrscheinlich {edit: anderenfalls aber auch nicht unwahrscheinlich}.
Bereichsüberschreitungen sind immer wieder gerne für solche Effekte gut :)

Phistev 20. Mai 2005 20:40

Re: index wird ohne aufruf auf 0 gesetzt
 
Sind evtl. noch andere Variablen / Properties mit dem gleichen Namen irgendwo deklariert? Ich vermute, dass hier auf einen andere Variable als gedacht zugegriffen wird.

Hansa 20. Mai 2005 20:41

Re: index wird ohne aufruf auf 0 gesetzt
 
Zitat:

Zitat von Nicodius
globale variable, wirt mit 0 initialisiert - on bei jedem Onmousedown um 1 erhöht

Hier war doch ein Thread, warum "globale Variablen verteufelt werden". Genau wegen so was !! Wetten, daß in deinem OnDraw etc. irgendwo der Wert geändert wird ? Deshalb ist die Stelle, an der initialisiert wird äußerst wichtig. Und da wirst du wohl die falsche erwischt haben. 8)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 Uhr.
Seite 1 von 2  1 2      

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