Autor |
Beitrag |
DeusXIII
Hält's aus hier
Beiträge: 3
|
Verfasst: Do 07.04.22 07:36
Hallöchen ins Forum,
ich arbeite seit drei-vier Tagen an einem Rechner der Brutto/Netto-Preise berechnen soll. Gedacht ist den Preis in ein Editfeld einzutragen, dann per Button entweder Brutto oder Netto zu wählen und das Ergbnis dann in einem Label auszugeben.
Er gibt auch keine Fehler aus oder ähnliches, aber halt auch kein Ergebnis im Label. Der Test-Button, welchen ich implementiert habe, schreibt beim Klick eine 1 in das Test-Label und auch in das Endpreis-Label, das funktioniert. (der Button fliegt dann natürlich auch weg wenn das Programm fertig ist.)
Vieleicht kann mir jemand auf die Sprünge helfen, wo der Mops im Pfeffer liegt?
Vielen Dank schon mal im Voraus, der Sourcecode folgt ab hier ^^
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83:
| unit Unit1;
interface
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type TRechenart = (raKeine, raBrutto, raNetto); TForm1 = class(TForm) EditPreis: TEdit; LabelPreis: TLabel; ButtonBrutto: TButton; LabelOder: TLabel; ButtonNetto: TButton; LabelErgebnis: TLabel; LabelEndpreis: TLabel; Button1: TButton; Label1: TLabel; procedure ButtonBruttoClick(Sender: TObject); procedure ButtonNettoClick(Sender: TObject); procedure Button1Click(Sender: TObject);
private public end;
var Form1: TForm1; Zahl1, Zahl2 : Real; Rechenart : TRechenart;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption:=Label1.Caption+'1'; LabelEndpreis.Caption:=LabelEndpreis.Caption+'1'; end;
procedure TForm1.ButtonBruttoClick(Sender: TObject); var Ergebnis : Real; begin if Rechenart <> raKeine then begin Zahl1:=StrToFloat(LabelEndpreis.Caption); case Rechenart of raBrutto: Ergebnis:=Zahl1 * 119 / 100; end; LabelEndpreis.Caption:=FloatToStr(Ergebnis); Rechenart:=raKeine; end; end;
procedure TForm1.ButtonNettoClick(Sender: TObject); var Ergebnis : Real; begin if Rechenart <> raKeine then begin Zahl1:=StrToFloat(LabelEndpreis.Caption); case Rechenart of raNetto: Ergebnis:=Zahl1 / 119 * 100; end; LabelEndpreis.Caption:=FloatToStr(Ergebnis); Rechenart:=raKeine; end; end;
end. |
Moderiert von Th69: Titel geändert (Klein- -> Großschreibung).
|
|
Th69
Beiträge: 4791
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Do 07.04.22 08:12
Hallo und
Hast du schon mal dein Programm mit dem Debugger durchlaufen lassen (also Haltepunkt in der ButtonBruttoClick-Funktion setzen und im Einzelschritt weiterlaufen lassen sowie Variablen anzeigen lassen)?
Tipp: Variable Rechenart
PS: Deine begin...end-Blöcke solltest du einheitlich einrücken (damit der Code besser zu lesen ist).
|
|
DeusXIII
Hält's aus hier
Beiträge: 3
|
Verfasst: Do 07.04.22 08:23
Hallo ^^
Nein, das habe ich noch nicht probiert, werd ich dann direkt mal testen.
Die Variable ist wohl falsch?
Danke für den Hinweis, hast du eine Zeile als Beispiel? Ich war der Meinung, das schon recht einheitlich gehalten zu haben, bin aber natürlich offen für Korrekturen ^^
|
|
Gausi
Beiträge: 8541
Erhaltene Danke: 475
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 07.04.22 08:32
Hallo und auch von mir!
Worauf Th69 wohl rauswollte ist: Welchen Wert hat denn die Variable "Rechenart", wenn du auf den einen oder anderern Button klickst? Oder anders: An welcher Stelle setzt du diese Variable, die iirc automatisch mit 0 (d.h. mit raKeine) initialisiert wird?
_________________ We are, we were and will not be.
|
|
Th69
Beiträge: 4791
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Do 07.04.22 09:16
Ja, das meinte ich...
Außerdem macht der case...of-Vergleich bisher so keinen wirklichen Sinn (mit nur jeweils einem Fall!), sondern nur wenn du eine eigene Prozedur/Funktion für die Berechnung und/oder Ausgabe hättest (und diese dann aus den beiden Button-Prozeduren mit passenden Parametern aufrufen würdest).
Falls du das als Anfänger noch nicht verstehst, dann lies mal (lerne), wie man eigene Prozeduren/Funktionen erstellt.
Und bzgl. Einrückung z.B. die Zeilen 54/62 (im Vergleich zu 72/80) als auch 42/45 (im Unterschied zu den anderen Prozeduren). Und die zusätzliche Einrückung der Zeilen 60/61 sowie 78/79 (im Vergleich zu den vorherigen Zeilen).
|
|
DeusXIII
Hält's aus hier
Beiträge: 3
|
Verfasst: Do 07.04.22 12:29
Auf jeden Fall vielen Dank für die Tipps/ Anregungen.
Aber meine Frage bezog sich nicht auf evtl. Formfehler und/oder ob es sinnig ist, hier ein "case of" zu nutzen oder nicht, sondern:
wieso mein Programm keine Ausgabe des Ergebnisses ins Label macht ^^
edit:
Rechenart bezieht sich auf TRechenart, welche in Zeile 10 unter type steht: (raKeine, raBrutto, raNetto)
Moderiert von Th69: Delphi-Tags hinzugefügt
|
|
Gausi
Beiträge: 8541
Erhaltene Danke: 475
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 07.04.22 12:58
DeusXIII hat folgendes geschrieben : | sondern:
wieso mein Programm keine Ausgabe des Ergebnisses ins Label macht ^^
edit:
Rechenart bezieht sich auf TRechenart, welche in Zeile 10 unter type steht: (raKeine, raBrutto, raNetto) |
Das ist schon klar. Daher ja auch die Frage, wo du den Wert der Variablen von raKeine auf was anderes setzt. Denn solange der Wert auf raKeine steht, machen deine beiden ButtonClick-Prozeduren so ziemlich genau nichts.
Moderiert von Th69: Delphi-Tags hinzugefügt
_________________ We are, we were and will not be.
|
|
|