Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Immer +1 nehmen (https://www.delphipraxis.net/128910-immer-1-nehmen.html)

luckys41 9. Feb 2009 09:12


Immer +1 nehmen
 
Guten Tag liebe Delphi-Praxis Community :-),

Der Client sendet an den Server in einem Timer immer eine 1 mit dem Code :

Code:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ClientSocket1.Socket.SendText('1');
end;
Es kommt auch perfekt an aber ich will es addieren mit dem Edit1.text hier mal der Code vom Server

Code:
var
  str: string;
  zahl1:real;
  zahl2:real;
  ergebnis:real;
begin
 str := Socket.ReceiveText;
 zahl1 := strtofloat(edit1.text);
 zahl2 := strtofloat(str);
 ergebnis := zahl1+zahl2;
 edit3.text := floatToStr(ergebnis);
Es kommt der Fehler :
Code:
---------------------------
Project1
---------------------------
'' is not a valid floating point value.
---------------------------
OK  
---------------------------
Wie kann mann soetwas besser umsetzen?

Möchte halt immer das es immer +1 in 4 Sekunden addiert.

himitsu 9. Feb 2009 09:16

Re: Immer +1 nehmen
 
Zitat:

Zitat von luckys41
Es kommt auch perfekt an aber ich will es addieren mit dem Edit1.text hier mal der Code vom Server

Wo tritt denn der Fehler auf? (bei Zahl1 oder Zahl2)

irgendwo muß ja nichts drin sein, lauf Fehlermeldung.
Delphi-Quellcode:
zahl1 := strtofloat(edit1.text);
zahl2 := strtofloat(str);

Bernhard Geyer 9. Feb 2009 09:17

Re: Immer +1 nehmen
 
Auch wenn ich eine GUI in einem Server nicht sehr sinnvoll sehe (Außer zu debugzwecken), so schau dir für dein problem mal StrToFloatDef() in der Onlinehilfe an. (Ein leerer String ist nunmal keine Zahl).

luckys41 9. Feb 2009 09:17

Re: Immer +1 nehmen
 
Der Fehler tritt auf bei zahl2 := strtofloat(str);

nahpets 9. Feb 2009 09:20

Re: Immer +1 nehmen
 
Hallo,

das sieht so aus, als würdest Du hier
Delphi-Quellcode:
str := Socket.ReceiveText;
nichts erhalten.

Sherlock 9. Feb 2009 09:22

Re: Immer +1 nehmen
 
Zitat:

Zitat von nahpets
Hallo,

das sieht so aus, als würdest Du hier
Delphi-Quellcode:
str := Socket.ReceiveText;
nichts erhalten.

Zumindest etwas anderes als nur eine Zahl.

Sherlock

himitsu 9. Feb 2009 09:23

Re: Immer +1 nehmen
 
Zitat:

Zitat von nahpets
das sieht so aus, als würdest Du hier ... nichts erhalten.

Zitat:

Zitat von luckys41
Es kommt auch perfekt an aber

drum hatte ich ja gefragt :angel2:

luckys41 9. Feb 2009 09:31

Re: Immer +1 nehmen
 
Code:
edit2.Text := str;
 zahl1 := strtofloat(edit1.text);
 zahl2 := strtofloat(edit2.text);
ergebnis := zahl1+zahl2;
edit3.text := floatToStr(ergebnis);
ein bisschen umgeschrieben.

Im Edit3 steht dann immer nur 11 und dann kommt der Error.

nahpets 9. Feb 2009 09:54

Re: Immer +1 nehmen
 
Hallo,
Zitat:

Zitat von luckys41
Im Edit3 steht dann immer nur 11 und dann kommt der Error.

Das hieße doch, dass der Fehler erst später auftritt. Was kommt den in Deinem Quellcode nach der Zuweisung zu Edit3.Text?

luckys41 9. Feb 2009 09:56

Re: Immer +1 nehmen
 
Entschuldigen sie das ich mich falsch ausgedrückt habe, der Fehler tritt auf bei der Berechnung.

Nach Edit3 kommt kein Code mehr.

Sereby 9. Feb 2009 10:10

Re: Immer +1 nehmen
 
Delphi-Quellcode:
edit2.Text := str;
zahl1 := strtofloat(edit1.text);
zahl2 := strtofloat(edit2.text);
ergebnis := Inc(zahl1,zahl2);
edit3.text := floatToStr(ergebnis);

nahpets 9. Feb 2009 10:14

Re: Immer +1 nehmen
 
Hallo,
Zitat:

Zitat von luckys41
Entschuldigen sie das ich mich falsch ausgedrückt habe, der Fehler tritt auf bei der Berechnung.

Nach Edit3 kommt kein Code mehr.

wie kommt denn dann die 11 nach Edit3.Text, ist Edit3.Text schon entsprechend vorbelegt?

luckys41 9. Feb 2009 13:13

Re: Immer +1 nehmen
 
Ok es funktioniert mit dem Code :

