Automatisches Rechnen

Für Fragen von Einsteigern und Programmieranfängern...
TheBeer
Beiträge: 22
Registriert: Sa 30. Aug 2014, 19:33

Re: Automatisches Rechnen

Beitrag von TheBeer »

dann kommt unit1.pas(65,24) Error: Wrong number of parameters specified for call to "FloatToStr"


selbe Zeile ^^ ich glaub ich starre heut schon zulange hier rauf

exc-jdbi
Beiträge: 64
Registriert: So 3. Aug 2014, 03:37

Re: Automatisches Rechnen

Beitrag von exc-jdbi »

es funkst auch so .. ist aber nicht perfekt, vorallem wen du statt eine zahle einen buchstaben eingibst

Code: Alles auswählen

 
begin
  try
  TryStrToFloat(edit1.caption,dblZahl);
   Label9.Caption:=FloatToStr((dblZahl),ffNumber,12,3);
   except
     Edit1.caption:='Bitte nummer eingeben';
   end
end;
 

Hier noch ein Tip zum TryStrToFloat
http://www.delphipraxis.net/92520-ueber ... cht-2.html


Ich muss leider gehen. Schönen Nachmittag noch.


Freundliche Grüsse

exc-jdbi
Zuletzt geändert von exc-jdbi am So 31. Aug 2014, 15:33, insgesamt 1-mal geändert.

TheBeer
Beiträge: 22
Registriert: Sa 30. Aug 2014, 19:33

Re: Automatisches Rechnen

Beitrag von TheBeer »

selber fehler leider :( irgendwas is hier verkehrt glaube ich fange nochmal ganz von vorn an ;) manchmal hilft das ja

jetzt zeit er mir das Label9.Caption:=FloatToStr((dblZahl),ffNumber,12,3); als fehler an

TheBeer
Beiträge: 22
Registriert: Sa 30. Aug 2014, 19:33

Re: Automatisches Rechnen

Beitrag von TheBeer »

Ich danke dir ganz ganu dolle für deine Hilfe ^^ ich habs entlich :D

Code: Alles auswählen

procedure TForm1.Edit1Change(Sender: TObject);
begin
 
if not TryStrToFloat(edit1.text,h) then
 begin
  edit1.text:='0';
 end;
 
 begin
  ergebnis:=StrToFloat(Edit1.Text)*1200;
  Label9.Caption:=FloatToStr(ergebnis);
 end;
end; 

so funktioniert es genau so wie es sein soll

exc-jdbi
Beiträge: 64
Registriert: So 3. Aug 2014, 03:37

Re: Automatisches Rechnen

Beitrag von exc-jdbi »

So ich habs jetzt auch noch schnell gemacht.

Hier meine Variante:

Code: Alles auswählen

 
unit Unit1;
{$mode objfpc}{$H+}
interface
uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    procedure Edit1Change(Sender: TObject);
    function Berechnung(dbl:double):double;
  private
  public
  end;
 
var Form1: TForm1;
 
implementation
{$R *.lfm}
procedure TForm1.Edit1Change(Sender: TObject);
var strEdit:string;
    dblZahl:Double;
    notEvent:TNotifyEvent;
begin
  if trim(Edit1.Text)='' then
    if length(trim(self.Edit1.Text))=0 then
    begin
      notEvent:=self.Edit1.OnChange;
      self.Edit1.OnChange:=nil;
      self.Edit1.Text:='0';
      self.label1.caption:=self.Edit1.Text;
      self.Edit1.OnChange:=notEvent;
      exit;
    end;
  if length(trim(self.Edit1.Text))>0 then
  begin
    strEdit:=trim(self.Edit1.Text);
    if TryStrToFloat(strEdit,dblZahl) then
    begin
      self.Label1.caption:=FloatToStrF(Berechnung(dblZahl),ffNumber,12,3);
    end
    else self.Label1.caption:='#Nummer#';
  end;
end;
function TForm1.Berechnung(dbl: double): double;
begin
  result:=dbl*2;
end;
end.
 
Freundliche Grüsse

exc-jdbi

TheBeer
Beiträge: 22
Registriert: Sa 30. Aug 2014, 19:33

Re: Automatisches Rechnen

Beitrag von TheBeer »

Guten Abend exc-jdbi, :)

ich habs gestern Nachmittag irgendwie selbst hin bekommen gehabt :D also zumindest macht er das was er soll und es kommt kein Fehler.

So sieht das mom bei mir aus....

Code: Alles auswählen

procedure TForm1.Edit1Change(Sender: TObject);
 
begin
 
if not TryStrToFloat(edit1.text,h) then
 begin
  edit1.text:='0';
 end;
 
 begin
  ergebnis:=StrToFloat(Edit1.Text)*1200;
  Edit6.Text:=FloatToStr(ergebnis);
  Edit6.Text:=Format('%0.0n',[ergebnis]);
 end;
end;   

so nun hab ich aber irgendwie ein problem mit Lazarus :D ich hau das ding gleich eine rein ^^

