Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Programm gibt Ergebnis nicht aus - MWST-Rechner (Anfänger)


DeusXIII - Do 07.04.22 08:36
Titel: Programm gibt Ergebnis nicht aus - MWST-Rechner (Anfänger)
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 ^^

Delphi-Quelltext
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Zahl1, Zahl2 : Real;
  Rechenart : TRechenart;

implementation

{$R *.dfm}

// nur für den test-button - nicht programmrelevant
procedure TForm1.Button1Click(Sender: TObject);
  begin
    Label1.Caption:=Label1.Caption+'1';
    LabelEndpreis.Caption:=LabelEndpreis.Caption+'1';
  end;


//soll den button für brutto ausführen
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;


//soll den button für netto ausführen
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 user profile iconTh69: Titel geändert (Klein- -> Großschreibung).


Th69 - Do 07.04.22 09:12

Hallo und :welcome:

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 - Do 07.04.22 09: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 - Do 07.04.22 09:32

Hallo und :welcome: auch von mir!

Worauf user profile iconTh69 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?


Th69 - Do 07.04.22 10: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 - Do 07.04.22 13: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 user profile iconTh69: Delphi-Tags hinzugefügt


Gausi - Do 07.04.22 13:58

user profile iconDeusXIII hat folgendes geschrieben Zum zitierten Posting springen:
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. :idea:

Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt