Einzelnen Beitrag anzeigen

Getox

Registriert seit: 28. Dez 2012
155 Beiträge
 
Delphi XE3 Professional
 
#6

AW: Sekunden im Text von TDBEdit (Uhrzeit) werden bei Fokus auf 00 gesetzt

  Alt 20. Aug 2019, 15:20
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
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?
  Mit Zitat antworten Zitat