Code: Alles auswählen

procedure TForm1.Edit11Change(Sender: TObject);
var
 
  a,b,c,d,e,f:real;
 
begin
 
if not TryStrToFloat(edit11.text,h) then
 begin
  edit11.text:='0';
 end;
 
 begin
 a:=StrToFloat(Edit6.Text);
 b:=StrToFloat(Edit7.Text);
 c:=StrToFloat(Edit8.Text);
 d:=StrToFloat(Edit9.Text);
 e:=StrToFloat(Edit10.Text);
 
 f:=a+b+c+d+e;
 
 Edit11.Text:=FloatToStr(f);
 Edit11.Text:=Format('%0.0n',[f]); 
 
 end;
 
end;   
Eigentlich soll Edit 11 nix anderes machen als die Summe der anderen Edits ausgeben. Keine Fehlermeldung beim compilieren und nix. aber er gibt einfach nix aus :D
also das Edit 11 bleibt leer :D die Ratte hab schon wie wild drauf rumm geklickt :D aber nix


mfg Andreas

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Automatisches Rechnen

Beitrag von theo »

Du musst wilder clicken!!
Tausend mal pro Minute mindestens! :mrgreen:

Kann es sein, dass Edit11.OnChange nicht das geeignete Ereignis ist?

TheBeer
Beiträge: 22
Registriert: Sa 30. Aug 2014, 19:33

Re: Automatisches Rechnen

Beitrag von TheBeer »

hab ich auch schon überlegt aber weiß auch nicht mehr was ich noch nehmen soll ^^ nur das change bounce oder wie das jetzt heißt vielleicht noch

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Automatisches Rechnen

Beitrag von m.fuchs »

Naja, mein Tipp wäre jetzt: schreib dir erst einmal sauber auf, was du erreichen möchtest. Und dann teilst du uns das mit. Bitte auch sauber geschrieben und in verständlichem Deutsch.
Dann können wir dir vielleicht helfen.

Irgendwie haben sich deine Anforderung mit jeder Nachricht geändert. Vielleicht sind deine Beiträge auch nur auf Grund der Unleserlichkeit für die anderen unverständlich. Und vielleicht planst und programmierst du so, wie du auch Texte schreibst. In all diesen Fällen wirst du nicht zum Ziel kommen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

exc-jdbi
Beiträge: 64
Registriert: So 3. Aug 2014, 03:37

Re: Automatisches Rechnen

Beitrag von exc-jdbi »

Guten Abend Andreas

Ich kann m.fuchs nur recht geben. Also nicht das ich niemandem zutraue, dass er eine Vorstellung komplett aus dem "Kopf" kann.

Aber in der Anfangsphase wäre es sicher ziemlich sinnvoll sich kurz hinzusetzen, und ein kleines Konzept zu erarbeiten. Dies ist nähmlich meistens schneller gemacht, als das Programm selber. Ansonsten ist man ständig am improvisieren und man sieht das Ziel nicht klar vor Augen.

Hier eine Möglichkeit wie ich es machen würde. Ungetestet
Sofern du die Summe im Label11 willst, so nimm einfach das Label11 dafür.
Vorteilhaft wäre auch die OnChange der Edit11 zu unterdrücken. Es kommt halt darauf an, was du willst machen.

Code: Alles auswählen

 
procedure TForm1.Edit1Change(Sender: TObject);
begin
  //Deine Berechnung
  .......
  .......
  self.Edit11.Text:=FloatToStrF(CalcAllEdits,ffNumber,12,3);
end;
procedure TForm1.Edit2Change(Sender: TObject);
begin
  //Deine Berechnung
  .......
  .......
  self.Edit11.Text:=FloatToStrF(CalcAllEdits,ffNumber,12,3);
end;
 
.....
 
.....
 
function TForm1.CalcAllEdits:Double;
begin
  result:=IsNumericZero(trim(self.Edit1.Text))+
          IsNumericZero(trim(self.Edit2.Text))+
	       IsNumericZero(trim(self.Edit3.Text))+
	       .........
	       .........
	       IsNumericZero(trim(self.Edit10.Text));
end;
function TForm1.IsNumericZero(s: string):Double;
var  dbl:Double;
begin
  if TryStrToFloat(s,dbl) then
  begin
    result:=dlb;
  end
  else result:=0;
end;
 
Freundliche Grüsse

exc-jdbi

TheBeer
Beiträge: 22
Registriert: Sa 30. Aug 2014, 19:33

Re: Automatisches Rechnen

Beitrag von TheBeer »

Danke erst mal für deine Hilfe,

So falls ich mich nicht verständlich ausdrücken kann probier ich das noch einmal.

Also das Program im groben habe ich schon in einer Excel Datei fertig. Daher weiß ich genau wie es werden soll und aussehen soll.

