![]() |
Wertezuweisung an Arrays
Hi Leute!
Folgendes Problem: bei dem Code
Delphi-Quellcode:
sollte doch für den Array von BildHL jeweils der entsprechende Wert zugewiesen werden. Bei mir bleiben aber alle auf dem Default-Wert (in diesem Fall false)...woran kann das liegen?
for i := 1 to 35 do {Durchlauf für alle Panels}
... repeat {HL} Hhl := Hhl + Zeile[Zaehler]; inc (Zaehler); until Zeile[Zaehler] = ';'; ... if Hhl <> '-1' then BildHL[i] := true; |
Also der Codeschnipsel ist sehr kurz, aber ich vermute, dass einfach HHL immer '-1' ist?!?!
Oder hast du ein begin/end vergessen? |
Nein, das hab gleich als erstes überprüft...
ich stell hier noch mal die gesamte Funktion rein, aber da ist viel mit dabei was mit hhl nicht viel zu tun hat
Delphi-Quellcode:
begin
zaehler := 21; for i := 1 to 35 do {Durchlauf für alle Panels} begin {Initialisierung der einzelnen Variablen} HName := ''; HFarbe := ''; HZeit := ''; HSchl := ''; HHl := ''; HSnd := ''; repeat {Name} HName := HName + Zeile[Zaehler]; inc (Zaehler); until Zeile[Zaehler] = ';'; inc (Zaehler); repeat {Zeit} HZeit := HZeit + Zeile[Zaehler]; inc (Zaehler); until Zeile[Zaehler] = ';'; if HZeit = '0' then Hzeit := ''; inc (Zaehler); repeat {Farbe} HFarbe := HFarbe + Zeile[Zaehler]; inc (Zaehler); until Zeile[Zaehler] = ';'; HFarbe := IntToHex((StrToInt('$' + HFarbe)),6); inc (Zaehler); repeat {THL} Hhl := Hhl + Zeile[Zaehler]; inc (Zaehler); until Zeile[Zaehler] = ';'; inc (Zaehler); repeat {Halle offen/zu} HSchl := HSchl + Zeile[Zaehler]; inc (Zaehler); until Zeile[Zaehler] = ';'; inc (Zaehler); repeat {Beschallung} HSnd := HSnd + Zeile[Zaehler]; inc (Zaehler); until Zeile[Zaehler] = '#'; Zaehler := Zaehler + 2; with Application.MainForm.FindComponent('PanLab' + IntToStr(i)) as TLabel do {Zuweisung Hallenname} begin caption := HName; end; with Application.MainForm.FindComponent('PanLabT' + IntToStr(i)) as TLabel do {Zuweisung Hallenzeit} begin caption := HZeit; end; with Application.MainForm.FindComponent ('PanHalle' + InttoStr(i))as TPanel do {Zuweisung Panelfarbe} begin Color := StrToInt('$' + HFarbe); end; if Hhl <> '-1' then BildHL[i] := true; {Zuweisung HL-Bild} BildHL[i] := HL (Application.MainForm.FindComponent('HLPan1'+IntToStr(i))as TImage,Mbleft,BildHL[i]); if HSchl <> '-1' then BildSchl[i] := true; {Zuweisung Schloss-Bild} BildSchl[i] := Schloss (Application.Mainform.Findcomponent('SchlPan'+IntToStr(i))as TImage,Mbleft, BildSchl[i]); if HSnd <> '-1' then BildSound[i] := true; {Zuweisung Beschallung-Bild} BildSound[i] := Sound (Application.MainForm.Findcomponent('SndPan'+IntToStr(i))as TImage, Mbleft, BildSound[i]); end; end; |
Mach das Ganze doch einfach mal nur mit dem ersten Wert und beachte die anderen nicht, wenn dann da was schief gehen sollte kannste es durch Debuggen sehr schnell rausfinden.
Etwas überladen die Methode, vielleicht hilft dir auch ein Auslagern in eine 2. bzw 3. Methode. Macht es einfach übersichtlicher. |
Der Absturz tritt schon beim ersten Durchlauf auf...allerdings (bei der gleichen Zeile die geladen wird) mal bei Hhl, mal bei HSchl und mal bei HSnd auf - spätestens aber dort. Und eine Zuweisung erfolgte bei keinem der zahlreichen Versuche...
|
Hallo,
Du solltest Deine Schleife bei 0 anfangen lassen, ist so üblich bei Arrays. ;) Solange noch kein Eintrag drin ist und Du den Array nicht per Hand erhöht hast, kannst Du an Stelle[1] nichts schrieben, weil der Platz sozusagen noch gar nicht existiert. Grüsse, Daniel :hi: |
Hmm, ich hab ihn aber eigentlich entsprechend definiert...oder liegt der Fehler in der Deklaration?
Delphi-Quellcode:
var
{Globale Variablen/Arrays} BildHL : array[1..35] of boolean; BildSchl : array[1..35] of boolean; BildSound : array[1..35] of boolean; z: integer; implementation begin for z:=1 to 35 do begin BildHL[z] := false; BildSchl[z] := false; BildSound[z] := false; end; |
Ein Fehler in der Deklaration liegt nicht vor, aber gewöhn dir an in solchen Fällen mit 0 anzufangen.
So hab ich keinen Fehler gefunden, durch Debuggen sollte es recht einfach sein dahinter zu kommen. PS: i := i + 1 ist 10% schneller als inc(i). Hab mir mal ein kleines Testprogramm dafür geschrieben um es zu testen :mrgreen: |
Hallo,
Zitat:
Grüsse, Daniel :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 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