Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Inkompatible Typen: 'String' und 'Real'


elzer - Mi 24.09.08 17:21
Titel: Inkompatible Typen: 'String' und 'Real'
Hi Leute also ich habe kurz eine Frage und zwar:
Also ich versuche einen Button zu programmieren, der alle leeren Edit-Feldet ausfüllt, also ich schreib euch mal den Quelltext hin:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Button3Click(Sender: TObject);
var a,b,c,e,x:real;
begin
  a:=strtofloat(edta.text);
  b:=strtofloat(edtb.text);
  c:=strtofloat(edtc.text);
  e:=strtofloat(edte.text);
  x:=strtofloat(edtx.text);
  if a='' then edta.Text:='1';
  if b='' then edtb.text:='1';
  if c='' then edtc.Text:='0';
  if e='' then edte.text:='0';
  if x='' then edtx.text:='1';
end;


Ich habe keine Ahnung was ich falsch mache, es kommt die Fehlermeldung: Inkompatible Typen:'String' und 'Real' .
Wäre cool wenn ihr mir heut noch helfen könnt, da ich das Programm eigentlich für morgen brauche.
Danke für eure Hilfe,
Gruß Chris

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.


GericasS - Mi 24.09.08 17:28

Du könntest folgendes machen :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button3Click(Sender: TObject);
var a,b,c,e,x:real;
begin
  a:=strtofloatDef(edta.text,0);
  b:=strtofloatDef(edtb.text,0);
  c:=strtofloatDef(edtc.text,0);
  e:=strtofloatDef(edte.text,0);
  x:=strtofloatDef(edtx.text,0);
end;


Dann steht in der Variable bei einem leeren edit feld 0


pennyWISE - Mi 24.09.08 17:29

tut mir leid, mir erschließt sich der sinn deines Programms nicht so recht...

Also um deine Frage zu beantworten: Du versuchst, eine Variable, die du als Kommazahl deklariert hast, zu vergleichen mit einem String. Mit andern worten:
du kannst zwar if a=0 schreiben, aber nicht if a=''

daher kommt der Fehler ... Wenn du wissen willst, ob das Edit leer ist, und deswegen a='' abfragst, würde ich dir empfehlen auch das edit abzufragen .. also if edta.text=''


elzer - Mi 24.09.08 20:46

der sinn des programms ist ganz einfach, da ich nur einen Button benutzen möchte um mehrere Stellen zu berechnen, wollte ich einen Button einfügen der die leeren Editfelder automatisch ausfüllt.
Danke für die Hilfe aber anstatt der Variable habe ich bereits das Editfeld angegeben also
if edta.Text:='' then ....
da kam dann Ausdruckstyp muss BOOLEAN sein

Das war im übrigen die erste Variante die ich ausprobiert habe...


jaenicke - Mi 24.09.08 20:52

:= ist eine Zuweisung, nimm mal den Doppelpunkt weg ;-).


elzer - Mi 24.09.08 21:02

Danke für die schnelle Antwort.
':=' erwartet, aber '=' gefunden


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button3Click(Sender: TObject);
begin
if edta.Text='' then edta.Text='1';
if edtb.text='' then edtb.text='1';
if edtc.Text='' then edtc.Text='0';
if edte.text='' then edte.text='0';
if edtx.text='' then edtx.text='1';
end;


Wenn ich das im Quelltext stehen habe.

Moderiert von user profile iconChristian S.: Quote- durch Delphi-Tags ersetzt


Xentar - Mi 24.09.08 21:05

Dann schreib halt, wie es da steht, ein := statt =
Bei einer If-Abfrage = bei einer Zuweisung eines Werte :=

Grundlagen...


jaenicke - Mi 24.09.08 21:11

user profile iconelzer hat folgendes geschrieben:
Danke für die Hilfe aber anstatt der Variable habe ich bereits das Editfeld angegeben also
if edta.Text:='' then ....
da kam dann Ausdruckstyp muss BOOLEAN sein
user profile iconjaenicke hat folgendes geschrieben:
:= ist eine Zuweisung, nimm mal den Doppelpunkt weg ;-).
Und wenn du es auch nur da machst dann geht es auch.

Formatiere deinen Quelltext einfach so, dass nur eine Anweisung in einer Zeile steht, dann siehst du auch wo der Fehler liegt...

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button3Click(Sender: TObject);
begin
  if edta.Text = '' then
    edta.Text := '1';
  if edtb.Text = '' then
    edtb.Text := '1';
  if edtc.Text = '' then
    edtc.Text := '0';
  if edte.Text = '' then
    edte.Text := '0';
  if edtx.Text = '' then
    edtx.Text := '1';
end;
So kommt die Fehlermeldung auch nicht beim if sondern eine Zeile später, wenn da = statt := benutzt wird und umgekehrt.


elzer - Mi 24.09.08 21:11

Ja ich weiß.
Aber das löst mein Problem nicht. Danke für deine Mühe doch ich versuche ja immernoch einen Button zu programmieren, der nur in das leere Feld eine Zahl (1 bzw 0) einfügt.
Wenn es nicht zu viel verlangt ist, könntest du mir vielleicht einen Quelltext schreiben mit dem du meinst, dass es geht?
Wäre sehr hilfreich. =)

Hier nochmal meinen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button3Click(Sender: TObject);
begin
if edta.Text:='' then edta.Text:='1';
if edtb.text:='' then edtb.text:='1';
if edtc.Text:='' then edtc.Text:='0';
if edte.text:='' then edte.text:='0';
if edtx.text:='' then edtx.text:='1';
end;


Fehlermeldung war: Ausdruckstyp muss BOOLEAN sein

Ich danke für jede Hilfe =)


Xentar - Mi 24.09.08 21:13

user profile iconXentar hat folgendes geschrieben:
Dann schreib halt, wie es da steht, ein := statt =
Bei einer If-Abfrage = bei einer Zuweisung eines Werte :=


Grundlagen!

und user profile iconjaenicke hat dir doch schon den Code gepostet..


Marc. - Mi 24.09.08 21:14

user profile iconXentar hat folgendes geschrieben:
user profile iconXentar hat folgendes geschrieben:
Dann schreib halt, wie es da steht, ein := statt =
Bei einer If-Abfrage = bei einer Zuweisung eines Werte :=


Grundlagen!

Durcharbeiten! [http://christian-stelzmann.de/index_tutorials_crashkurs.html] :)


jaenicke - Mi 24.09.08 21:15

Ich habe ja ein Sekündchen vor dir die Antwort schon gepostet. Das sollte wohl helfen.

Aber an dieser Stelle mal der Hinweis auf den Crashkurs von Christian:
http://crashkurs.christian-stelzmann.de
Denn dir fehlen die absoluten Grundlagen.

Wichtig ist jedenfalls eine gute Formatierung und Einrückung des Quelltext von Anfang an, dann siehst du viele Fehler auch sofort.


elzer - Mi 24.09.08 21:17

mhh..
den Code den er gepostet hat war aber das er die Zahlen von anfang an in das Feld schreibt. Ich wollte ja die Bedingung das wenn das Feld leer is das er dann was darein schreibt, wenn allerdings in dem Feld etwas steht, dann soll er das so lassen wie es ist. Hoffe es ist wenigstens etwas verständlich geschrieben. Werde die Grundlagen in der kommenden Woche durcharbeiten, doch da ich es bis morgen brauche ist ddas ein wenig kurzfristig xD.
Naja wenn irh mir nicht mehr helfen könnt bedanke ich mich ganz herzlich für die shcnelle Hilfe.
Lg Chris


Xentar - Mi 24.09.08 21:20

user profile iconelzer hat folgendes geschrieben:
den Code den er gepostet hat war aber das er die Zahlen von anfang an in das Feld schreibt. Ich wollte ja die Bedingung das wenn das Feld leer is das er dann was darein schreibt, wenn allerdings in dem Feld etwas steht, dann soll er das so lassen wie es ist.

Genau das tut der Code?! Dafür die if-Abfragen.


jaenicke - Mi 24.09.08 21:20

Der Code macht genau das... Wenn leer, dann 1 oder 0, je nach dem, rein. Probiers aus...

Ach ja: eine andere Variante der Lösung:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Button3Click(Sender: TObject);

  procedure CorrectEmptyEdit(uEdit: TEdit; uFillEmptyEditWith: String);
  begin
    if uEdit.Text = '' then
      uEdit.Text := uFillEmptyEditWith;
  end;

begin
  CorrectEmptyEdit(edta, '1');
  CorrectEmptyEdit(edtb, '1');
  CorrectEmptyEdit(edtc, '0');
  CorrectEmptyEdit(edte, '0');
  CorrectEmptyEdit(edtx, '1');
end;


elzer - Mi 24.09.08 21:24

Tut mir Leid hab deine Posts überlesen *peinlich* xD
kommt ncih mehr vor, DANKE für eure Hilfe =).
Morgen fange ich mit den Grundlagen an.
Danke =)