![]() |
Frage zur StringGrid
Hey Leute, ich habe folgendes Problem.
Ich habe nach langer Zeit wieder mit dem Programmieren angefangen und nun hab ich ein kleines Problemchen mit der StringGrid. Ich will in einer bestimmten Zelle (meinetwegen 4,6 als Beispiel) etwas berechnen lassen. Die Formel für diese Berechnung lautet: 30*Stufe*1,1^Stufe Nun ist es so, das diese "Stufe" eine Zelle der StringGrid sein soll (Beispiel 1,1). Wie realisiere ich nun, das die Zelle 4,6 nach der Formel 30*StringGrid.cells[1,1]*1.1^StringGrid[1,1] rechnet?! Ich weiß man kann auch für die Potenz die Math Unit beim Interface reinschreiben und es dann mit dem Befehl Power(1.1,StringGrid[1,1] irgendwie realisieren, doch ich komme nicht drauf. Ich hatte es schonmal hinbekommen vor 2 oder 3 Jahren, aber nun sitze ich seit 1 Woche ohne Lösung. Vllt könntet Ihr mir helfen? Momentan sieht es bei mir so aus: StringGrid1.Cells[4,1]:=FloatToStr(StrToFloat(StringGrid1.Cells[1,1])*30)*StrToFloat(Power(1.1,StringGrid1.Cells[1,1])); Wo liegt das Problem an der ganzen Sache? |
AW: Frage zur StringGrid
Mal davon abgesehen, dass ich dafür das böse with nutzen würde, so dass die Zeile etwas übersichtlicher aussieht
Delphi-Quellcode:
erkenne ich dein Fehler höchstens darin, dass du mit FloatToStr und StrToFloat etwas durcheinander kommst
with StringGrid1 do Cells[4,1] := FloatToStr(StrToFloat(Cells[1,1]) * 30) * StrToFloat(Power(1.1, Cells[1,1]));
evtl.
Delphi-Quellcode:
Edit:
with StringGrid1 do Cells[4,1] := FloatToStr(
StrToFloat(Cells[1,1]) * 30 ) * // <<<<<<<<<<<<<<<< hier multiplizierst du einen String StrToFloat(Power(1.1, Cells[1,1] // <<<<<<<<<<<< das ist ein String. Vorher in Float umrechnen ) ); evtl.
Delphi-Quellcode:
oder besser, weil man nicht so durcheinander kommt
with StringGrid1 do Cells[4,1] := FloatToStr(
StrToFloat(Cells[1,1]) * 30 * Power(1.1, StrToFloat(Cells[1,1]) )); // ungeprüft
Delphi-Quellcode:
Und nutze Leerzeichen. Ist ja kein Wunder, dass man durcheinander kommt.
var
x: Double; begin with StringGrid1 do begin x := StrToFloat(Cells[1,1]); //evtl. ist StrToFloatDef besser Cells[4,1] := FloatToStr(x * 30 * Power(1.1, x)); end; end; |
AW: Frage zur StringGrid
Danke für den Versuch der Hilfe, jedoch hat nichts geklappt. Ich habe auch aus deinen Hinweisen versucht bisschen was umzuformen damit es dann vlt klappt, aber es geht nicht.
Vllt hilft es ja, wenn ich ein bissl das Prog beschreibe: Form1: Durch Auwahl in einer Combobox gelange ich zu Form2, wo die StringGrid ist. Dort wähle ich dann in einer weiteren Combobox aus, welche Aktion ich ausführen möchte. Eine davon ist halt die Eingabe der Werte für die StringGrid. Wenn ich diese nun bestätige geht Form3 auf, wo ich dann die Werte eintrage und diese bestätige. Die Werte werden auch in die vorgesehen Zellen eingetragen, soweit so gut. Nun kommt ja mein Hauptproblem. Sobald diese Werte (Meinetwegen 35 in Zelle 1,1) eingetragen sind, soll StringGrid mit der Formel dann in die vorgesehen Zelle berechnen. Wie gesagt, ich hatte es schonmal, jedoch erinnere ich mich nicht mehr dran und finde es leider auch nicht heraus |
AW: Frage zur StringGrid
Ich weiß immer noch nicht so recht was das Problem ist, aber ich gebe dir einen kleinen Tip, weil ich denke, dass du lediglich durch deine Schreibweise in der du keine Leerzeichen einsetzt und dadurch die Formel derart unleserlich machst, dass man den Überblick verliert, einfach nur durcheinander kommst.
Der Tipp ist: lese zuerst die Werte aus der SG und konvertiere sie in Realzahlen. Rechne dann mit Realzahlen. Schreibe das Ergebnis in eine Realzahl Variable. Erst wenn alles berechnet ist, konvertiere diese Realzahl in String und schreib sie in SG. Ich brauchte fast zwei Minuten bis ich deine Formel verstanden. Das ist das Superbeispiel wie man die Übersicht verlieren kann. |
AW: Frage zur StringGrid
--- Redundantes Gefasel meinerseits ---
|
AW: Frage zur StringGrid
Trenne die Daten von der Visualisierung (StringGrid) und benutze das StringGrid nur zur Anzeige und Eingabe.
Ein darunterliegendes 2-dimensionales Array speichert alles als Variant ab und darauf kannst du dann die Berechnungen durchführen und wieder anzeigen lassen. Noch geschickter wäre allerdings ein Record mit der position und dem Inhalt in einer Liste zu verwalten. Neuere Delphi-Versionen bringen auch ein TDictionary und ein TPair mit sich, da ist auch der Zugriff wesentlich einfacher zu gestalten. |
AW: Frage zur StringGrid
Zitat:
Zitat:
|
AW: Frage zur StringGrid
Hab die Lösung meines Problemes heute Mittag lösen können, da mir einfiel, wieso nicht einfach über die Eingabe berechnen lassen. Immerhin kommen die Werte über nen Edit-Feld in die StringGrid und diese werden ja auch für die Berechnung benötigt!
Ja ich weiß, wirr warr aber ich sehe dennoch gut durch^^ Form2.StringGrid1.Cells[4,1]:=FloatToStr(StrToFloat(Edit1.Text)*30*(Power(1.1, StrToFloat(Edit1.Text)))); Die Berechnung klappt nun einwandfrei so wie sie sein soll =). Ich danke dennoch für eure Hilfen =) |
AW: Frage zur StringGrid
Zitat:
|
AW: Frage zur StringGrid
Bisher habe ich immer durchgesehen, auch wenn der Quelltext mal 30-50 A4 Seiten lang war^^
Aber evlt nehme ich doch lieber eure Tipps an, denn denke mal schon das Ihr erfahrener seit als ich es noch bin:roll: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 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