Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rechnung mit Label (https://www.delphipraxis.net/174640-delphi-rechnung-mit-label.html)

Hanswurst1 2. Mai 2013 16:09

Delphi-Version: 5

Delphi Rechnung mit Label
 
Hallo,

ich habe folgendes Problem ich muss in einer Formel durch ein Label teilen Delphi zeigt mir dabei aber immer nur an das ich den falschen Typ zum Rechnen gewählt habe. Die anderen Zahlen sind eingaben aus dem Edit Feld.

Da ich änfänger bin mit delphi und schon vieles ausprobiert habe weiß ich nun nicht mehr weiter ich hoffe ihr könnt mir helfen.

Delphi-Quellcode:
unit Unit1;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    Button2: TButton;
    Label4: TLabel;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    procedure Edit1Change(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Label5Click(Sender: TObject);
    procedure Label7Click(Sender: TObject);
    procedure Label11Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Zahl1, Zahl2,Zahl3,Zahl4: single;
implementation

{$R *.DFM}

procedure TForm1.Edit1Change(Sender: TObject);
begin
Label1.caption := Inputbox('Eigabe des Kredites','Wie viel € ?','');
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
label2.caption := Inputbox('Eigabe der Wunschrate','Wie hoch ist die monatliche Wunschrate?','');
end;

procedure TForm1.Edit3Change(Sender: TObject);
begin
Label3.caption := Inputbox('Eigabe des Zinssatzes','Wie hoch ist der Zinssatz?','');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Label5Click(Sender: TObject);
begin
if (RadioButton1.Checked)
then
  begin
    Zahl1:= StrToFloat(Edit1.text);
    Zahl2:=100;
    Label5.caption := FloatToStr((Zahl1/Zahl2)/2)
  end
else
  Label5.caption :='0';

end;



procedure TForm1.Label7Click(Sender: TObject);
begin
Zahl1 := StrToFloat(Edit1.text);
Zahl2 := 100;
Label7.caption := FloatToStr(Zahl1 / Zahl2)

end;

procedure TForm1.Label11Click(Sender: TObject);
begin
Zahl1:=StrToFloat(Edit1.text);
Zahl2:=StrToFloat (Edit2.text);
Zahl3:=StrToFloat (Edit3.text);
Zahl4:= (Label7);
Label11.Caption:= FloatToStr ((Zahl1)+(Zahl4)) div ((Zahl2) - (Zahl3));
end;

end.
speziell geht es um diese Rechnung
Delphi-Quellcode:
procedure TForm1.Label11Click(Sender: TObject);
begin
Zahl1:=StrToFloat(Edit1.text);
Zahl2:=StrToFloat (Edit2.text);
Zahl3:=StrToFloat (Edit3.text);
Zahl4:= (Label7);
Label11.Caption:= FloatToStr ((Zahl1)+(Zahl4)) div ((Zahl2) - (Zahl3));
end;

Der schöne Günther 2. Mai 2013 16:14

AW: Delphi Rechnung mit Label
 
Delphi-Quellcode:
Zahl4:= (Label7);
meinst du bestimmt nicht ernst :-)

Du hast davor die drei mal doch auch erkannt, dass man man in deine "ZahlX"-Variablen vom Typ Single (also Kommazahl) nicht einfach ein Label reinstecken kann. Die drei mal davor nimmst du den Text des Labels und konvertierst diesen String in eine Fließkommazahl. Warum diesmal nicht?

Hanswurst1 2. Mai 2013 16:18

AW: Delphi Rechnung mit Label
 
Ok wenn ich dich richtig verstanden habe meinst du das ich das so machen sollte
Delphi-Quellcode:
Zahl4:= StrToFloat (Label7);
. Wenn du das meinst dann habe ich das bereits probiert da zeigt delphi mir aber an das das ein falscher typ ist :(

grl 2. Mai 2013 16:21

AW: Delphi Rechnung mit Label
 
Delphi-Quellcode:
Label7
bezeichnet aber die Labelkomponente selbst. Wie willst du aus der eine Zahl machen?
Umwandeln willst du ja den Text den das Label anzeigt und wie du den erreichst, siehst du in deiner Funktion
Delphi-Quellcode:
Label5Click
.

Gruß
Luggi

Hanswurst1 2. Mai 2013 16:29

AW: Delphi Rechnung mit Label
 
ok Aber bei label 5 habe ich dem Label eine Zahl zugewiesen. bei dem anderen Label wird eine Zahl ausgerechnet und das verstehe ich irgendwie nicht wie das gehen soll. Tut mir leid ich bin noch anfänger und noch nicht so mit Delphi vertraut :-D

grl 2. Mai 2013 16:33

AW: Delphi Rechnung mit Label
 
Lies nochmal genau: Wem hast du bei Label5 eine Zahl zugewiesen und was liest du jetzt bei Label7 aus?

mkinzler 2. Mai 2013 16:38

AW: Delphi Rechnung mit Label
 
Zudem ist es eine schlechte Idee ein Label als Speicher für Zahlen zu verwenden

Hanswurst1 2. Mai 2013 16:42

AW: Delphi Rechnung mit Label
 
Ja dem Label habe ich mit
Delphi-Quellcode:
Label5.caption :='0'
den Wert 0 zugewiesen das habe ich soweit verstanden. Aber was ich nicht genau weiß ist wie man das macht wenn man in den label eine Zahl ausrechnet,

grl 2. Mai 2013 16:44

AW: Delphi Rechnung mit Label
 
Und nochmal: Was hast du wem zugewiesen? Wie unterscheidet sich deine Verwendung von Label5 und Label7. Lies bitte genau, was du getan hast.

Was bedeutet denn der Ausdruck
Delphi-Quellcode:
Label5.Caption
?

Luggi

Hanswurst1 2. Mai 2013 16:49

AW: Delphi Rechnung mit Label
 
Mit dem Ausdruck
Delphi-Quellcode:
Label5.Caption
weise ich dem Label eine zahl zu.

BUG 2. Mai 2013 16:49

AW: Delphi Rechnung mit Label
 
Oder noch allgemeiner:
Zitat:

Zitat von mkinzler (Beitrag 1213863)
Zudem ist es eine schlechte Idee ein Label als Speicher für Zahlen zu verwenden



Zitat:

Zitat von Hanswurst1 (Beitrag 1213864)
Ja dem Label habe ich mit
Delphi-Quellcode:
Label5.caption :='0'
den Wert 0 zugewiesen das habe ich soweit verstanden.

Du hast dem Label(-text) die Zeichenkette '0' zugewiesen, nicht die Zahl 0.

Zitat:

Zitat von Hanswurst1 (Beitrag 1213864)
Aber was ich nicht genau weiß ist wie man das macht wenn man in den label eine Zahl ausrechnet,

Lies dir diesen Satz nochmal durch und überlege, was du damit gemeint haben könntest. So macht dieser Satz keinen Sinn.

Ausgehend von deinen vorherigen Post vermute ich, dass du
Delphi-Quellcode:
Zahl4:= StrToFloat(Label7.caption);
suchst.
Aber nimm dir den Rat von mkinzler zu Herzen: Warum speicherst du
Delphi-Quellcode:
Zahl1 / Zahl2
nicht einfach in einer Variable?

grl 2. Mai 2013 16:51

AW: Delphi Rechnung mit Label
 
Zitat:

Zitat von BUG (Beitrag 1213867)
Ausgehend von deinen Vorherigen Post vermute ich, dass du
Delphi-Quellcode:
Zahl4:= StrToFloat(Label7.caption);
suchst.

Schade - ich wollte eigentlich erreichen, daß er da selber draufkommt und einfach mal zu verstehen lernt, daß Label7 und Label7.Caption nicht das gleiche ist.

Luggi

grl 2. Mai 2013 16:55

AW: Delphi Rechnung mit Label
 
Zitat:

Zitat von Hanswurst1 (Beitrag 1213866)
Mit dem Ausdruck
Delphi-Quellcode:
Label5.Caption
weise ich dem Label eine zahl zu.


Nein, du weist nicht dem Label eine Zahl zu, sondern der Caption des Labels eine in eine Zeichenkette umgewandelte Zahl.

Was ist denn der Unteschied zwischen dem Label und der Caption des Labels?

Hanswurst1 2. Mai 2013 17:14

AW: Delphi Rechnung mit Label
 
Ich glaube das Label ist das anzeigefeld und die Caption der Wert den das label anzeigt. Bin mir aber nicht sicher ich frag mal meine Lehrerin. Trotzdem danke.

grl 2. Mai 2013 17:21

AW: Delphi Rechnung mit Label
 
Zitat:

Zitat von Hanswurst1 (Beitrag 1213870)
Ich glaube das Label ist das anzeigefeld und die Caption der Wert den das label anzeigt.

Richtig.

Und jetzt schau dir nochmal an, was du geschrieben hast:
Delphi-Quellcode:
StrToFloat(Label7);
StrToFloat macht aus einer Zeichenkette eine Zahl. Nachdem Label7 ein Anzeigefeld ist, versuchst du hier aus einem Anzeigefeld (also aus dem ganzen Feld, das ja auch z.B. Schriftart und Größe umfasst und nicht nur den Text den es darstellt) eine Zahl zu machen. Kann das funktionieren?

Die Zahl willst du ja aus dem Wert den das Label anzeigt machen - also wie muss der Befehlt lauten?

Luggi

Hanswurst1 2. Mai 2013 17:55

AW: Delphi Rechnung mit Label
 
Ich würde dann mal sagen so
Delphi-Quellcode:
 StrToFloat(Label7.caption);

bernerbaer 2. Mai 2013 17:56

AW: Delphi Rechnung mit Label
 
Zitat:

Zitat von Hanswurst1 (Beitrag 1213870)
Ich glaube das Label ist das anzeigefeld und die Caption der Wert den das label anzeigt.

Wenn wir dies mal verallgmeinern, dann ist das Label ein Objekt und die Caption ein Attribut oder eine Eigenschaft dieses Objektes.

Beim Schreiben des Codes müssen wir also folgendermassen vorgehen:
  1. Welches Objekt wollen wir ansprechen? Label7
  2. Welches Attribut wollen wir auslesen oder setzen oder welche Methode des Objektes wollen wir ausführen

In Pascal wird die Trennung zwischen Objekt und Attribut/Methode durch den Punkt festgelegt. D.h. also

Label7.Caption:= 'Mein Eintrag';
  • Das Objekt, welches ich anspreche ist Label7
  • Das Attribut (Eigenschaft/Property) Caption wird mit mein Eintrag gefüllt

grl 2. Mai 2013 18:01

AW: Delphi Rechnung mit Label
 
Zitat:

Zitat von Hanswurst1 (Beitrag 1213873)
Ich würde dann mal sagen so
Delphi-Quellcode:
 StrToFloat(Label7.caption);

Richtig!

Bernerbaer hat die Sache ja bereits ein bischen erklärt.

Jetzt alles klar?

Luggi

Hanswurst1 2. Mai 2013 18:05

AW: Delphi Rechnung mit Label
 
Ja danke euch jetzt ist es mir klarer geworden wie Delphi funktioniert das wird mir weiterhelfen. Dankeschön :)

Perlsau 3. Mai 2013 09:25

AW: Delphi Rechnung mit Label
 
Zitat:

Zitat von Hanswurst1 (Beitrag 1213870)
Ich glaube das Label ist das anzeigefeld und die Caption der Wert den das label anzeigt. Bin mir aber nicht sicher ich frag mal meine Lehrerin. Trotzdem danke.

Nein, das Label bzw. der Labelname ist eine Variable vom Typ Pointer, der auf die das erzeugte Objekt der Labelkomponente im Speicher zeigt. Das Objekt TLabel verfügt über mehrere Properties (sowas wie Eigenschaften), von denen einige published sind, was ungefähr soviel bedeutet wie "vom Programmierer im Objektinspektor veränderbar". Eines dieser Properties heißt Caption und ist vom Typ String, darin ist der Text des Labels enthalten.

Wenn du nun also versuchst, einer Label-Variablen (z.B. MeinLabel) eine Zahl zuzuweisen, funktioniert das nicht, weil eine Zahl z.B. vom Typ Integer ist und dieser Typ sich vom Variablentyp des Labels unterscheidet. Auch wenn du versuchst, der Caption des Labels, die ja vom Typ String ist, eine Zahl zuzuweisen, erhältst du eine Fehlermeldung, weil sich die Typen unterscheiden. Dem Label-Property Left oder Top z.B. kannst du einen Integerwert zuweisen, denn diese Properties sind vom Typ Integer.

Der schöne Günther 3. Mai 2013 09:30

AW: Delphi Rechnung mit Label
 
Wenn grundlegendste Sprachbestandteile gerade erst verstanden werden, gleich mit Zeigern und Sichtbarkeitsmodifikatoren zu kommen finde ich ehrlich gesagt ein bisschen hart, aber das sieht wohl jeder anders.

Perlsau 3. Mai 2013 09:40

Off Topic
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1213948)
Wenn grundlegendste Sprachbestandteile gerade erst verstanden werden, gleich mit Zeigern und Sichtbarkeitsmodifikatoren zu kommen finde ich ehrlich gesagt ein bisschen hart, aber das sieht wohl jeder anders.

Was soll daran "hart" sein (was immer auch du unter "hart" vestehst)? Wenn der TE die Information (noch) nicht versteht, schadet es nichts, er wird sie einfach überlesen. Wenn er echtes Interesse an der Delphi-Programmierung hat, wird er dem vielleicht nachforschen. Vielleicht bleibt ja was davon hängen und trägt zum weiteren Verständnis der Zusammenhänge bei. Außerdem lesen hier alle möglichen Leute mit sehr unterschiedlichem Wissensstand, sowie zahlreiche unangemeldete Besucher – für manche mag die Information, die ich geliefert habe, nützlich sein, für andere vielleicht nicht. Jeder liefert die Informationen, die er liefern möchte und kann. Daher ist es im Grunde völlig unnötig, solche eher fragwürdige Kritik an zutreffenden Aussagen hier ins Forum zu schreiben. Dein subjektives Empfinden hin oder her, aber es steht hier nicht zu Debatte ...

Bernhard Geyer 3. Mai 2013 10:04

AW: Delphi Rechnung mit Label
 
Zitat:

Zitat von Hanswurst1 (Beitrag 1213876)
Ja danke euch jetzt ist es mir klarer geworden wie Delphi funktioniert das wird mir weiterhelfen. Dankeschön :)

Kann es sein das du schon mit Access/VBA gearbeitet hast? AFAIK gibt es hier diesen Automatismus das bei Zuweisung auf das GUI-Label automatisch der Wert ins Caption-Property geschrieben wird.

p80286 3. Mai 2013 11:15

AW: Off Topic
 
Zitat:

Zitat von Perlsau (Beitrag 1213952)
Zitat:

Zitat von Der schöne Günther (Beitrag 1213948)
Wenn grundlegendste Sprachbestandteile gerade erst verstanden werden, gleich mit Zeigern und Sichtbarkeitsmodifikatoren zu kommen finde ich ehrlich gesagt ein bisschen hart, aber das sieht wohl jeder anders.

Was soll daran "hart" sein (was immer auch du unter "hart" vestehst)? Wenn der TE die Information (noch) nicht versteht, schadet es nichts, er wird sie einfach überlesen. Wenn er echtes Interesse an der Delphi-Programmierung hat, wird er dem vielleicht nachforschen. Vielleicht bleibt ja was davon hängen und trägt zum weiteren Verständnis der Zusammenhänge bei. Außerdem lesen hier alle möglichen Leute mit sehr unterschiedlichem Wissensstand, sowie zahlreiche unangemeldete Besucher – für manche mag die Information, die ich geliefert habe, nützlich sein, für andere vielleicht nicht. Jeder liefert die Informationen, die er liefern möchte und kann. Daher ist es im Grunde völlig unnötig, solche eher fragwürdige Kritik an zutreffenden Aussagen hier ins Forum zu schreiben. Dein subjektives Empfinden hin oder her, aber es steht hier nicht zu Debatte ...

