![]() |
Wertebereich prüfen und fehler abfangen
hallo,
ich schreibe so ein klein testprogram.ich möchte die Zahlwerteingabe kontrollieren,damit die falsche Eingaben und Bereichüberschreitung vermieden wird,z.B für Hex([0..9,a..f,A..F]),Integer,Floating point und Real48(Double).die Eingabe mache ich über Edit feld mit Ereignis OnKeyPress,damit wenn ich Entertaste drücke,ein fehler soll kommen falls falsche Zahlwert oder bereich überschritten wurde. für Hex habe ich so was geschrieben,weiß auch net viel
Delphi-Quellcode:
ich eigentlich nicht fit in delphi und auch programmieren(also anfänger)
function TFrm_ZahlwertEingabe.Hex(s:String):Boolean;
var c : integer; begin Result := true; for c := 1 to Length(s) do if not (s[c] in ['0'..'9', 'A'..'F', 'a'..'f']) then Result := false; end; könnte jemand mir helfen danke [edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit] |
Re: Wertebereich prüfen und fehler abfangen
Zitat:
Zitat:
Delphi-Quellcode:
Deine Hex-Prüfung scheint sauber zu sein, auch wenn noch einiges verbessert werden könnte. (1) Eine integer-Variable würde ich immer mit 'i' anfangen lassen, damit man den Typ einer Variablen sofort am Namen erkennen kann. (2) Wenn Du ein falsches Zeichen erkannt hast, kann die Schleife bereits abgebrochen werden. (3) Es fehlt die Prüfung, ob überhaupt Text enthalten ist. (4) Hex-Zahlen benötigen eine gerade Anzahl von Ziffern. (5) Auch das Leerzeichen nach jeweils 2 Ziffern könnte zugelassen werden.
procedure TForm1.Edit1Exit(Sender: TObject);
var b0: boolean; begin case RadioGroup1.ItemIndex of 0: // Hex b0 := TestHex(Edit1.Text); 1: // integer b0 := TestInt(Edit1.Text); // usw. else begin ShowMessage('Diese Variante ist noch nicht programmiert.'); b0 := True; // damit die andere Meldung nicht folgt end; end; if (not b0) then ShowMessage('falscher Wert'); end; Punkt 2+3 habe ich in folgendem Beispiel berücksichtigt:
Delphi-Quellcode:
Für andere Prüfungen kann man Funktionen von Delphi verwenden, z.B.:
function TFrm_ZahlwertEingabe.TestHex(s:String):Boolean;
var i: integer; begin Result := true; i := 0; while ( (i < Length(s)) and Result ) do begin Inc(i); // begin..end habe ich nur zur Übersichtlichkeit eingefügt if not (s[i] in ['0'..'9', 'A'..'F', 'a'..'f']) then Result := false; end; end;
Delphi-Quellcode:
Zu diesem Verfahren gibt es andere Beiträge hier im Forum - bitte suchen!
function TFrm_ZahlwertEingabe.TestInt(s:String):Boolean;
var i: integer; begin try i := StrToInt(s); Result := true; except Result := false; end; end; Übrigens: Code-Fragmente sollen formatiert werden: Füge den Code hier ein, markiere ihn und drücke den o.g. Button 'Delphi-Code'. Ich hoffe, Du kannst mit diesen Hinweisen etwas anfangen. Jürgen |
Re: Wertebereich prüfen und fehler abfangen
HI JÜRGEN
danke für deine Hinweise.mit dem Radiogroup,muss ich noch Radiobuttons mit Labels reinlegen?oder wie soll das funktionieren?wenn ich z.B auf Hex oder Int prüfen will.das verstehe ich net ganz. ich will eigentlich,dass wenn ich ein bestimmte Zahl in Edit1 schreibe,sie soll in einem bestimmten bereich liegen,z.B beim Int soll zwischen 1..99999,wenn außer dem Bereich liegt,dann fehler oder focus wieder setzen zur Neueingabe,es darf auch keine zeichen vorkommen.ich habe auch mit [if key =#13 then self.perform(...) else if not (key in[#8,#46,#48..#57])] probiert,aber ich weiß net ,ob es korrekt ist. danke |
Re: Wertebereich prüfen und fehler abfangen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo DJAYS,
bei Edit-Feldern, die nur Integer-Zahlen in einem bestimmten Wertebereich enthalten sollen, verwende ich immer folgendes:
Delphi-Quellcode:
Ist vielleicht nicht ganz perfekt und sauber,
procedure TForm1.Edit1Change(Sender: TObject);
var temp: integer; begin temp := StrToIntDef(Edit1.text, 1{Standartwert}); if temp > 9999 {max} then temp := 9999; if temp < 1 {min} then temp := 1; Edit1.text := IntToStr(temp); end; aber es funzt und schreckt die Benutzer nicht mit Fehlermeldungen ab. Zu den Radio-Boxen (siehe Screenshot): - suche die Eigenschaft "Items" - klicke dort auf "..." - im folgenden Kasten kannst du die Auswahlmöglichkeiten festlegen - die Eigenschaft "ItemIndex" zeigt das angewählte an ( -1 = nichts, 0 = erstes, 1 = zweites, ...) |
Re: Wertebereich prüfen und fehler abfangen
Hi Bug,
danke.noch eine Frage,gibt es eine Möglichkeit diese Zahlen von Edit1 als String in Hex umzuwandeln?ich habe in OH gesucht,es gibt kein StrToHex. danke |
Re: Wertebereich prüfen und fehler abfangen
Zitat:
Delphi-Quellcode:
Wenn Du aber in Edit1.Text schon einen HexWert stehen hast,
Edit2.text:='$'+IntToHex(StrToInt(Edit1.Text),4);
kannst Du ihn so in einen Integer verwandeln:
Delphi-Quellcode:
Grüße
i:=StrToInt('$'+Edit1.Text);
Klaus [edit] Verbesserungen eingetragen [/edit] |
Re: Wertebereich prüfen und fehler abfangen
Hi, vielleicht hilft dir das weiter:
Ich benutze diese Prozeduren, die ich mal geschrieben habe,l jetzt so gut wie in jedem Programm.
Delphi-Quellcode:
//Edit: Kleine Korrektur des Codes
{-----------------------------------------------------------------------------
Description: Löscht Zeichen die da nicht reinpassen Procedure: korrigiere Arguments: var s:String; const zeichen:Tsetofchar Result: None Detailed description: -----------------------------------------------------------------------------} procedure korrigiere(var s:String; const zeichen:Tsetofchar=['0'..'9','-',',']); var c : word; begin c:=1; while c<= length(s) do begin if not(s[c] in zeichen) then delete(s,c,1) else inc(c); end; end; {----------------------------------------------------------------------------- Description: Direkt edite Korrigieren Arguments: var edit:Tedit; const zeichen:Tsetofchar=['0'..'9','-',','] -----------------------------------------------------------------------------} procedure korrigiere(var edit:Tedit; const zeichen:Tsetofchar=['0'..'9','-',',']); var s:string; begin s:=edit.Text ; korrigiere(s,zeichen); edit.Text:=s; end; {----------------------------------------------------------------------------- Description: Korrigiere real Zahl Arguments: var r:real; max,min:real -----------------------------------------------------------------------------} procedure korrigiere(var r:real; min,max:real); var temp:integer; begin if max<min then begin temp:=min; min:=max; max:=temp; end; if r<min then r:=min; if r>max then r:=max; end; {----------------------------------------------------------------------------- Description: Korrigiere Word Zahl Arguments: var r:word; max,min:word -----------------------------------------------------------------------------} procedure korrigiere(var w:word; min,max:word); var temp:integer; begin if max<min then begin temp:=min; min:=max; max:=temp; end; if w<min then w:=min; if w>max then w:=max; end; {----------------------------------------------------------------------------- Description: Korrigiere Integer Zahl Arguments: var r:word; max,min:Integer -----------------------------------------------------------------------------} procedure korrigiere(var w:integer; min,max:integer); var temp:integer; begin if max<min then begin temp:=min; min:=max; max:=temp; end; if w<min then w:=min; if w>max then w:=max; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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