Eingabeprozeduren
Um abzusichern, dass der Benutzer gültige Werte einträgt kann man folgende Prozeduren in das Programm einbauen:
- Mit den KeyPress-Ereignissen der Textfelder absichern, dass nur Zahlen oder Minus einegeben werden können
- Die Länge der eingegeben Strings begrenzen
- Beim Change-Ereignis der Textfelder entscheiden ob es möglich ist auf den Erstellen-Knopf zu drücken
Das Ereignis KeyPress
Zunächst einmal muss das Programm also falsche Zeichen, die durch die Tastatureingabe des Benutzers eingetippt wurden, herausfiltern.
Dazu schreibt man für das KeyPress-Ereignis jedes Textfeldes folgendes:
procedure TfrmCreateMagSquar.edtSizeKeyPress(Sender: TObject);
var Key: Char;
begin
if not (Key in [#8,'0'..'9','-']) then Key:=#0;
end;
procedure TfrmCreateMagSquar.edtAddKeyPress(Sender: TObject);
var Key: Char;
begin
if not (Key in [#8,'0'..'9','-']) then Key:=#0;
end;
procedure TfrmCreateMagSquar.edtMultKeyPress(Sender: TObject);
var Key: Char;
begin
if not (Key in [#8,'0'..'9','-']) then Key:=#0;
end;
Die Length-Eigenschaft
Da bei der Größe aber zum Beispiel nur Zahlen von 3 bis 99 sinnvoll sind, setzt man die Length-Eigenschaft des Textfeldes edtSize auf 2. Aus Ausgabegründen sollte man auch die Länge der Faktoren und Summanden auf 7 begrenzen.
Die EnableBtn-Prozedur
Jetzt muss noch eine allgemeine Prozedur entscheiden, ob das Programm weiterhin mit den eingebenen Strings arbeiten kann.
Zuerst muss deshalb geprüft werden, ob die Strings in den Textfeldern überhaupt etwas enthalten. Ist dies der Fall, so muss geprüft werden, ob die Seitenlänge mindestens 3 ist. Nur dann wird die Enable-Eigenschaft des Knopfes btnCreate auf True gesetzt. Trifft eine der beiden Bedingungen nicht zu, so wir die Enabe-Eigenschaft auf False gesetzt.
procedure tfrmCreateMagSquar.EnableBtn;
begin
If (edtSize.text<>'') And (edtAdd.text<>'') And (edtMult.text<>'') Then
begin
If (strtoint(edtSize.text)>2) then btnCreate.enabled:=true; Else btnCreate.enabled:=false;
end
Else
begin
btnCreate.enabled:=false;
end;
end;
Das Ereignis Change
Um diese Prozedur bei jeder Eingabe des Benutzers auszuführen, muss man sie zum Change-Ereignis jedes Textfeldes aufrufen.
procedure TfrmCreateMagSquar.edtSizeChange(Sender: TObject);
begin
enablebtn;
end;
procedure TfrmCreateMagSquar.edtAddChange(Sender: TObject);
begin
enablebtn;
end;
procedure TfrmCreateMagSquar.edtMultChange(Sender: TObject);
begin
enablebtn;
end;