Nun laß mal gut sein. Auch wenn Du Recht hast, bzw. Deine Information richtig ist, alleine die Benutzung des Wortes Pointer dürfte 50% der Leser nachhaltig abgeschreckt haben. Im jetzigen Stadium reicht es dem TE klarzumachen, das .Caption der Teil ist, in dem der anzuzeigende Text untergebracht wird.

Gruß
K-H

Perlsau 3. Mai 2013 13:45

AW: Off Topic
 
Zitat:

Zitat von p80286 (Beitrag 1213966)
Nun laß mal gut sein.

Vielleicht solltest du dich selbst an deine eigenen Ratschläge halten :twisted: und es gut sein lassen.

Zitat:

Zitat von p80286 (Beitrag 1213966)
Auch wenn Du Recht hast, bzw. Deine Information richtig ist, alleine die Benutzung des Wortes Pointer dürfte 50% der Leser nachhaltig abgeschreckt haben.

Abgeschreckt wovon? Vom Lesen in Delphi-Foren? Von mir? Und wie kommst du auf "nachhaltig"? Du hast doch nicht etwa eine Umfrage gestartet, die deine sehr exakten, aber unbelegten Behauptungen belegt? Was soll diese blöde Anmache??? Hältst du mich für blöde???

Zitat:

Zitat von p80286 (Beitrag 1213966)
Im jetzigen Stadium reicht es dem TE klarzumachen, das .Caption der Teil ist, in dem der anzuzeigende Text untergebracht wird.

Und das weißt du woher? Wie gesagt, wenn der TE nicht versteht, wird er es eher überlesen statt sich abschrecken zu lassen. Und für viele andere, die bei der Suche nach Lösungen auf diesen Thread stoßen, mag mein Beitrag ja durchaus hilfreich sein.

Aufgrund der unnötigen und unqualifizierten Angriffe einiger User hier werde ich diesen Thread weder weiterverfolgen noch weiter kommentieren. Ich laß mir doch von euch nicht vorschreiben, wie detailliert ich posten darf! Also bitte! Man kann's auch übertreiben ...

Hanswurst1 3. Mai 2013 16:07

AW: Delphi Rechnung mit Label
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1213955)
Zitat:

Zitat von Hanswurst1 (Beitrag 1213876)
Ja danke euch jetzt ist es mir klarer geworden wie Delphi funktioniert das wird mir weiterhelfen. Dankeschön :)

Kann es sein das du schon mit Access/VBA gearbeitet hast? AFAIK gibt es hier diesen Automatismus das bei Zuweisung auf das GUI-Label automatisch der Wert ins Caption-Property geschrieben wird.

Ja ich habe schon etwas mit Access gearbeitet und da war das meines wissen auch so. Aber mit Delphi bin ich totaler Anfänger. Ich habe praktisch nur ein Crashkurs in der Schule gehabt und soll jetzt schon ein projekt machen.:?

DeddyH 3. Mai 2013 17:28

AW: Delphi Rechnung mit Label
 