Im groben Zusammengefasst: Es soll Werte zusammen rechnen ( Für unseres Game was wir spielen sind das dann die Verluste). Die soll es dann wie schon geschehen in Ressourcen umwandeln. Was er ja auch macht, die Tausender Trennung macht er jetzt auch super ( was gar nicht so leicht war ^^ aber das kannte ich noch so halb von damals)

Nun wollte ich in Edit11 einfach die Edit's 6-10 zusammen rechnen (also alle Verluste in Ressourcen) und die Summe daraus bilden. Und dann ist das Programm eigentlich schon fast fertig :) der Rest ist dann nichts anderes wie von Edit1 bis Edit10 geschehen.

Früher kannte ich das mal so bzw is mir so das man Edits einfach zusammen rechnen konnte indem man jeden eine Variable zuweist und diese dann addiert. Ich will ja die Ergebnisse aus Edit6-10 zusammen rechnen. Deswegen hatte ich das so angefangen:

var a,b,c,d,e,f: real;

(Jede Variable ein Edit zu gewiesen) und dann halt f:=a+b+c+d+e;

Das ganze habe ich dann wieder umgewandelt in ein String Wert der mir ausgegeben werden sollte in Edit1.Text. Und da ist der Fehler denn es wird nichts ausgegeben. Es ist kein Fehler im Code laut Compiler und ich find den einfach nicht. Wahrscheinlich so einfach aber vielleicht wisst ihr ja selbst, die einfachsten Sachen sind manchmal die was am längsten dauern.


(Der Plan bzw das Konzept ist schon vor ein paar Monaten in einer Excel Datei passiert, ich finde viel besser kann man eine Vorbereitung eigentlich nicht machen)


mfg Andreas und eine schöne Nacht euch allen

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Automatisches Rechnen

Beitrag von hde »

TheBeer hat geschrieben:var a,b,c,d,e,f: real;
(Jede Variable ein Edit zu gewiesen) und dann halt f:=a+b+c+d+e;
Rechnen ja, aber wann und wo?
Ein Programm braucht eine Logik, einen Programmablauf. Und dafür hast du offenbar kein Konzept, dein Excell nützt dir dabei nichts. Lerne Programmieren.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Automatisches Rechnen

Beitrag von mse »

Ich empfehle hier nochmal das bereits in der Delphi-PRAXIS genannte erste Kapitel von "Programmieren macht Spass!" zur Lektüre.
http://www.delphipraxis.net/181630-auto ... ost1270318

exc-jdbi
Beiträge: 64
Registriert: So 3. Aug 2014, 03:37

Re: Automatisches Rechnen

Beitrag von exc-jdbi »

Guten Morgen

Also ich finde das nur peinlich.

Die selbe Frage an mehreren Orten gleichzeitig zu stellen. Wenn ich das gesehen hätte, hätte ich mir die Mühe gespart weitere Antworten zu schreiben. Ich seh nähmlich nicht ein, warum sich noch mehr Forums mit diesem Thema beschäftigen sollen.

@Andreas. Ich denke du findest sicher einen Weg, dein Vorhaben jetzt umzusetzten.

Freundliche Grüsse

Exc-jdbi

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Automatisches Rechnen

Beitrag von m.fuchs »

Erst einmal gebe ich exc-jdbi völlig recht. Und wenn du schon die Frage in einem weiteren Forum gestellt hast, dann schreib das wenigstens dazu.

Nun zu einem Zitat von dir:
TheBeer hat geschrieben:[...]Daher weiß ich genau wie es werden soll und aussehen soll.[...]
Das bezweifele ich. Du möchtest in deinem Edit11 ein Ergebnis haben und willst dafür das Ereignis nutzen, was bei Änderungen in Edit11 ausgelöst wird. Dann klickst du auch noch wild darin herum und erwartest das etwas passiert. Das klingt für mich nach völliger Planlosigkeit.

Mal dir dein Formular auf ein Blatt Papier. Schreib darunter alles auf was passieren soll, wenn der Benutzer etwas macht. In detaillierter Form.
Beispiel:

Code: Alles auswählen

Wenn der Benutzer eine Eingabe in Edit1, Edit2 oder Edit3 macht...
...sollen die Eingabe darauf geprüft werden, ob sie eine Zahl ist.
 
Wenn die Eingabe keine Zahl ist...
...soll der Benutzer eine Fehlermeldung bekommen und der Inhalt vom jeweiligen Edit-Feld auf '0' gesetzt werden.
 
Wenn sich der Inhalt von Edit1, Edit2 oder Edit3 ändert...
...sollen die Inhalte in Zahlen umgewandelt und addiert[1] werden. Das Ergebnis soll in den Inhalt von Edit 4 geschrieben werden.
 
[...]
([1] ich vermute mal, dass du addieren mit dem Ausdruck "zusammenrechnen" meinst)

Dann (und nur dann) hast du tatsächlich einen Plan wie dein Programm funktionieren wird. In späteren Zeiten, wenn du mehr Erfahrung hast, kannst du diese Arbeitsschritte auch weniger ausführlich formulieren. Aber bis dahin ist es noch eine Weile.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten