![]() |
Problem mit dynamischen array
Hi,
Ich hab einen dynamischen array:
Delphi-Quellcode:
Den ich mit dieser procedure fülle:
var eingabe: array of array of extended;
Delphi-Quellcode:
(k wird bei OnFormCreate der Wert -1 zugewießen)
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; 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-Quellcode:
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.
procedure TFunktionsgraph.BBEintragLoeschenClick(Sender: TObject);
var g,c: integer; begin for c:= LBGezeichneteFunktionen.Items.Count-1 downto 0 do begin if LBGezeichneteFunktionen.Selected[c] then begin LBGezeichneteFunktionen.Items.Delete[c]; 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; Weiß jemand wo da der Fehler liegt? |
Re: Problem mit dynamischen array
Spontan kann ich z.B. nicht feststellen, wie du die Beziehung zwischen k und laenge herstellst, wenn aus irgendeinem Grund (k >= laenge) werden würde, dann könnte das eine Ursache für den Fehler sein.
|
Re: Problem mit dynamischen array
Und wie sollte ich es dann machen? Könntest du mir einen Ansatzt geben?
|
Re: Problem mit dynamischen array
Ich weis ja nicht, warum du da zwei Variablen hast. Wenn ich mir nur diesen Code betrachte, könnte ich sagen, das du statt die Länge aus dem LB zu holen, entweder
Delphi-Quellcode:
oder
laenge := k+1;
Delphi-Quellcode:
verwendest.
laenge := length(eingabe[0]) + 1;
Wird eigentlich immer, wenn ZeichnenClick ausgelöst wurde auch an anderer Stelle ein Eintrag zu LBGezeichneteFunktionen hinzugefügt? Am besten gibst du mir noch ein paar relevante Code-Schnipsel, wenn die obigen Vorschläge nicht passen sollten. |
Re: Problem mit dynamischen array
Delphi-Quellcode:
procedure TFunktionsgraph.Schaubild_Zeichnen;
var c: integer; begin for c:= 0 to k do begin a0:= eingabe[0,c]; a1:= eingabe[1,c]; a2:= eingabe[2,c]; a3:= eingabe[3,c]; Kurve_Zeichnen; end; end;
Delphi-Quellcode:
In Kurve_Zeichnen wird dann das Schaubild über die Funktion f(x) gezeichnet und der Listbox der jeweilige Eintrag hinzugefügt.
function f(x:extended) :extended;
begin f:= a3*Power(x,3)+a2*Power(x,2)+a1*x+a0; end;
Delphi-Quellcode:
LBGezeichneteFunktionen.Items.AddObject('f´(x)='+ausgabe);
Hoffe das hilft dir weiter:). |
Re: Problem mit dynamischen array
OK, dann ist das in Ordnung:
Delphi-Quellcode:
Dann musst du aber bei
procedure TFunktionsgraph.ZeichnenClick(Sender: TObject);
begin try k:= k+1; laenge := k+1; SetLength(eingabe,4,laenge); //...
Delphi-Quellcode:
auch das hier machen:
procedure TFunktionsgraph.BBEintragLoeschenClick(Sender: TObject);
Delphi-Quellcode:
SetLength(eingabe,4,laenge-1);
k := k - 1; laenge := laenge - 1; |
Re: Problem mit dynamischen array
Also jetzt klappts scho ziemlich gut. Es kommt jetzt nur noch manchmal beim Löschen zu einem "Fehler der Bereichsprüfung".Manchmal wird der Eintrag auch nicht aus der Listbox gelöscht. Manchmal gehts manchmal aber auch nicht. Was stimmt denn da noch net?
Edit: Es klappt jetzt alles außer das es manchmal vorkommt, dass eine IEntrag nicht aus der Listbox gelöscht wird. Dadurch kommt es vor, dass er nen Fehler bringt weil er noch nen Eintrag in der Listox hat aber keinen im array. Da gibts noch irgendein Problem.
Delphi-Quellcode:
Wäre super wenn du mir noch wieterhelfen könntest:).
procedure TFunktionsgraph.BBEintragLoeschenClick(Sender: TObject);
var g,c: integer; begin for c:= LBGezeichneteFunktionen.Items.Count-1 downto 0 do begin if LBGezeichneteFunktionen.Selected[c] then begin for g:= 0 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; LBGezeichneteFunktionen.Items.Delete(c); SetLength(eingabe,4,laenge-1); k:= k - 1; laenge:= laenge - 1; Schaubild_Zeichnen; end; end; end; |
Re: Problem mit dynamischen array
So jetzt klappt alles. Vielen Dank für deine Hilfe :).
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:00 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