Code:
str := Socket.ReceiveText;
   zahl1 := strtofloat(edit1.text);
 zahl2 := strtofloat(str);
ergebnis := zahl1+zahl2;
edit3.text := floatToStr(ergebnis);
Aber ich will das es immer +1 genommen wird und nicht auf 2 bleibt

In dem Client ist ein Timer von 4 Sekunden und jede 4te Sekunde sendet er eine 1 an den Server.

Aber wie kann ich es realisieren das es immer +1 genommen wird?

Mit freundlichen Grüßen,
luckys41

SirTwist 9. Feb 2009 13:24

Re: Immer +1 nehmen
 
Hi,

Zitat:

Zitat von luckys41
Aber wie kann ich es realisieren das es immer +1 genommen wird?

wieso machst Du diese grauenhaften Konvertierungen von String nach Zahl und zurück? Speicher die Anzahl der "1"en in einer lokalen Variable, die du jedesmal um eins erhöhst, wenn Du vom Server etwas bekommen hast. Und diese Zahl schreibst Du dann in Dein Edit-Feld. Wozu ist das eigentlich ein Edit-Feld? Soll das irgendwer ändern können?

Delphi-Quellcode:
  str := Socket.ReceiveText;
  zahl1 := StrToFloatDef(str, 0);
  Anzahl := Anzahl + zahl1;
  Edit1.Text := FloatToStr(Anzahl);
Gruß,
Sir Twist

luckys41 9. Feb 2009 13:39

Re: Immer +1 nehmen
 
Danke, für die Antwort allerdings bleibt die 1 stehen in dem Edit Feld :/.

Ich verstehe es nicht mit der Anzahl es ist doch ein String und welche Zahl beinhaltet er?

lg

mquadrat 9. Feb 2009 13:49

Re: Immer +1 nehmen
 
Wie du oben siehst wird ein "FloatToStr(Anzahl)" gemacht. Sprich Anzahl ist kein String, sondern ein Float. Anzahl muss an einer übergeordneten Stelle deklariert werden und nicht in der Methode selber. Sonst fängt er immer mit 0 an.

nahpets 9. Feb 2009 13:52

Re: Immer +1 nehmen
 
Hallo,
bitte teile uns mal mit, was da jeweils bei rauskommt:
Delphi-Quellcode:
  str := Socket.ReceiveText;
ShowMessage(str);
  zahl1 := StrToFloatDef(str, 0);
ShowMessage(FloatToStr(Zahl1));
  Anzahl := Anzahl + zahl1;
ShowMessage(FloatToStr(Anzahl));
  Edit1.Text := FloatToStr(Anzahl);
ShowMessage(Edit1.Text);
Falls hier
Delphi-Quellcode:
  zahl1 := StrToFloatDef(str, 0);
ShowMessage(FloatToStr(Zahl1));
immer 0 rauskommt, ändere das mal bitte in
Delphi-Quellcode:
  zahl1 := StrToFloatDef(str, 1);
ShowMessage(FloatToStr(Zahl1));
Sollte str immer leer sein, dann mache es so:
Delphi-Quellcode:
Edit1.Text := FloatToStr(StrToFloatDef(Edit1.Text,1));

luckys41 9. Feb 2009 14:54

Re: Immer +1 nehmen
 
Es kommt immer eine Messsage Box mit einer 1.

nahpets 9. Feb 2009 15:15

Re: Immer +1 nehmen
 
Hallo,

wo hast Du Anzahl definiert? Als globale Variabel oder in der Methode, die die Addition vornehmen soll?
Anzahl muss global definiert sein und einmal mit 0 initialisiert werden.

Oder probiere mal, ob Du ausschließlich mit
Delphi-Quellcode:
Edit1.Text := FloatToStr(StrToFloatDef(Edit1.Text,1) + 1);
auskommst. Von der Aufgabenstellung her, sollte das eigentlich reichen.

SyntaxXx 9. Feb 2009 21:33

Re: Immer +1 nehmen
 
Also im einfachsten falle wäre es so:

x : x + 1

isilive 10. Feb 2009 00:33

Re: Immer +1 nehmen
 
Zitat:

Zitat von SyntaxXx
Also im einfachsten falle wäre es so:

x : x + 1

:drunken: Gute Idee!! :mrgreen:

Nein, im Ernst - warum nicht so?

Delphi-Quellcode:
var a:integer;
....
begin
  str := Socket.ReceiveText;
  if str='1' then inc(a);
  ShowMessage(inttostr(a));
end
Edit: danke m²

mquadrat 10. Feb 2009 09:35

Re: Immer +1 nehmen
 
Zitat:

Zitat von isilive
Delphi-Quellcode:
var a:integer;
begin
  str := Socket.ReceiveText;
  if str='1' then inc(a);
  ShowMessage(inttostr(a));
end

Da würde immer 1 rauskommen, wenn du a da deklarierst wo es gerade steht ;)


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