Autor Beitrag
DeusXIII
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 07.04.22 08: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 ^^
ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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?

_________________
We are, we were and will not be.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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

_________________
We are, we were and will not be.