Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Error Handling / Eingabesperre


Anka - Mi 22.09.10 16:32
Titel: Error Handling / Eingabesperre
Hallo leute,
Bin Delphi-Anfängerin und wollte mal Fragen,
1. wie ich das Edit-Feld für bestimmte Eingaben sperren kann (z.B. Buchstaben sperren)
und 2. Wie ich Fehlermeldungen erzeuge (Error-Handling), wenn z.B. nur sinnvolle Berechnungen durchgeführt werden sollen (z.B. Wurzel aus -1 sollte eine Fehlermeldung erscheinen).

Dankeschön,
Anka


ALF - Mi 22.09.10 16:58

Hi und :welcome:
Für Dein erstes Problem gibt es z.B. hier [http://www.delphi-forum.de/topic_eingabemoeglichkeiten+bei+editfeldern+beschraenken_99454.html] und mehr Beispiele.
Für 2. wenn es keine original exeption dafür gibt(die man abfangen kann), kannst Du solche MathFunktionen z.B. in einer If Abfrage abfangen z.B. :wink:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
if eingabe <0 then
begin
   //hier Deine ErrorMeldung

   exit;
end


Gruss ALf


Delete - Mi 22.09.10 17:49

user profile iconAnka hat folgendes geschrieben Zum zitierten Posting springen:
und 2. Wie ich Fehlermeldungen erzeuge (Error-Handling), wenn z.B. nur sinnvolle Berechnungen durchgeführt werden sollen (z.B. Wurzel aus -1 sollte eine Fehlermeldung erscheinen).

Nebenbei bemerkt, man kann Wurzel auch aus negativen Zahlen ziehen. ;)


platzwart - Mi 22.09.10 22:33

Nebenbei bemerkt: Nein, kann man nicht immer, siehe Wikipedia [http://de.wikipedia.org/wiki/Wurzel_%28Mathematik%29#Wurzeln_aus_negativen_Zahlen]


elundril - Mi 22.09.10 22:41

user profile iconplatzwart hat folgendes geschrieben Zum zitierten Posting springen:
Nebenbei bemerkt: Nein, kann man nicht immer, siehe [url=http://de.wikipedia.org/wiki/Wurzel_%28Mathematik%29#Wurzeln_aus_negativen_Zahlen]Wikipedia[/url]


also soweit ich mich an die Mathematikvorlesung erinnern kann, kann man in den komplexen Zahlen uneingeschränkt rechnen. Und da ja die Wurzel einer negativen Zahl eine komplexe Zahl ergibt, warum sollte es dann da Probleme geben?

lg elundril


Narses - Mi 22.09.10 22:53

Moin und :welcome: im Forum!

user profile iconAnka hat folgendes geschrieben Zum zitierten Posting springen:
Bin Delphi-Anfängerin und wollte mal Fragen,
Bitte erstelle in Zukunft für jede deiner Fragen ein separates Topic, da die Diskussion mehrerer Fragen in einem Topic für gewöhnlich für Verwirrung und Durcheinander sorgt. Danke. ;) Normalerweise schließen wir Threads mit mehreren Fragen. :idea:

cu
Narses


platzwart - Mi 22.09.10 22:54

Dann lies den Text, den ich verlinkt habe ;)


Anka - Do 23.09.10 16:43

kann ich dann einfach eingabe <0 schreiben? also versteht Delphi das Wort "eingabe" ?


Anka - Do 23.09.10 17:19

Ich nochmal :)
Wo im Quelltext muss ich den Code von ALF (2.Antwort in diesem Thema) eingeben?
Ich bin halt noch ganz am Anfang ;)


bummi - Do 23.09.10 17:28

Das hängt davon ab wie Du reagieren willst...
Du kannst im OnChange des Edits prüfen, hier könntest Du eine Routine aufrufen die all Edits auf einmal prüft, alle bekommen dann auch das gleich OnChange zugewiesen.
In dieser Rountine könntest Du gültige Edits weiß färben und ungültige gelb und wenn eines ungültig ist den Button sperren......

im OnKeypress, hier könntest Du ein Zeichen welches nicht oder nicht mehr zu Text Deines Edits hinzugefügt werden soll mit Key=#0 verwerfen ....

Du könntest im OnExit eines Feldes eine Meldung anzeigen wenn Dir der Wert nicht gefällt und danach den Fokus wieder auf das Edit zurücksetzen...

Es gibt wohl noch 10 andere Möglichkeiten, Du must nur überlegen wann Du was machen möchtest und was Dir vieviel Aufwand wert ist.


Anka - Do 23.09.10 17:46

1. Ok,danke bummi, für mich kommt das OnChange Ereigniss in Frage. Funktioniert auch alles soweit; wie kann ich daraus jetzt eine Routine machen?

2.Nochmal die Frage: Wie kann ich den "eingabe" Befehl hier in Delphi-Sprache ausdrücken?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
if eingabe <0 then
begin
   //ErrorMeldung

   exit;
end


bummi - Do 23.09.10 18:07

kleines Beispiel im Anhang



noch ein Beispiel um Eingabemäßig Fließkommazahlen zuzulasen

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    if not (Key in [#0..#31,'0'..'9','-',','])
       or ((key='-'and (Pos('-',Tedit(sender).Text)>0))
       or ((key=','and (Pos(',',Tedit(sender).Text)>0))
     then key :=#0

end;


Anka - Do 23.09.10 19:01

Jetzt haben wir es gleich ;)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
begin
  mayrun := Checkbox1.Checked;
  if not TryStrToFloat(Edit1.Text,f1) then
    begin
    Edit1.Color := clYellow
    end
  else


könntest du mir jetzt noch die folgenden Passagen im Code erklären:

a.)mayrun
b.)TryStrToFloat (Funktion)
c.)f1
d.)Wieso muss es noch ein 'else' geben?

Danke für die Antworten und vor allem für eure Geduld ;)

Liebe Grüße
Anka


bummi - Do 23.09.10 19:09

1:) mayrun ist hier eine boolsche Variable die hier verwendet wird um Button enabled erst am Ende Setzen zu müssen.

2:)TryStrToFloat(String,DoubleVariable) gibt true zurück wenn String in ein Float gewandelt werden konnte in DoubleVariable ist dann die Zahl mit der Du weiterarbeiten kannst.

3:)f1 und fs sind die Variablen die für TryStrToFloat benötigt werden um dort die Zahlen anzulegen

4:)ohne Else beleibt Dein Edit auch bei gültiger Eingabe gelb und da hier anhand der Farben der Button freigegeben wird würde dieser niemals zu betätigen sein.