![]() |
Potenzrechnung
Hallo,
ich habe da ein Problem und zwar ich versuche ein Potenzergebnis durch ein Gauge zu ermitteln aber irgendwie klappt es nicht. So folgt sieht mein code aus:
Delphi-Quellcode:
Ich vermute,dass irgendwas in meiner Formel stimmt nicht. kann mir jemanden helfen?
procedure Form1.OKBtnClick(Sender: TObject);
begin Timer1.enabled := true; Timer1.Interval := 10; end; procedure Form1.Timer1Timer(Sender: TObject); var i, x, y, ergebnis,ergebnis2: integer; begin x:=StrToInt(Edit1.Text); y:=StrToInt(Edit2.Text); Ergebnis:= x / y; Ergebnis2:= ergebnis*100; Gauge1.progress := gauge1.progress + 1; if gauge1.Progress = ergebnis2 then Timer1.enabled :=false; Label1.Caption:= inttostr(ergebnis); end; grüß poter |
Re: Potenzrechnung
Das Ergebnis der Operation x/y ist in Delphi ein Real, kein Integer. Daher musst du ergebnis als Real (oder Single/Double/Extended) definieren. Eine weitere Möglichkeit wäre, x/y durch x div y zu ersetzen.
Übrigens brauchst du insgesamt nur eine Variable.
Delphi-Quellcode:
EDIT: Schau dir mal das Grundlagentutorial auf
procedure Form1.OKBtnClick(Sender: TObject);
begin Timer1.enabled:=true; Timer1.Interval:=10; end; procedure Form1.Timer1Timer(Sender: TObject); var percent: Integer; begin percent:=StrToInt(Edit1.Text)*100 div StrToInt(Edit2.Text); Gauge1.progress:=gauge1.progress+1; if gauge1.Progress=percent then Timer1.enabled:=false; Label1.Caption:= inttostr(percent); end; ![]() |
Re: Potenzrechnung
Hallo,
es lauft nicht richtig. das ergbnis von 8 von 25 bezogen auf 100 kommt richtig. er kann nicht rechnen: 65 von 15 bezogen auf 100 800 von 72 bezogen auf 100 sollte ich circa 111,11% bekommen. Da habe ich folgendes gemacht
Delphi-Quellcode:
aber es hilft nicht
Gauge1.MinValue:=0;
Gauge1.MaxValue:=100; grüß Poter |
Re: Potenzrechnung
Er rechnet definitiv richtig, er rundet wahrscheinlich nur falsch.
Du wirst definitiv keine 111.11% erhalten, weil du MaxValue=100 hast und außerdem ist 800/82 ungefähr 11,1%. Warum setzt du nicht einfach den Wert des Gauges gleich auf 11? |
Re: Potenzrechnung
Ja,ich hab es nochmal probiert aber ich kriege bestimmt ergbnis richtig und ander falsch zb:
25 von 50 bezogen auf 100 sollte 12,5% rauskommen aber kommt bei Gauge1.Max:= 1000; 5% bei Gauge1.Max:= 100 ; kommt 50% raus bei 800 von 500 bezogen auf 100 sollte 160% raus. Bei Gauge1.Max:= 1000; kommt 16% raus aber der Label Zeigt es richtig. es muss die möglichkeit geben zb 160% auf den Gauge zu kriegen oder? |
Re: Potenzrechnung
Ja, gibt es. Du setzt Max auf 100. Oder du multiplizierst den Wert mit 10.
Und was meinst du mit "25 von 50 bezogen auf 100"? |
Re: Potenzrechnung
Zitat:
Grüße Klaus |
Re: Potenzrechnung
Hallo,
es klappt nicht bei Gauge1.Max:= 100; und das Ergebnis * 10 multiplizieren. |
Re: Potenzrechnung
1. "Es klappt nicht" ist keine Fehlerbeschreibung
2. Ich habe gesagt Max auf 100 setzen _ODER_ mit 10 multiplizieren. |
Re: Potenzrechnung
Hallo Peter,
so funktioniert es bei mir. Ich habe das mit einer Progressbar (smooth = true) gemacht.
Delphi-Quellcode:
[edit] noch eine Frage, warum willst Du das denn unbedingt mit einem Timer lösen? [/edit]
procedure TForm1.Button1Click(Sender: TObject);
begin Timer1.enabled := true; Timer1.Interval := 10; Gauge1.Position:=0; end; procedure TForm1.Timer1Timer(Sender: TObject); var i, x, y: Integer; ergebnis,ergebnis2: extended; Faktor: Integer; begin Faktor := 100; x:=StrToInt(Edit1.Text); y:=StrToInt(Edit2.Text); Ergebnis:= x / y; if ergebnis > 1 then gauge1.Max:=Faktor*(trunc(ergebnis)+1) else Gauge1.Max := Faktor; Ergebnis2:= ergebnis*Faktor; Gauge1.Position := gauge1.Position + 1; if gauge1.Position >= ergebnis2 then // >= wegen Vergleich Integer mit extended Timer1.enabled :=false; Label1.Caption:= Floattostr(ergebnis); end; Grüße Klaus |
Re: Potenzrechnung
Danke, was ich nicht verstehe, ich kriege ab und zu die antwort richtig aber alles was über 100% kommt falsch raus, zb:
800 von 72 bezogen auf 100 kommt als ergbnis raus Gauge: 92% Label:11,111111. es kann sein, dass der Faktor wird irgendwo ignioriert. mit der Taschenrechner rechne ich so. 800/72 und dann x 100 800/72= 11,1111 was der Label als ergbnis rausgibt und wenn ich mal 100 multipliziere bekomme ich 1111,11111 raus. mache ich was falsch da? |
Re: Potenzrechnung
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Peter,
mit diesem Code (mit TGauge):
Delphi-Quellcode:
Bekomme ich es richtig heraus, siehe Bild.
procedure TForm1.Timer1Timer(Sender: TObject);
var i, x, y,faktor: Integer; ergebnis,ergebnis2: extended; begin faktor:= StrToInt(Edit3.Text); x:=StrToInt(Edit1.Text); y:=StrToInt(Edit2.Text); Ergebnis:= x / y; if ergebnis > 1 then gauge1.Max:=faktor*(trunc(ergebnis)+1) else gauge1.Max:=faktor; label2.Caption:='max: '+IntToStr(Gauge1.Max); Ergebnis2:= ergebnis*faktor; Gauge1.Position := gauge1.Position + 1; if gauge1.Position >= ergebnis2 then Timer1.enabled :=false; Label1.Caption:= Edit1.Text +'/'+Edit2.Text+' * '+Edit3.Text+'= '+ format('%.2f',[ergebnis2]); end; Ich weiß nicht was Du anders machst. Arbeitet TGauge anders als TProgressbar? Grüße Klaus |
Re: Potenzrechnung
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich nochmal.
1. Denkfehler TGauge kann maximal 100% anzeigen. 2. Die Rechnung ist richtig wenn TGauge bei 800/72 -> 92% anzeigt und der Maximalwert bei 1200 steht. 0,92 * 1200 = 1111,111 3. Um Prozentwerte > 100% dartzstellen ist TGauge nicht die richtige Wahl. Grüße Klaus |
Re: Potenzrechnung
es gibt eine kleine unterschied zwischen Gauge und Progressbar und was du hier gemacht hast ist eine mischung aus Beiden. ist deine Test mit einem Progressbar oder Gauge gemacht worden?
es gibt keinem
Delphi-Quellcode:
richtig ist
Gauge1.Max //
Delphi-Quellcode:
aber es gibt einem
Gauge1.MaxValue
Delphi-Quellcode:
Ich habe deine quelle jetzt mit nem Progressbar probiert. dann bekomme ich eine Fehlermeldung:
Progressbar1.Max
'Edit3 is not a Valid Integer' es gilt auch für Edit 1 und 2 |
Re: Potenzrechnung
Dann steht da vermutlich keine Zahl drin.
|
Re: Potenzrechnung
schon beim start kommt die meldung, hat man keinen zeit da was anzugeben
|
Re: Potenzrechnung
Hast Du beim Timer die Eigenschaft "enabled" im Object Inspector auf false gesetzt?
Grüße Klaus |
Re: Potenzrechnung
Bingo, danke es lauft. Musste doch der timer auf false setzen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 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