Variable auf Eingabe prüfen / Ausgabe in TEdit

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Foxx
Beiträge: 3
Registriert: Do 26. Jan 2012, 21:10

Variable auf Eingabe prüfen / Ausgabe in TEdit

Beitrag von Foxx »

Hallo Forum!

Bin erst ziemlich kurz bei Lazarus dabei und habe mit einem Kreisrechner nun angefangen. Da bei diesem die Eingabe und Ausgabe über die selben Textboxen erfolgt, muss geprüft werden,
ob auch wirklich nur in 1ner der 4 textboxen (umfang, flächeninhalt, radius, durchmesser) eine Zahl vom Benutzer eingegeben wird.

a, b, c und d sind den Textboxen edit1.text bis edit4.text zugeordnet!

Bisher sieht der betroffene Abschnitt so aus:


Code: Alles auswählen

If a=[] then
         If b=[] then
            If c=[] then
               If d=[] then
                  begin
                  showmessage ('Genau eine Variable muss gegeben sein!');
                  end;

Nun zum Fehler. Lazarus spuckt beim kompilieren den fehler aus:

unit1.pas(71,12) Error: Incompatible types: got "Empty Set" expected "LongInt"

Wäre klasse wenn mir jemand helfen könnte :)

mfg
Foxx
Zuletzt geändert von Foxx am Sa 28. Jan 2012, 13:59, insgesamt 1-mal geändert.

baba
Beiträge: 265
Registriert: Mi 4. Apr 2007, 17:47

Re: Mit IF eine Variable auf Eingabe (leere Menge) prüfen?

Beitrag von baba »

if length(edit1.text) > 0 then ...

Baba.

downloaditweb
Beiträge: 27
Registriert: Do 28. Jan 2010, 13:24
OS, Lazarus, FPC: openSuse Leap 42.3 (L 1.8 FPC 3.0.4)
CPU-Target: 64Bit

Re: Mit IF eine Variable auf Eingabe (leere Menge) prüfen?

Beitrag von downloaditweb »

Oder auch

Code: Alles auswählen

if edit1.text = '' then

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Mit IF eine Variable auf Eingabe (leere Menge) prüfen?

Beitrag von MAC »

Hier die genau Erklärung:

Edit1.Text ist vom Typ "String", das bedeutet nix anderes als das in Edit1.Text ein text gespeichert ist.
Willst du jetzt diesen in einer If abfrage vergleichen musst du ihn mit einem Anderen Text vergleichen (Du kannst ja auch nicht Äpfel mit Autos vergleichen).
Einen solchen Strig schreibt man im Programm mit Anführungsstrichen (den hier ' ) einmal am anfang und am ende

Code: Alles auswählen

Edit1.Text := 'Hello World';
downloaditweb vergleicht den Text in den Edits mit dem Text ''. Zwischen den Anführungszeichen befindet sich nichts, also wenn das Wahr ist ist das Edit leer.
baba vergleicht dagegen die Länge des Edit.text. Wenn die Länge (die funktion length() gibt eine zahl zurück also wird auch mit einer zahl verglichen) zurück.
Beide Versionen machen genau das gleiche.

Edit: Fehler unterlaufen siehe 1 post weiter unten.
Zuletzt geändert von MAC am Sa 28. Jan 2012, 12:58, insgesamt 1-mal geändert.

Code: Alles auswählen

Signatur := nil;

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1617
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Mit IF eine Variable auf Eingabe (leere Menge) prüfen?

Beitrag von corpsman »

MAC hat geschrieben:Hier die genau Erklärung:
Beide Versionen machen genau das gleiche.
Machen sie nicht, sie machen genau das Gegenteil

Code: Alles auswählen

if edit1.text = '' then begin
// Wird ausgeführt wenn das Edit Leer ist
end;
if length(edit1.text) > 0 then begin
// Wird ausgeführt wenn das Edit NICHT Leer ist
end;
--
Just try it

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Mit IF eine Variable auf Eingabe (leere Menge) prüfen?

Beitrag von MAC »

Hast recht ich habe das ">" als "=" gelesen.
Folgendes wäre gleich

Code: Alles auswählen

if length(edit1.text) = 0 then ;// mit =
if edit1.text = '' then ;

Code: Alles auswählen

Signatur := nil;

Foxx
Beiträge: 3
Registriert: Do 26. Jan 2012, 21:10

Re: Mit IF eine Variable auf Eingabe (leere Menge) prüfen?

Beitrag von Foxx »

Ich habe es verstanden, super echt vielen dank an euch! Tolles Forum!

Allerdings kommt jetzt meine nächste Frage auf:

Ich will jetzt die Ergebnisse der Rechnungen in die Textboxen ausgeben, allerdings tauchen wieder mehrere Fehler auf die ich nicht beseitigen kann.

Code: Alles auswählen

begin
      If a>=0 then                   //a ist die eingabe von edit1
            If edit2.text='' then  
               If edit3.text='' then
                  If edit4.text='' then
                      begin
                      edit2.text:=IntToStr(2*a);
                      edit3.text:=IntToStr(2*(3.141592*a));
                      edit4.text:=IntToStr(3.141592*(a**2));
                      end
                      else showmessage ('Nur eine Variable darf gegeben sein!');
                      end;
Also zuerst wird überprüft ob auch wirklich nur 1 Variable eingegeben ist. Das funktioniert denke ich soweit. Dann Allerdings tauchen immer wieder fehler auf undzwar ab dem "begin" bis zum "end.

Code: Alles auswählen

edit2.text:=IntToStr(2*a);  //unit1.pas(86,47) Error: Incompatible type for arg no. 1: Got "Extended", expected "QWord"
edit3.text:=IntToStr(2*(3.141592*a)); //unit1.pas(87,58) Error: Incompatible type for arg no. 1: Got "Extended", expected "QWord"
edit4.text:=IntToStr(3.141592*(a**2)); //unit1.pas(88,55) Error: Operator is not overloaded

Wäre super wenn da jemand nochmal was zu sagen könnte.
MfG Foxx

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Re: Variable auf Eingabe prüfen / Ausgabe in TEdit

Beitrag von knight »

Zahlen wie Pi haben Nachkommastellen. Für eine Umwandlung ist daher eher FloatToStr geeignet.

knight

Foxx
Beiträge: 3
Registriert: Do 26. Jan 2012, 21:10

Re: Variable auf Eingabe prüfen / Ausgabe in TEdit

Beitrag von Foxx »

so ok das funktioniert nun auch, das programm wird nun auch fehlerfrei kompiliert.
allerdings bekomme ich jetzt immer die fehlermeldung:

Code: Alles auswählen

"" is an invalid float.
nein es ist kein leerzeichnen in einer der textboxen. Ich bitte um eure Hilfe!
mfg
Foxx

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Variable auf Eingabe prüfen / Ausgabe in TEdit

Beitrag von MAC »

Der fehler ist da ist nix, hier ein kleines Beispiel: sag mir mal welche Zahl in der Zweiten Zeile dieses Posts von mir steht:

richtig, in der zweiten zeile steht nix, und nix ist ungleich ! Deswegen der Fehler, es gibt 2 möglichkeiten den Fehler vorzubeugen:
1. Vorher "0" in das edit schreiben (also im Objektinspektor)
2. Du verwdenst die Procedure TryStrtoFloat dort wird true zurück gegeben wenn es geklappt hat und es kommt kein fehler.

Code: Alles auswählen

if not TryStrtoFloat(Edit1.Text,variable_a) then
   begin
   ShowMessage('GIB BITTE DIE ZAHLEN RICHTIG EIN; in Edit1 ist ein Fehler');
   exit; // hört mit der Procedure auf damit der User die eingabe bearbeiten kann...
   end;
// ganz normales rechnen mit variable_a;
variable_b := 2 + variable_a;
if variable_b = 0 then variable_b := -1;
Form1.Caption := FloattoStr(variable_a/variable_b);

Code: Alles auswählen

Signatur := nil;

Antworten