delphi natürliche zahlen

Moonwalker89

...hat PC-Probleme
ID: 183426
L
28 Mai 2006
659
68
Hi!

Wie kann ich am besten testen, ob zwei eingegebene Werte (in EZahl1 und EZahl2, also Editfeldern) natürliche Zahlen sind?
Bei mir ist das Problem mit StrToInt, da das Programm abstürzt, wenn man Buchstaben o.Ä. eingibt. Wie kann ich das verhindern?

PHP:
If (int(StrToInt(EZahl1.Text))=StrToInt(EZahl1.Text)) and
 (int(StrToInt(EZahl2.Text))=StrToInt(EZahl2.Text)) and
 (StrToInt(EZahl2.Text)>0) and
 (StrToInt(EZahl1.Text)>0) then
 begin
     // procedure ...
     // ausgabe ergebnis
   end
 else
      MessageDlg('Bitte nur natürliche Zahlen eingeben',mtError, mbOKCancel, 0);
 
PHP:
function IsNumeric(s:String):Boolean;
var i:Integer;
begin
  Result:=False;
  for i := 1 to Length(s) do
    if (s[i] > '9') or (s[i] < '0') then exit;
  Result:=True;
end;
 
heißt das, dass an jeder stelle des strings gecheckt wird, ob da was von 0-9 steht und zwar so viele durchläufe, wie der string stellen hat?
 
du könntest auch die Funktion StrToIntDef Verwenden, bei der kannst du einen Default-Wert angeben, der verwendet wird sofern der String nicht in einen Integer umgewandelt werden kann.

und dann gäbe es noch die Möglichkeit dass du ein MaskEdit benutzt und eine Eingabemaske definierst die nur Zahlen zulässt
 
Zuletzt bearbeitet:
MaskEdit ist eine spezielle Form des Editfelds, allerdings hab ich in den einschlägigen Foren irgendwie nur Leute gefunden die davon abraten aus welchen Gründen auch immer. Würd mich auch interessieren, kenn mich jetze nich soo mit Delphi aus :think:

"Buchstabenverbot" im Editfeld
der zugehörige Tipp

den Abschnitt hier hab ich aus folgendem Tipp entnommen:
PHP:
var
dwStyle: DWORD;
hEdit: Integer;
begin
hEdit := Edit1.Handle;

dwStyle := GetWindowLong(hEdit, GWL_STYLE);

dwStyle := dwStyle or ES_NUMBER;

SetWindowLong(hEdit, GWL_STYLE, dwStyle);
end;
find ich am elegantesten: dem Windows-Objekt "Edit" den vorbereiteten Style "nur Nummern" angeben ;)