Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Memoeintrag hinzufügen (erweitert) (https://www.delphipraxis.net/156150-memoeintrag-hinzufuegen-erweitert.html)

Portfreak 21. Nov 2010 22:47

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 :)

Jens Hartmann 21. Nov 2010 22:54

AW: Memoeintrag hinzufügen (erweitert)
 
Delphi-Quellcode:
Memo.Lines.Add
sollte gehen.

Gruß Jens

Portfreak 21. Nov 2010 22:59

AW: Memoeintrag hinzufügen (erweitert)
 
Mit Memo2.Lines.Add funktionierts leider nicht. Habe alle möglichen varianten durchgespielt...

also
Delphi-Quellcode:
Memo2.Lines.Add(FloatToStr(e))
Memo2.Lines.Add('FloatToStr(e)')
Memo2.Lines.Add()usw..
nichts hat geklappt.

Das problem ist es erscheint einfach... nichts... :S

Sir Rufo 21. Nov 2010 22:59

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

Bummi 21. Nov 2010 23:00

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:
 Memo2.Lines.Insert(i, FloatToStr(k));
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.
Du meinst wahrscheinlich entweder Memo2.lines.add(FloatToStr(k))
oder Memo2.Text := FloatToStr(k)

Portfreak 21. Nov 2010 23:13

AW: Memoeintrag hinzufügen (erweitert)
 
xD tut mir leid aber so bin ich aber xDDD

Zitat:

...dass dabei nichts sinnvolles rauskommt wenn mehr als 2 Zeilen in Memo1 sind, oder die Zeilen keine gültige Zahl ergeben ist Dir klar....
Eigentlich müssten vernüpftige Zahlen nach dem Schlefiendurchlauf herrauskommen, auch wenn es mehr als 2 Zeilen beinhaltet.
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:

Gibt es Fehlermeldungen?

Wenn ja, welche ...
Es wird keine Fehlermedlung ausgeben sondern es passiert einfach nichts. Das Programm läuft weiter allerdings ein einfügen eines Eintrags in Memo2 findet nicht statt. Die anderen proceduren laufen ohne probleme weiter.

Sonst hätte ich keine Idee wie man es sonst löst :(.
Danke!!

Sir Rufo 21. Nov 2010 23:17

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.

Portfreak 21. Nov 2010 23:28

AW: Memoeintrag hinzufügen (erweitert)
 
Also ich benutze den o.g. Code

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;
Was mich nun wundert ist, dass plötzlich doch eine Fehlermeldung erhalte :?:
Zitat:

Im Projekt Project1.exe ist eine Exeption der Klasse EConvertError aufgetreten. Meldung: '''ist kein gültiger Gleitkommawert'...
Aber.. ich verstehe nicht warum :(

Sir Rufo 21. Nov 2010 23:46

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 Delphi-Referenz durchsuchenStrToFloatDef

Weiterhin greifst du auf eine Zeile im Memo zu, die es nicht gibt.
Wenn i den Wert von
Delphi-Quellcode:
Memo1.Lines.Count - 1
hat, dann willst du aber auf
Delphi-Quellcode:
Memo1.Lines[ i + 1 ]
zugreifen und das geht nicht.

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;

Portfreak 22. Nov 2010 00:01

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 02:59 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz