Meine Lösung:
Bevor ich den Thread eröffnet habe, habe ich bereits vom TField onSetText implementiert um den Wert auf den Ursprungswert zurückzusetzen, wenn die Eingabe ungültig ist und man das Edit verlässt. Andernfalls kam es zu Fehlern, wenn man zum Beispiel direkt nach der Eingabe eines ungültigen Wertes den Tab gewechselt hat. Dann hat das Edit intern versucht sich selbst zu fokussieren, was aber nicht ging, weil der Tab nicht mehr aktiv war, wo sich das Edit drauf befindet. Also Fokusfehler. Weil ich aus diesem Grund das OnSetText Event bereits gesetzt habe, klappte das Speichern der eingegebenen Minuten zufällig.
Code:
procedure TFormSetDateTimeEdit.FieldZeitSetText(Sender: TField; const Text: string);
var
sText: string;
begin
sText := Text;
if sText[1] = ' ' then
sText[1] := '0';
if sText[5] = ' ' then
sText[5] := '0';
if (sText[2] = ' ') or (sText[4] = ' ') or not IsTime(sText) then
Sender.AsVariant := Sender.oldValue
else
Sender.AsDateTime := StrToDateTime('30.12.1899 ' + sText + ':00');
end;
Nun habe ich auch noch das OnGetText Event gesetzt:
Code:
procedure TFormSetDateTimeEdit.FieldZeitGetText(Sender: TField; var Text: string; DisplayText: Boolean);
begin
Text := FormatDateTime('hh:nn', sender.AsDateTime);
end;
Das DisplayFormat und die EditMask habe ich wie eim Eingangspost beschrieben belassen. Nun klappt alles wie es soll