Markus (mkinzler) hat es ja bereits angedeutet: Du solltest es vermeiden, Anzeigekomponenten als Datenspeicher zu missbrauchen. Da Du ja etwas berechnen willst/musst, brauchst Du auch Variablen bzw. Felder von entsprechenden Zahlentypen (z.B. Integer für ganze Zahlen oder double für Gleitkommazahlen). Die Komponenten dienen dann als Schnittstelle zwischen Benutzer und diesen Variablen/Feldern. In größeren Projekten würde ich dazu raten, den ganzen "Berechnungsskram" in eine eigene Klasse auszulagern, aber das ist in diesem Fall wohl etwas oversized, und außerdem ist der "gemeine Delphi-Anfänger" (das ist nicht wertend gemeint) damit aller Wahrscheinlichkeit hoffnungslos überfordert. Ein einfaches Beispiel: ein Formular mit 2 Edits, einem Button und einem Label. In die Edits sollen jeweils Zahlen eingegeben werden, auf Button-Click soll die Summe dieser Zahlen im Label ausgegeben werden. Achtung: der folgende Code ist im Editor getippt und daher ungetestet. Außerdem habe ich auf jegliche Fehlerbehandlung verzichtet:
Delphi-Quellcode:
type
  TRechenForm = class(TForm)
    (* Edits für die Eingabe *)
    edtZahl1: TEdit;
    edtZahl2: TEdit;
    (* Button, der die Berechnung anstoßen soll *)
    btnRechne: TButton;
    (* Ausgabelabel *)
    lblErgebnis: TLabel;
    (* Ereignis, das bei Click des Buttons ausgelöst werden soll *)
    procedure btnRechneClick(Sender: TObject);
  private
    (* private Felder, mit denen gerechnet werden soll *)
    FZahl1: integer;
    FZahl2: integer;
    FErgebnis: integer;
    (* Deklaration der Rechenroutine *)
    procedure Rechne;
  end;

...

procedure TRechenForm.Rechne;
begin
  (* Berechnung *)
  Ergebnis := FZahl1 + FZahl2;
end;

procedure TRechenForm.btnRechneClick(Sender: TObject);
begin
  (* Umwandlung der Eingaben in Zahlen und Zuweisung an die Felder *)
  FZahl1 := StrToInt(edtZahl1.Text);
  FZahl2 := StrToInt(edtZahl2.Text);
  (* Berechnung aufrufen *)
  Rechne;
  (* Ausgabe des Ergebnisses, dabei Umwandlung von Zahl -> String *)
  lblErgebnis.Caption := IntToStr(FErgebnis);
end;
Dass da die Fehlerbehandlung fehlt, wirst Du merken, wenn Du die Edits leer lässt oder etwas anderes als Ziffern eingibst und dann auf den Button klickst. Ich hoffe, es hilft Dir trotzdem etwas weiter.

Hanswurst1 4. Mai 2013 09:16

AW: Delphi Rechnung mit Label
 
Zitat:

private
(* private Felder, mit denen gerechnet werden soll *)
FZahl1: integer;
FZahl2: integer;
FErgebnis: integer;
Wenn ich dich also richtig verstanden habe kann man unter private die Felder und Variablen zum rechnen auslagern und später wieder auf diese zugreifen.

p80286 4. Mai 2013 10:04

AW: Delphi Rechnung mit Label
 
Zitat:

Zitat von Hanswurst1 (Beitrag 1214076)
Wenn ich dich also richtig verstanden habe kann man unter private die Felder und Variablen zum rechnen auslagern und später wieder auf diese zugreifen.

Nicht so ganz. Was unter Private definiert ist, ist nur innerhalb der Klasse sichtbar. Das hat mit "Auslagern" weniger zu tun, eher mit "Verstecken".

Gruß
K-H

DeddyH 4. Mai 2013 10:05

AW: Delphi Rechnung mit Label
 
Richtig, aber das kann nur die Klasse, zu der die Felder gehören. Es gibt zwar delphi-spezifische Ausnahmen, aber wir wollen das hier noch nicht näher vertiefen.

Hanswurst1 4. Mai 2013 10:58

AW: Delphi Rechnung mit Label
 
Aha Ok Dankeschön für eure Erklärungen und Hilfe, das hat mir sehr viel weiter geholfen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz