Delphi-PRAXiS

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)

Christian Seehase 20. Mai 2005 20:42

Re: index wird ohne aufruf auf 0 gesetzt
 
Moin Nicodius,

benenne die Variable mal um (z.B. iIndex).
Index ist ja auch eine Eigenschaft von Objekten.

Wo ist index deklariert?
In einer Unit eines Formulares, dass immer neu erzeugt wird?

Lannes 20. Mai 2005 20:46

Re: index wird ohne aufruf auf 0 gesetzt
 
Hallo,
zur weiteren Erläuterung:
"index" ist eine Direktive, eventuell deshalb. :?:
Aus der Delphi-Hilfe:
Zitat:

Im Gegensatz zu reservierten Wörtern können Standarddirektiven neu definiert werden (was aber nicht empfehlenswert ist).

Hansa 20. Mai 2005 20:48

Re: index wird ohne aufruf auf 0 gesetzt
 
Ja ! Genau so !! Variable umbenennen und sehen wo der Compiler hängen bleibt. Da liegt dann der Hu´nd begraben. Das geht wohl am schnellsten. 8) Alternativ : F7/F8

Nicodius 20. Mai 2005 21:11

Re: index wird ohne aufruf auf 0 gesetzt
 
das gleiche wie vorher




Delphi-Quellcode:
var
  Form1: TForm1;

  iindex, iindex2 : Integer;

da werden die globalen definiert


Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  selected := TImage.Create(Form1);
  zurueck := TBitmap.Create;
  zurueck := Canvas.Brush.Bitmap;
  iindex := 0;
  iindex2 := 0;
  Image2.Picture.Bitmap.TransparentColor := clwhite;
  actBuild := -1;
end;
heir initialisiert

Muetze1 20. Mai 2005 21:17

Re: index wird ohne aufruf auf 0 gesetzt
 
Moin!

Zitat:

Zitat von Nicodius
Delphi-Quellcode:
for i := 0 to Length(SelList) do
  SelList[i] := nil;

Garantiert muss das nur bis Length(SelList)-1 gehen. Da verletzt du die Arraygrenzen. Ich kann dir nochmals an's Herz legen den Overflow-Check und die Bereichsprüfung einzuschalten! Damit wäre der Fehler schon längst aufgefallen. Schon alleine da Nil 0 ist, scheint mir das verdächtig zu sein...

MfG
Muetze1

Nicodius 20. Mai 2005 22:22

Re: index wird ohne aufruf auf 0 gesetzt
 
danke muetze!!!

dass wars - ja ich weiß muss das alles wieder einschalten


was mich jetz taber interessieren würde - inwiefern hat dieser Fehler einfluss auf die variable iindex?#


danke vielmals


Nico

Christian Seehase 20. Mai 2005 23:00

Re: index wird ohne aufruf auf 0 gesetzt
 
Moin Nico,

vermutlich ist einfach der Speicherbereich dieser Variablen überschrieben worden, so dass sie den Wert 0 erhielt.

Nicodius 20. Mai 2005 23:03

Re: index wird ohne aufruf auf 0 gesetzt
 
danke :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 Uhr.

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