Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Edit Felder mit Rechenfunktionen erstellen aber wie? (https://www.delphipraxis.net/40900-edit-felder-mit-rechenfunktionen-erstellen-aber-wie.html)

Duffy Duck 22. Feb 2005 23:41


Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Hallo Leute,

bin völliger neuling was Delphi angeht und habe für einige von euch eine simple Frage (habe überhaupt keinen durchblick).
Habe auch schon diverse tuts gelesen, aber für mich im mom nur bahnhof...

Also ich schildere mal:

Ich möchte 3 Edit Felder wo "nur" zahlen erlaubt sind.
Diese 3 Edit Felder sind zwingend.
Falls ein Edit Feld leer ist, sollte darauf hingewiesen werden es mit einer Zahl zu belegen.
Im einem weiteren Feld sollte das ergebnis dargestellt werden.

Es sollten 2 rechenaufgaben hintereinander gerechnet werden. Also Zahl 1 + Zahl 2 : Zahl 3 = Ergebnis
Nunja, ich habe einen einfachen rechner gefunden, (und nachvollzogen) der mir zahl 1 und zahl 2 zusammenzählt und auch das Ergebnis anzeigt. Was ich einfach nicht schaffe ist es, dieses ergebnis mit einer weiteren Zahl noch zu dividieren und in einem Edit Ferd anzuzeigen.
Ist mein vorhaben überhaupt möglich?

ThX schon mal
Duffy Duck

Boombuler 23. Feb 2005 07:17

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Du meinst jetzt aber nicht sowas wie:

Delphi-Quellcode:
var Ergeb:double;

Ergeb := strtofloat(edit1.text) + strtofloat(edit2.text);
Ergeb := Ergeb / strtofloat(edit3.text);
edit4.text := floattostr(Ergeb);
Oder doch?

Greetz
Boombuler

Sharky 23. Feb 2005 07:47

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Hai Duffy Duck,

ersteinmal: "Herzlich Willkommen in der Delphi-PRAXIS.

Zitat:

Zitat von Duffy Duck
...Ist mein vorhaben überhaupt möglich?....

Vieles ist möglich ;-) Und in diesem Fall auch recht einfach.
Hier mal ein Beispiel. Du brauchst dafür 4 Editfelder und einen Button:
Delphi-Quellcode:
{
 In den Editfelder werden nur Zahlen, das Dezimaltrennzeichen
 und die Backspace-Taste zugelassen
}
procedure TForm1.AllEditKeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['0'..'9', #8, DecimalSeparator]) then
  begin
    Key := #0;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Allen drei Eingabefeldern wir die selbe OnKeyPress-Methode zugewiesen
  Edit1.OnKeyPress := AllEditKeyPress;
  Edit2.OnKeyPress := AllEditKeyPress;
  Edit3.OnKeyPress := AllEditKeyPress;
  // Alle Editfelder löschen
  Edit1.Clear;
  Edit2.Clear;
  Edit3.Clear;
  Edit4.Clear;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  zahl1,
  zahl2,
  zahl3 : Real;
  ergebniss : Real;
begin
  // Prüfen ob in den Editfeldern etwas steht.
  if (Edit1.Text = '') then
  begin
    ShowMessage ('Bitte im Edit1 etwas eingeben');
    Edit1.SetFocus; // Caret in Edit1 setzen
    Exit; // Abbruch der Procedure
  end;

  if (Edit2.Text = '') then
  begin
    ShowMessage ('Bitte im Edit2 etwas eingeben');
    Edit2.SetFocus;
    Exit;
  end;

  if (Edit3.Text = '') then
  begin
    ShowMessage ('Bitte im Edit3 etwas eingeben');
    Edit3.SetFocus;
    Exit;
  end;

  zahl1 := StrToFloat(Edit1.Text); // Zahl aus Edit1
  zahl2 := StrToFloat(Edit2.Text); // Zahl aus Edit2
  zahl3 := StrToFloat(Edit3.Text); // Zahl aus Edit3

  ergebniss := (zahl1 + zahl2) / zahl3; // Die Berechnung

  Edit4.Text := FloatToStr(ergebniss); // Ausgabe des Ergebnisses
end;

Catbytes 23. Feb 2005 08:11

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Zitat:

Zitat von Sharky
ergebniss := (zahl1 + zahl2) / zahl3; // Die Berechnung

Punkt vor Strich?

Sharky 23. Feb 2005 08:18

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Zitat:

Zitat von Duffy Duck
....nicht schaffe ist es, dieses ergebnis mit einer weiteren Zahl noch zu dividieren...

Darum habe ich die Klammern gesetzt ;-)

Catbytes 23. Feb 2005 08:29

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Zitat:

Zitat von Sharky
Zitat:

Zitat von Duffy Duck
....nicht schaffe ist es, dieses ergebnis mit einer weiteren Zahl noch zu dividieren...

Darum habe ich die Klammern gesetzt ;-)

Und ich das Fragezeichen :-D

War kein :warn: sonder nur 'ne Frage.

Klar - mit Klammern wird die Regel ausser Kraft gesetzt. Duffy Duck wird schon wissen, was er braucht... :roll:

Duffy Duck 23. Feb 2005 19:21

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Hallo Leute,
erst mal möchte ich mich bei euch für den freundlichen Empfang bedanken.
Wow, was für eine schnelle Hilfe die hier angeflogen kommt....

Zitat:

Zitat von Catbytes
Duffy Duck wird schon wissen, was er braucht... :roll:

eben weiss ich es nicht, ich werde mal den Code einsetzen und mal sehen ob ich was zustande bekomme....

ThX
Duffy Duck

Prym 23. Feb 2005 19:29

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
wenn eine zahl zugelassen sein soll würde ich


try
Zahl1 := strtofloat (edt.text);
except
else showmessage ('Bitte eine Zahl eingeben/Nur Eine Zahl Eingeben');
edt.text := '0';
end;

anstadt if nehmen da bei dem if noch buchstaben zugelassen sein können

alcaeus 23. Feb 2005 19:32

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Wenn du diese if-Abfrage meinst:

Delphi-Quellcode:
if not (Key in ['0'..'9', #8, DecimalSeparator]) then
,

da kommen sicher keine Buchstaben durch.
Ausserdem ist das else in deiner except-Klausel ueberfluessig...

Greetz
alcaeus

Prym 23. Feb 2005 19:57

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
ne da stand noch ein anders if ich habe das hier ja nur überflogen

und einfach ist dieser befehl auch^^

Duffy Duck 23. Feb 2005 20:12

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
also, habe den Code eingegeben... beim compilieren erhalte ich bei dieser Zeile einen Fehler, was das immer auch heissen mag....

Delphi-Quellcode:
procedure TForm1.AllEditKeyPress(Sender: TObject; var Key: Char);

Binärbaum 23. Feb 2005 20:18

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Zitat:

Zitat von Duffy Duck
also, habe den Code eingegeben... beim compilieren erhalte ich bei dieser Zeile einen Fehler, was das immer auch heissen mag....

Delphi-Quellcode:
procedure TForm1.AllEditKeyPress(Sender: TObject; var Key: Char);

Da wäre es schon hilfreich, zu sagen was für ein Fehler genau es ist. (Fehler-/Compilermeldung).

MfG
Binärbaum

alcaeus 23. Feb 2005 20:22

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Hallo Duffy Duck,

nachdem es in Sharkys Code nicht enthalten ist, schaetze ich dass du vergessen hast, die Funktionen ind er Klasse zu deklarieren. Fuege einfach unter den ganzen Edit-Variablen folgende Zeile hinzu:
Delphi-Quellcode:
procedure AllEditKeyPress(Sender: TObject; var Key: Char);
Greetz
alcaeus

jfheins 23. Feb 2005 20:24

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Delphi-Quellcode:
Glaskugel := TGlaskugel.Create;
Glaskugel.Input := 'Fehler in Zeile X';
Glaskugel.ProcessInput;
Glaskugel.PostResult ('DelphiPRAXIS');
Glaskugel.Free;
Ergebnis: Guck doch 'mal, ob davor eine Semikolon fehlt ...

:mrgreen: :mrgreen: :mrgreen:

Duffy Duck 23. Feb 2005 20:40

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
irgenwie bekomme ich es einfach nicht gebacken..... ich sage ja "Anfänger"

hier mal den Code wie ich Ihn von Sharky eingefügt habe:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.AllEditKeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['0'..'9', #8, DecimalSeparator]) then
  begin
    Key := #0;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Allen drei Eingabefeldern wir die selbe OnKeyPress-Methode zugewiesen
  Edit1.OnKeyPress := AllEditKeyPress;
  Edit2.OnKeyPress := AllEditKeyPress;
  Edit3.OnKeyPress := AllEditKeyPress;
  // Alle Editfelder löschen
  Edit1.Clear;
  Edit2.Clear;
  Edit3.Clear;
  Edit4.Clear;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  zahl1,
  zahl2,
  zahl3 : Real;
  ergebniss : Real;
begin
  // Prüfen ob in den Editfeldern etwas steht.
  if (Edit1.Text = '') then
  begin
    ShowMessage ('Bitte im Edit1 etwas eingeben');
    Edit1.SetFocus; // Caret in Edit1 setzen
    Exit; // Abbruch der Procedure
  end;

  if (Edit2.Text = '') then
  begin
    ShowMessage ('Bitte im Edit2 etwas eingeben');
    Edit2.SetFocus;
    Exit;
  end;

  if (Edit3.Text = '') then
  begin
    ShowMessage ('Bitte im Edit3 etwas eingeben');
    Edit3.SetFocus;
    Exit;
  end;

  zahl1 := StrToFloat(Edit1.Text); // Zahl aus Edit1 
  zahl2 := StrToFloat(Edit2.Text); // Zahl aus Edit2 
  zahl3 := StrToFloat(Edit3.Text); // Zahl aus Edit3 

  ergebniss := (zahl1 + zahl2) / zahl3; // Die Berechnung

  Edit4.Text := FloatToStr(ergebniss); // Ausgabe des Ergebnisses
end;

end.

alcaeus 23. Feb 2005 20:41

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Wie gesagt...fuege diese Zeile
Delphi-Quellcode:
procedure AllEditKeyPress(Sender: TObject; var Key: Char);
unter dieser Zeile ein:
Delphi-Quellcode:
procedure FormCreate(Sender: TObject);
Anschliessend sollte alles funktionieren

Greetz
alcaeus

Duffy Duck 23. Feb 2005 20:52

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
hmmm habe ich nun auch gemacht... nur wird es einfach nicht compiliert... der cursor bleibt bei:

Delphi-Quellcode:
procedure TForm1.AllEditKeyPress(Sender: TObject; var Key: Char);
nach "AllEditKeyPress" stehen.... also vor der Klammer

alcaeus 23. Feb 2005 20:55

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
In welcher zeile? Noch im Deklarationsteil der Klasse oder bei der Implementation?
Und haettest du endlich die Guete uns die Fehlermeldung zu verraten? :roll:

Greetz
alcaeus

Duffy Duck 23. Feb 2005 21:01

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
nunja, so wie ich es verstanden habe, in der Implementation...

hier die Fehler:
  • Erzeugen
    [Fehler] Unit1.pas(52): Undefinierter Bezeichner: 'Button1Click'
    [Fehler] Unit1.pas(52): ';' erwartet, aber '(' gefunden
    [Fehler] Unit1.pas(60): Undefinierter Bezeichner: 'Edit1'
    [Fehler] Unit1.pas(63): Operator oder Semikolon fehlt
    [Fehler] Unit1.pas(67): Undefinierter Bezeichner: 'Edit2'
    [Fehler] Unit1.pas(70): Operator oder Semikolon fehlt
    [Fehler] Unit1.pas(74): Undefinierter Bezeichner: 'Edit3'
    [Fehler] Unit1.pas(77): Operator oder Semikolon fehlt
    [Fehler] Unit1.pas(81): Es gibt keine überladene Version von 'StrToFloat', die man mit diesen Argumenten aufrufen kann
    [Fehler] Unit1.pas(82): Operator oder Semikolon fehlt
    [Fehler] Unit1.pas(82): Es gibt keine überladene Version von 'StrToFloat', die man mit diesen Argumenten aufrufen kann
    [Fehler] Unit1.pas(83): Operator oder Semikolon fehlt
    [Fehler] Unit1.pas(83): Es gibt keine überladene Version von 'StrToFloat', die man mit diesen Argumenten aufrufen kann
    [Fehler] Unit1.pas(85): Operator oder Semikolon fehlt
    [Fehler] Unit1.pas(87): Undefinierter Bezeichner: 'Edit4'
    [Fehler] Unit1.pas(87): '(' erwartet, aber ':=' gefunden
    [Fataler Fehler] Project2.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden
¨

hoffe es hilft...

Matze 23. Feb 2005 21:09

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Zitat:

Zitat von alcaeus
Delphi-Quellcode:
if not (Key in ['0'..'9', #8, DecimalSeparator]) then
da kommen sicher keine Buchstaben durch.

Wer hat dir denn das erzählt? ;)

Per Copy & Paste kommen auch Buchstaben durch. Aber ich denke, das ist vernachlässigbar, ist nur der Vollständligkeit halber.

sniper_w 23. Feb 2005 21:12

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    procedure AllEditKeyPress(Sender: TObject; var Key: Char);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{
In den Editfelder werden nur Zahlen, das Dezimaltrennzeichen
und die Backspace-Taste zugelassen
}
procedure TForm1.AllEditKeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['0'..'9', #8, DecimalSeparator]) then
  begin
    Key := #0;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Allen drei Eingabefeldern wir die selbe OnKeyPress-Methode zugewiesen
  Edit1.OnKeyPress := AllEditKeyPress;
  Edit2.OnKeyPress := AllEditKeyPress;
  Edit3.OnKeyPress := AllEditKeyPress;
  // Alle Editfelder löschen
  Edit1.Clear;
  Edit2.Clear;
  Edit3.Clear;
  Edit4.Clear;

  Button1.OnClick := Button1Click;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  zahl1,
  zahl2,
  zahl3 : Real;
  ergebniss : Real;
begin
  // Prüfen ob in den Editfeldern etwas steht.
  if (Edit1.Text = '') then
  begin
    ShowMessage ('Bitte im Edit1 etwas eingeben');
    Edit1.SetFocus; // Caret in Edit1 setzen
    Exit; // Abbruch der Procedure
  end;

  if (Edit2.Text = '') then
  begin
    ShowMessage ('Bitte im Edit2 etwas eingeben');
    Edit2.SetFocus;
    Exit;
  end;

  if (Edit3.Text = '') then
  begin
    ShowMessage ('Bitte im Edit3 etwas eingeben');
    Edit3.SetFocus;
    Exit;
  end;

  zahl1 := StrToFloat(Edit1.Text); // Zahl aus Edit1
  zahl2 := StrToFloat(Edit2.Text); // Zahl aus Edit2
  zahl3 := StrToFloat(Edit3.Text); // Zahl aus Edit3

  ergebniss := (zahl1 + zahl2) / zahl3; // Die Berechnung

  Edit4.Text := FloatToStr(ergebniss); // Ausgabe des Ergebnisses
end;

end.
So muss es gehen. Allerdings, muss du bevor du es kompilieren kannst, 4 mal eine TEdit Komponente auf formular setzen un ein TButton.
Dann auch Ereigniss entsprechend verknüpfen.
Form1.OnCerate = FormCreate(Sender: TObject); <- in Objekt Inspektor

Duffy Duck 23. Feb 2005 21:18

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
:-D
ok supi, hat soweit funktioniert, nur....

wenn ich nun im
Edit1 den wert 20 eingebe
im
Edit2 den wert 10 eingebe
im
Edit3 den wert 2 eingebe

sollte doch das resultat 5 sein! also, 20-10 :2 = 5
bei mir kommt aber 15 raus

Matze 23. Feb 2005 21:25

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Dann hast du die Klammern vergessen, Delphi rechnet auch Punkt vor Strich ;)

Binärbaum 23. Feb 2005 21:26

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Zitat:

Zitat von Duffy Duck
:-D
ok supi, hat soweit funktioniert, nur....

wenn ich nun im
Edit1 den wert 20 eingebe
im
Edit2 den wert 10 eingebe
im
Edit3 den wert 2 eingebe

sollte doch das resultat 5 sein! also, 20-10 :2 = 5
bei mir kommt aber 15 raus

Das liegt an der Regel "Punkt- vor Strichrechnung".
Dann musst du halt die Rechnung anders klammern, damit erst die Subtraktion und danach die Division ausgeführt wird.

MfG
Binärbaum

Duffy Duck 23. Feb 2005 21:30

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
ich danke euch für eure gedult, habe aber wirklich keinen plan, wie ich das machen soll...
möchte eure Nerven ja nicht strapazieren :oops:

Matze 23. Feb 2005 21:36

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
SO, wie Sharky es geschrieben hat:

Delphi-Quellcode:
ergebniss := (zahl1 + zahl2) / zahl3; // Die Berechnung
.

Duffy Duck 23. Feb 2005 21:40

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
also jetzt verstehe ich gar nichts mehr... denn genau so habe ich es doch gemacht.

wie wäre es, wemm ich nun ein weiteres TEdit einfüge als ergebnis und dann aus diesem die division durchführen lasse??? könnte es so funktionieren?

Matze 23. Feb 2005 21:45

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Du kannst es auch so machen, also als Beispiel:

Delphi-Quellcode:
Label1.Caption := FloatToStr((StrToInt(Edit1.Text) + StrToInt(Edit2.Text)) / StrToInt(Edit3.Text));
Klar, dazu muss noch ein Label auf's Formular gezogen werden.

Duffy Duck 23. Feb 2005 22:33

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
es ist ja so banal (stirnklatsch), habe den fehler gefunden.... es sollte zahl1 - zahl2 und nicht + sein.

jetzt versuche ich noch folgendes:

Edit3 Wert sollte als Zahl eigegeben werden, soweit so gut (als bsp. 20), der wert der gerechnet werden sollte müsste aber im hintergrund 0,02 sein. also um 3 kommastellen nach links versetzt....

Ich danke wirklich allen die sich die Zeit (für meine lächerlichen Anfänger Fragen) genommen haben!!!!

Duffy Duck

Matze 24. Feb 2005 08:44

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Zitat:

Zitat von Duffy Duck
Edit3 Wert sollte als Zahl eigegeben werden, soweit so gut (als bsp. 20), der wert der gerechnet werden sollte müsste aber im hintergrund 0,02 sein. also um 3 kommastellen nach links versetzt....

Das wären aber 2 Kommastellen. Lösen kann du das doch auch ganz leicht:

Delphi-Quellcode:
var Zahl3_1: real;

Zahl_1 := StrToInt(Edit3.Text) / 100

Duffy Duck 24. Feb 2005 12:07

Re: Edit Felder mit Rechenfunktionen erstellen aber wie?
 
Besten Dank, :thumb:

hat funktioniert... :hello: :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 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