![]() |
Mit Arrays rechnen
Guten Tag,
folgende Situation: Ich möchte, dass man in ein StringGrid Umsätze von einem ganzen Jahr eingeben kann (Januar, Februar...bis Dezember). Dafür habe ich folgende Zeilen geschrieben:
Delphi-Quellcode:
Nun möchte ich, dass der Jahresumsatz errechnet wird. Klar, ich könnte mir das ganze viel einfacher machen und direkt mit den StringGrid-Zellen rechnen, das möchte ich aber nicht.
procedure TForm1.Button_BerechnenClick(Sender: TObject);
var Umsatz: Array [1..12] of Single; begin for i := 1 to 12 do Umsatz[i] := StrToFloat (StringGrid1.Cells[1,i]); end Wenn ich dann alle Umsätze zugewiesen habe-wie rechne ich dann?
Delphi-Quellcode:
Ich glaube da, würde ich mich dumm und dämlich schreiben, und es soll ja Fälle geben, in denen vielleicht tausende Arrays zusammengerechnet werden, ich habe schon bei
Gesamtumsatz := Umsatz[1] + Umsatz[2]..... + Umsatz[12]
![]() Danke schonmal im Vorraus. mfg. Mysterio08 |
Re: Mit Arrays rechnen
Wie wäre es so? ;-)
Delphi-Quellcode:
// EDIT:
var
MySum: Double; i: Integer; begin MySum := 0; for i := Low(Umsatz) to High(Umsatz) do MySum := MySum + Umsatz[i] Und mit SetLength und dynamischen Arrays wärst du wohl auch besser bedient. |
Re: Mit Arrays rechnen
Nur ich habe mich weder mit dynamischen Arrays beschäftigt, noch mit SetLength. Ich weiß nur, dass man damit Positionen von Strings herausfinden kann, aber das man das auch zum Rechnen nehmen kann, habe ich nicht gewusst.
Könntest du mir das vielleicht mal so posten, würde mich mal interessieren. |
Re: Mit Arrays rechnen
Zitat:
ließ am Besten nochmal in deiner Delphi-Hilfe nach, was das wirklich macht. |
Re: Mit Arrays rechnen
OMG, na klar, du hast Recht. Ich habe SetLength mit Length verwechselt.....
Aber ich habe noch eine andere Möglichkeit - eine wie ich finde eine viel einfachere - gefunden:
Delphi-Quellcode:
Nur eine Sache ist jetzt noch offen: In meinem StringGrid soll der Nutzer die Umsätze direkt eingeben - die Eigenschaft goEditing in den Options habe ich auf True gesetzt. Nur kann der Nutzer nun auch Zahlen in den prozentualen Anteilen "verfälschen", das gefällt mir gar nicht.
for i := 1 to 12 do
Gesamtumsatz := Gesamtumsatz + Umsatz[i] Gibt es die Möglichkeit, nur einzelne Zellen anzusprechen und nicht gleich das ganze StringGrid? |
Re: Mit Arrays rechnen
Einfach die Eingabe überwachen.
|
Re: Mit Arrays rechnen
Zitat:
|
Re: Mit Arrays rechnen
Z.B. im KeyDown- oder KeyPress-Event
|
Re: Mit Arrays rechnen
Zitat:
|
Re: Mit Arrays rechnen
Oder man nimmt gleich math.Sum() :)
|
Re: Mit Arrays rechnen
Zitat:
Delphi-Quellcode:
So habe ich es immer bei Edit-Felder gemacht, wenn ich nicht wollte, dass der Nutzer z.B. ein Ergebnis manipulieren kann (ich weiß, ein Label bietet sich zur Ausgabe eher an, aber in der Schule werden wir "gezwungen" ein Edit-Feld zu nehmen).
procedure TForm1.StringGridKeyPress(Sender: TObject; var Key: Char);
var i: Byte; begin for i := 1 to Max do //Max = 12 begin StringGrid.Cells[2,i] := Chr(27) //Chr27 ist die ESC-Tase end; end; Jetzt ist das Problem, dass ich in den Felder 1 bis 12 soche Vierecke habe (ich hoffe ihr wisst, was ich damit meine). Könnt ihr mir einen anderen Lösungsweg nennen, denn ich weiß nicht weiter! |
Re: Mit Arrays rechnen
Zitat:
Was erwartest du denn anderes als dass das Zeichen dann dort angezeigt wird? Da es kein normales Zeichen ist, sieht man eben nur solch ein Ersatzzeichen. :cyclops: |
Re: Mit Arrays rechnen
Zitat:
Delphi-Quellcode:
Oder im Objektinspektor einstellen.
StringGrid.Options := StringGrid.Options - [goEditing]
Btw: Bei Edits würde ich nicht unbedingt Chr(27) nehmen, sondern #0. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 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