Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Textfeld auf Zahl prüfen (https://www.delphipraxis.net/182639-textfeld-auf-zahl-pruefen.html)

AblukaAlarm 6. Nov 2014 13:15

Textfeld auf Zahl prüfen
 
Hallo zusammen,

habe das Problem ein Eingabefeld (sollte nur für Zahlen sein, sonst keine Berechnung möglich) auf Zahlen zu prüfen.
Der Anfang des Programms sieht so aus:
Delphi-Quellcode:
type

  { TForm1MSP }

   TForm1MSP = class(TForm)
    ...
    Edit1Masse: TEdit;
....(die anderen Felder)

  procedure Edit1MasseChange(Sender: TObject);
....(die anderen Felder)
Nun in dem Feld wo die Zahl rein kommen soll:
Delphi-Quellcode:
procedure TForm1MSP.Edit1MasseChange(Sender: TObject);

....
hiernach habe ich alles mögliche versucht, aber habe immer Fehlermeldungen bekommen.

Mein Ziel ist es, einfach dieses Feld auf Zahlen (mit Komma oder ohne ist egal) zu prüfen und falls dort eine Buchstabe eingegeben wird soll showmessage('Bitte geben Sie eine Zahl ein') rauskommen
Konnte das Problem nicht lösen und bitte um Hilfe
Vielen Dank :thumb:

mkinzler 6. Nov 2014 13:18

AW: Textfeld auf Zahl prüfen
 
Z.B. mit TryStrToFloat()

AblukaAlarm 6. Nov 2014 13:36

Delphi-Quellcode:
VAR
zahl:string
Delphi-Quellcode:
try
zahl :=TryStrToFloat(Edit1Masse.text);
except
 showmessage('Geben Sie bitte eine Zahl ein');
end;
habe das hier mal versucht aber das programm starten dann nicht

mkinzler 6. Nov 2014 13:38

AW: Textfeld auf Zahl prüfen
 
Delphi-Quellcode:
if not TryStrToFloat(Edit1Masse.text, zahl) then ...

himitsu 6. Nov 2014 13:39

AW: Textfeld auf Zahl prüfen
 
Zitat:

Zitat von AblukaAlarm (Beitrag 1278928)
aber das programm starten dann nicht

Wie bitte?
PS: Die Fehlermeldung kann man kopieren (Strg+C) oder notfals halbwegs abschreiben.

Und jetzt schau mal bitte in die OH (Delphi-Referenz durchsuchenTryStrToFloat) und prüfe was du falsch gemacht hast.

Ach ja, TryStrTo... lösen keine Exceptions aus.

Chemiker 6. Nov 2014 13:42

AW: Textfeld auf Zahl prüfen
 
Hallo,

oder mit KeyPress-Event nur Zahlen zulassen.

Delphi-Quellcode:
if not (Key in [#48..#57] then Key:=0;


Bis bald Chemiker

DeddyH 6. Nov 2014 13:44

AW: Textfeld auf Zahl prüfen
 
Dann kriegst Du aber auch kein Komma rein. Nimmst Du das mit in die Menge auf, kann es mehrfach oder an unsinniger Stelle vorkommen.

AblukaAlarm 6. Nov 2014 13:53

AW: Textfeld auf Zahl prüfen
 
Delphi-Quellcode:
procedure TForm1MSP.RadioGroup1Click(Sender: TObject);
begin

end;


Var
zahl:string;

procedure TForm1MSP.Edit1MasseChange(Sender: TObject);
 begin
    if not TryStrToFloat(Edit1Masse.text, zahl)
       then showmessage('FEHLER')
 end;

nun siehts so aus und so kommt die Fehlermeldung:
unit1.pas(127,47) Error: Call by var for arg no. 2 has to match exactly: Got "AnsiString" expected "Extended"

Chemiker 6. Nov 2014 13:55

AW: Textfeld auf Zahl prüfen
 
Hallo DeddyH,

Zitat:

Zitat von AblukaAlarm
(mit Komma oder ohne ist egal)

Bis bald Chemiker

Sir Rufo 6. Nov 2014 13:55

AW: Textfeld auf Zahl prüfen
 
Na dann schau dich mal was
Delphi-Quellcode:
zahl
für einen Typen hat und welcher Typ wohl erwartet wird?

DeddyH 6. Nov 2014 13:56

AW: Textfeld auf Zahl prüfen
 
TryStrToFloat, da ist String wohl der falsche Datentyp für die Variable Zahl.

himitsu 6. Nov 2014 14:01

AW: Textfeld auf Zahl prüfen
 
Zitat:

Zitat von Chemiker (Beitrag 1278931)
oder mit KeyPress-Event nur Zahlen zulassen.

Wieder hat jemand vergessen, daß es auch einige ShortCuts und das Kontextmenü gibt .... vorallem das "Einfügen".


Und was haben alle gegen existierende Funktionen? (TMaskEdit, TEdit.NumbersOnly usw.)

AblukaAlarm 6. Nov 2014 14:05

AW: Textfeld auf Zahl prüfen
 
Delphi-Quellcode:
procedure TForm1MSP.RadioGroup1Click(Sender: TObject);
begin

end;

Var zahl:string;

procedure TForm1MSP.Edit1MasseChange(Sender: TObject);
 begin
    if not TryStrToFloat(Edit1Masse.text,zahl)
       then showmessage('FEHLER');
 end;

 begin
    if RadioButtonFlussdichte.Checked = true then
     Label7.Caption := Edit1Spannung.Text
  else Label5.Caption := Edit1Flussdichte.Text;

  end;

was muss ich den für zahl eine Variable geben?

baumina 6. Nov 2014 14:07

AW: Textfeld auf Zahl prüfen
 
Die Variable "Zahl" würde ich
1. in die Procedure mit reinnehmen, damit ist sie nur lokal innerhalb der procedure gültig und
2. als Extended oder Double deklarieren, denn eine Zahl ist eine Zahl und kein String

Das Ganze würde dann so aussehen:

Delphi-Quellcode:
procedure TForm1MSP.Edit1MasseChange(Sender: TObject);
Var
 zahl:Extended;

begin
  if not TryStrToFloat(Edit1Masse.text, zahl)
     then showmessage('FEHLER')
end;

mkinzler 6. Nov 2014 14:08

AW: Textfeld auf Zahl prüfen
 
StrToFloat = String To Float als einen String in eine Fließkommazahl, da würde isch eine Fließkommavariable ( Single, Double, Extended) anbieten

DeddyH 6. Nov 2014 14:09

AW: Textfeld auf Zahl prüfen
 
http://docwiki.embarcadero.com/Libra....TryStrToFloat
Zitat:

Delphi-Quellcode:
function TryStrToFloat(const S: string; out Value: Extended): Boolean;
function TryStrToFloat(const S: string; out Value: Extended; const AFormatSettings: TFormatSettings): Boolean;
function TryStrToFloat(const S: string; out Value: Double): Boolean;
function TryStrToFloat(const S: string; out Value: Double; const AFormatSettings: TFormatSettings): Boolean;
function TryStrToFloat(const S: string; out Value: Single): Boolean;
function TryStrToFloat(const S: string; out Value: Single; const AFormatSettings: TFormatSettings): Boolean;

Such Dir einen der 3 Datentypen aus.

AblukaAlarm 6. Nov 2014 14:18

AW: Textfeld auf Zahl prüfen
 
Delphi-Quellcode:
procedure TForm1MSP.Edit1MasseChange(Sender: TObject);
Var zahl:Extended;
 
begin
    if not TryStrToFloat(Edit1Masse.text,zahl)
       then showmessage('FEHLER');
 end;

 begin
    if RadioButtonFlussdichte.Checked = true then
     Label7.Caption := Edit1Spannung.Text
  else Label5.Caption := Edit1Flussdichte.Text;
  end;

In diesem Zustand bleibt er bei RadioButtenFlussdichte.Checked hängen

baumina 6. Nov 2014 14:22

AW: Textfeld auf Zahl prüfen
 
Weil deine Begins und Ends komplett durcheinander gekommen sind.

Ein letztes mal *Code vorkau*

Delphi-Quellcode:
procedure TForm1MSP.RadioGroup1Click(Sender: TObject);
begin
  if RadioButtonFlussdichte.Checked = true then
    Label7.Caption := Edit1Spannung.Text
  else Label5.Caption := Edit1Flussdichte.Text;
end;

procedure TForm1MSP.Edit1MasseChange(Sender: TObject);
Var
  zahl:Extended;

begin
   if not TryStrToFloat(Edit1Masse.text, zahl)
      then showmessage('FEHLER')
end;

mkinzler 6. Nov 2014 14:24

AW: Textfeld auf Zahl prüfen
 
Außerdem
Delphi-Quellcode:
if RadioButtonFlussdichte.Checked then

DeddyH 6. Nov 2014 14:24

AW: Textfeld auf Zahl prüfen
 
Delphi-Quellcode:
if RadioButtonFlussdichte.Checked {= true} then
Nicht mit true vergleichen, das kann ins Auge gehen.

[edit] *Gnarf* zu spät :( [/edit]

AblukaAlarm 6. Nov 2014 14:42

AW: Textfeld auf Zahl prüfen
 
Man man jetzt sehe ich den Fehler erst.

Vielen Dank das erste Problem mit den Buchstaben ist schon mal gelöst!

Nun ensteht noch ein Problem, denn wenn ich zu viel in den Textfeldern rumspiele 112341 und dann a reinschreibe zeigt er diese Message, jedoch später nimmt er mal alles falsch an auch Zahlen, später mal alles richtig an. Komisch :S

Jumpy 6. Nov 2014 14:55

AW: Textfeld auf Zahl prüfen
 
Willst du nicht mal den ganzen Quelltext posten (Copy & Paste). Da ist bestimmt noch anderes durcheinander.


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