![]() |
Delphi-Version: 5
Memoeintrag hinzufügen (erweitert)
Hallöchen!
So nun ist das eine Problem gelöst kommt das andere :D... Ich versuche eine Differenzübersicht in Form eines Memofeldes zu generieren. Dieser soll zwei Werte in einem Memofeld(1) voneinander subtrahieren (z.B. Eintrag 2. - 1.). -> Was soweit klappt. Nun soll er diesen Wert in das Memofeld(2) übertragen. -> Was nicht klappt. Zur Zeit bin ich soweit gekommen. Ich weiß, dass dort nur ein minimaler Fehler ist aber ich weiß zum $%§$"""$$ nicht wo ^^.
Delphi-Quellcode:
procedure TForm1.Differenz;
var i : integer; var k: double; begin k:=0; for i:=0 to Memo1.Lines.Count-1 do begin k := k + (StrToFloat(memo1.Lines[i+1])-(StrToFloat(memo1.Lines[i]))); Memo2.Lines.Insert(i, FloatToStr(k)); end; end; Über weitere hilfe wäre ich seeeehr Dankbar :) |
AW: Memoeintrag hinzufügen (erweitert)
Delphi-Quellcode:
sollte gehen.
Memo.Lines.Add
Gruß Jens |
AW: Memoeintrag hinzufügen (erweitert)
Mit Memo2.Lines.Add funktionierts leider nicht. Habe alle möglichen varianten durchgespielt...
also
Delphi-Quellcode:
nichts hat geklappt.
Memo2.Lines.Add(FloatToStr(e))
Memo2.Lines.Add('FloatToStr(e)') Memo2.Lines.Add()usw.. Das problem ist es erscheint einfach... nichts... :S |
AW: Memoeintrag hinzufügen (erweitert)
In diesem Falle bist du nicht einfach ...
Gibt es Fehlermeldungen? Wenn ja, welche ... Nochmal zum mitschreiben: "Geht nicht", "Klappt nicht", etc. sind keine Fehlerbeschreibungen sondern Zustände in jeglicher Hinsicht |
AW: Memoeintrag hinzufügen (erweitert)
der Ansatz wirkt extrem befremdlich, dass dabei nichts sinnvolles rauskommt wenn mehr als 2 Zeilen in Memo1 sind, oder die Zeilen keine gültige Zahl ergeben ist Dir klar.
Dein Problem hier ist das
Delphi-Quellcode:
Du fügst hier an die Stelle i die nach dem Schleifendurchlauf eigentlich nicht auswertbar ist, bei 2 Zeilen üblicherweise aber 3 enthalten wird einen Text ein, das geht aber nur wenn Memo2 bereits mindestens 3 Zeilen beinhaltet.
Memo2.Lines.Insert(i, FloatToStr(k));
Du meinst wahrscheinlich entweder Memo2.lines.add(FloatToStr(k)) oder Memo2.Text := FloatToStr(k) |
AW: Memoeintrag hinzufügen (erweitert)
xD tut mir leid aber so bin ich aber xDDD
Zitat:
Da der Wert i sich ja jedesmal neu richtet. Durchlauf 1.(Zeile 1 - Zeile 0) Durchlauf 2.(Zeile 2 -Zeile 1) Durchlauf 3.(Zeile 3 - Zeile 2) usw. Mit Memo2.lines.add(FloatToStr(k)) und Memo2.Text := FloatToStr(k) funktioniert es auch nicht :(. Zitat:
Sonst hätte ich keine Idee wie man es sonst löst :(. Danke!! |
AW: Memoeintrag hinzufügen (erweitert)
Dann ist der Code den du uns dort anbietest nicht der Originale,
Oder dieser Code wird niemals ausgeführt Denn in diesem Code ist ein eklatanter Zugriffsfehler enthalten. Und da ja kein Fehler auftritt, kann also da etwas nicht passen. |
AW: Memoeintrag hinzufügen (erweitert)
Also ich benutze den o.g. Code
Delphi-Quellcode:
Was mich nun wundert ist, dass plötzlich doch eine Fehlermeldung erhalte :?:
procedure TForm1.Differenz;
var i : integer; var k: double; begin k:=0; for i:=0 to Memo1.Lines.Count-1 do begin k := k + (StrToFloat(memo1.Lines[i+1])-(StrToFloat(memo1.Lines[i]))); Memo2.Lines.Insert(i, FloatToStr(k)); end; end; Zitat:
|
AW: Memoeintrag hinzufügen (erweitert)
Na das geht doch schon mal mit den Fehlermeldungen, tut doch gar nicht weh ;)
Um diesen Umwandlungsfehler zu umgehen, gibt es ![]() Weiterhin greifst du auf eine Zeile im Memo zu, die es nicht gibt. Wenn i den Wert von
Delphi-Quellcode:
hat, dann willst du aber auf
Memo1.Lines.Count - 1
Delphi-Quellcode:
zugreifen und das geht nicht.
Memo1.Lines[ i + 1 ]
Also darfst du i nicht so hoch zählen lassen. Bei einer vernünftigen Formatierung fällt das auch etwas schneller ins Auge. Des Weiteren würde ich Memo2 auch vorher löschen und dann mit Add statt mit Insert arbeiten. Um es richtig schön zu machen und die Performance zu steigern, unterbindet man auch noch das ständige Aktualisieren von Memo2
Delphi-Quellcode:
procedure TForm1.Differenz;
var i : integer; k: double; // doppel var kann man sich schenken begin k:=0; Memo2.Lines.BeginUpdate; try Memo2.Lines.Clear; for i:=0 to Memo1.Lines.Count - 2 do begin k := k + ( StrToFloatDef( Memo1.Lines[ i + 1 ], 0 ) - ( StrToFloatDef( Memo1.Lines[ i ], 0 ) ) ); Memo2.Lines.Add( FloatToStr( k ) ); end; finally Memo2.Lines.EndUpdate; end; end; |
AW: Memoeintrag hinzufügen (erweitert)
Danke! Ihr seid die besten!
Allerdings gibt es Rechenfehler :( Bei -> Folgt 1 -> nichts (ist ja richtig) 9 -> 8 (auch richtig) 18 -> 17 (falsch) 60 -> 59 (falsch) ??? :?: ^^" Edit: Echt tolle erklärung hier! Das muss ich mal besonders loben :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 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