![]() |
Delphi-Version: 5
Stringgrid Plus Minus Vergleich
Hallo
Ich habe folgendes Problem:
Delphi-Quellcode:
procedure PlusMinus ist fehlerfrei
procedure TForm1.PlusMinus(Sender: TObject);
var i :integer; k,l:Real; begin JvSG1.Cells[9,1] := '00'; begin For i:= 1 to JvSG1.RowCount-1 do //Plus Minus in die Spalte Einfügen begin k:= StrToFloat(JvSG1.Cells[2,i]); l:= StrToFloat(JvSG1.Cells[2,i+1]); If k > l then JvSG1.Cells[9,i+1] := '-1'; If k < l then JvSG1.Cells[9,i+1] := '+1'; If k = l then JvSG1.Cells[9,i+1] := '0'; end; end; // Plus Minus Einfügen beendet BerechneSummenspaltePlusMinus(Sender); end; procedure TForm1.BerechneSummenspaltePlusMinus(Sender:TObject); var i,Summe :integer; begin Summe := 100; JvSG1.Cells[10,1] := '100'; //Startwerte Label1.Caption:=JvSG1.Cells[10,1]; For i:= 1 to JvSG1.RowCount-1 do begin Summe := Summe + StrToInt(JvSG1.Cells[9,i]); JvSG1.Cells[10,i] := IntToStr(Summe); end; end; erzeugt aus Vergleichswerten +1, 0 oder -1 in einer Spalte procedure Berechne SummeSpalte... ist fehlerbehaftet sämtliche Werte der PlusMinus Spalte sollen zu einem Startwert addiert werden und die Ergebnisse in einem Chart angezeigt werden. Problem: keinerlei Anzeige in Spalte 10 Bitte um Hilfe |
AW: Stringgrid Plus Minus Vergleich
Spalte 10 oder Spalte 11? BTW: Wäre es nicht günstiger, Logik und Darstellung zu trennen? Ich würde mir ja ein 2-dimensionales Array (oder wenn es gemischte Zahlentypen sind, ein 1-dimensionales Array of record) deklarieren und da meine Zahlen reinpacken. Damit lässt es sich IMO viel besser rechnen, das StringGrid dient dann nur noch zur Darstellung des Array-Inhalts.
|
AW: Stringgrid Plus Minus Vergleich
@DeddyH
Natürlich 11te Spalte. Dennoch zeigt IndexSpalte 10 nichts an. Trennung zwischen Logik und Anzeige ist für mein winziges Programm vielleicht nicht nötig. Es interessiert mich dennoch. Im Anschluß an die Lösung dieses Problems, werde ich das ganze nochmals überdenken. |
AW: Stringgrid Plus Minus Vergleich
Und dies ist bei beiden korrekt?
Delphi-Quellcode:
Gruss alfold
If k > l then JvSG1.Cells[9,i+1] := '-1';
If k < l then JvSG1.Cells[9,i+1] := '+1'; If k = l then JvSG1.Cells[9,i+1] := '0'; Summe := Summe + StrToInt(JvSG1.Cells[9,i]);// i+1 ??? |
AW: Stringgrid Plus Minus Vergleich
Zitat:
Was meinst du?? |
AW: Stringgrid Plus Minus Vergleich
Zitat:
Delphi-Quellcode:
'00' drinsteht?
JvSG1.Cells[9,1] := '00'
Gruss alfold |
AW: Stringgrid Plus Minus Vergleich
Also die PlusMinus Prozedur funktioniert einwandfrei von der ersten bis zur letzten Zeile stehe Nullen plusEinsen oder MinusEinsen drin.
Die SummenProzedur hat den Startwert Summe= 100, und darauf sollen die Nullen usw. addiert werden Summe := Summe + InttoStr(Cell[9,i]). Als Ergebnis soll in Cell[10,i] jeweils die Neue Summe stehen. JvSG1.Cells[9,1] := '00' soll nur als Füllzeichen stehen, kann auch weggelassen werden. Zitat:
Der Quelltext ist vielleicht nicht modern aber korrekt. |
AW: Stringgrid Plus Minus Vergleich
Warum setzt Du nicht ein Breakpoint an der Stelle
Delphi-Quellcode:
und dann step by step die Werte auslesen ob es stimmt was da passieren soll.
Summe := Summe + StrToInt(JvSG1.Cells[9,i]);
Gruss alfold |
AW: Stringgrid Plus Minus Vergleich
Neuer Quelltext:
Delphi-Quellcode:
Jetzt habe ich mal die Zwei Prozeduren in eine geschrieben.
procedure TForm1.PlusMinusGrafik2(Sender: TObject);
var i,Summe :integer; k,l:Real; begin Summe := 100; //JvSG1.InsertCol(9); JvSG1.Cells[9,1] := '00'; begin For i:= 1 to JvSG1.RowCount-1 do //Plus Minus in die Spalte Einfügen begin k:= StrToFloat(JvSG1.Cells[2,i]); l:= StrToFloat(JvSG1.Cells[2,i+1]); If k > l then JvSG1.Cells[9,i+1] := '-1'; If k < l then JvSG1.Cells[9,i+1] := '+1'; If k = l then JvSG1.Cells[9,i+1] := '0'; Summe := Summe + StrToInt(JvSG1.Cells[9,i]); JvSG1.Cells[10,i] := IntToStr(Summe); end; end; // Plus Minus Einfügen beendet // BerechneSummenspaltePlusMinus(Sender); end; IndexZeile[10,i] wird jetzt bis auf die &&vorletzte&& Zeile ausgefüllt. Zeile (RowCount-1)-1 ist die vorletzte Zeile und nicht RowCount-1. Warum?? |
AW: Stringgrid Plus Minus Vergleich
RowCount -1 ist die letzte Zeile. Verstehe deine Frage nicht.
Allerdings hätt es hier
Delphi-Quellcode:
knallen müssen! Weil Du auf eine Zeile zugreifst die nicht da ist!?
JvSG1.Cells[9,i+1]
Seeehr mergwürdig:shock: Gruss alfold |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:05 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 by Thomas Breitkreuz