Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem mit dynamischen array
Schwabe - Sa 24.01.04 13:17
Titel: Problem mit dynamischen array
Hi,
Ich hab einen dynamischen array:
Delphi-Quelltext
1:
| var eingabe: array of array of extended; |
Den ich mit dieser procedure fülle:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TFunktionsgraph.ZeichnenClick(Sender: TObject); begin try k:= k+1;
if LBGezeichneteFunktionen.Items.Count = 0 then laenge:= 1 else laenge:= LBGezeichneteFunktionen.Items.Count;
SetLength(eingabe,4,laenge);
eingabe[0,k]:= StrToFloat(Ea0.Text); eingabe[1,k]:= StrToFloat(Ea1.Text); eingabe[2,k]:= StrToFloat(Ea2.Text); eingabe[3,k]:= StrToFloat(Ea3.Text);
Schaubild_Zeichnen; except end; end; |
(k wird bei OnFormCreate der Wert -1 zugewießen)
Ich habe eine Listbox angelegt wo er mir alle Gezeichneten Schaubilder auflistet. Jetzt möchte ich einzelen Funktionen aus der Listbox und somit aus dem array löschen.
Das mach ich mit dieser procedure:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TFunktionsgraph.BBEintragLoeschenClick(Sender: TObject); var g,c: integer; begin for c:= 0 to LBGezeichneteFunktionen.Items.Count-1 do begin if LBGezeichneteFunktionen.Selected[c] then begin LBGezeichneteFunktionen.DeleteSelected; for g:= c to k do begin eingabe[0,g]:= eingabe[0,g+1]; eingabe[1,g]:= eingabe[1,g+1]; eingabe[2,g]:= eingabe[2,g+1]; eingabe[3,g]:= eingabe[3,g+1]; end; SetLength(eingabe,4,laenge-1);
Schaubild_Zeichnen; end; end; end; |
Ich bekomm aber jedesmal wenn ich einen Eintrag löschen will einen Application.Run error oder es kommt eine Fehlermeldung die mir sagt das der Listindex das Maximum überschreitet.
Weiß jemand wo da der Fehler liegt?
Delete - Sa 24.01.04 13:18
Geh mal mit F7 durch und kuck dir den Inhalt der Variablen an.
toms - Sa 24.01.04 13:23
Delphi-Quelltext
1:
| LBGezeichneteFunktionen.DeleteSelected; |
Löscht ALLE selektierten Items in der Listbox.
Müsste so heissen:
Delphi-Quelltext
1:
| LBGezeichneteFunktionen.Items.Delete(c); |
Delphi-Quelltext
1:
| for c:= 0 to LBGezeichneteFunktionen.Items.Count-1 do |
verwende eine downto - Schleife.
Schwabe - Sa 24.01.04 13:48
Also ich hab des jetzt mit dem Delet eingebaut. Bekomme jetzt aber ne Zugriffsverletzung sobalsd ich mehr als 2 Schaubilder zeichne :(.
toms - Sa 24.01.04 14:40
| Zitat: |
| verwende eine downto - Schleife. |
Das auch?
Schwabe - Sa 24.01.04 14:44
Ja hab des eingebaut:
Delphi-Quelltext
1:
| for c:= LBGezeichneteFunktionen.Items.Count-1 downto 0 do |
Der fehler kommt aber trotzdem.
toms - Sa 24.01.04 15:06
| Zitat: |
| Bekomme jetzt aber ne Zugriffsverletzung |
Wo genau kommt sie denn?
Schwabe - Sa 24.01.04 15:39
Die kommt wenn ich auf Zeichnen oder auf Löschen mehrmals klick. Delphi zeigt aber nicht an in welcher Zeile der Fehler aufgetreten ist
rokdd - Mi 04.02.04 16:47
Titel: setlength
hallo,
setlength(eingabe,5, laenge-1) kann doch nciht funktionieren oder???
rokdd
Raphael O. - Mi 04.02.04 16:52
denke auch, dass es eher so heißen sollte :?
Delphi-Quelltext
1:
| setlength(eingabe[5] ,laenge-1); |
Christian S. - Mi 04.02.04 17:04
Hallo!
Ich weiß jetzt nicht, ob er im Rahmen des Programmes Sinn macht. Aber generell erzeugt der Befehl
Delphi-Quelltext
1:
| SetLength(myArray, a, b); |
Ein "rechteckiges" 2-dimensionales Array mit "Kantenlängen" a und b.
Mfg
Peter
rokdd - Do 05.02.04 18:40
Bitte poste nochmal den ganzen Quelltext(mit änderungen)! danke!
rokdd
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!