![]() |
Sekunden im Text von TDBEdit (Uhrzeit) werden bei Fokus auf 00 gesetzt
Hallo,
ich habe mal wieder ein Problem, wo ich echt wie ein Ochse vorm Berg stehe. Ich habe ein Dataset in dem ich unter anderem ein Feld Abfrage, welches zwar ein DateTime ist, aber wo nur die Uhrzeit wichtig ist. Als Datum steht in so einem Fall immer der 30.12.1899. Die Uhrzeit ist zum Beispiel 12:35:00. Als Displayformat für das TDateTimeField habe ich 'hh:nn' gesetzt. Als EditMask '!99:99;1;_'. Das Dataset hängt an einer Datasource und diese ist mit einem tDBEdit verbunden. Wenn ich die Maske nun öffne, wird dort im Edit korrekt '12:35' angezeigt. Wenn ich in das Edit klicke steht da aber plötzlich '12:00'. Wenn ich wieder ein anderes Element anklicke, steht in dem Edit wieder korrekt "12:35". Wenn ich die Minuten abändere und speichere, wird auch der korrekte Wert gespeichert. Wenn ich die EditMask entferne steht im Edit wenn es fokussiert ist das komplette Datum '30.12.1899 12:35:00. Daher vermute ich den Fehlwer bei meiner Editmask. Nur wo ist dieser Fehler? Warum setzt das Edit beim Erhalt vom Focus die Minuten auf 00? liebe Grüße |
AW: Sekunden im Text von TDBEdit (Uhrzeit) werden bei Fokus auf 00 gesetzt
Gab es da nicht zwei verschiedene Masken für die Darstellung und Bearbeitung?
(Bin aber nicht sicher, ist schon so lange her für mich.) |
AW: Sekunden im Text von TDBEdit (Uhrzeit) werden bei Fokus auf 00 gesetzt
Eigentlich DisplayFormat und EditMask und die habe ich ja beide befüllt :(
|
AW: Sekunden im Text von TDBEdit (Uhrzeit) werden bei Fokus auf 00 gesetzt
Ich dachte, vielleicht eines versehentlich falsch befüllt...!?
|
AW: Sekunden im Text von TDBEdit (Uhrzeit) werden bei Fokus auf 00 gesetzt
Zitat:
|
AW: Sekunden im Text von TDBEdit (Uhrzeit) werden bei Fokus auf 00 gesetzt
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:
Nun habe ich auch noch das OnGetText Event gesetzt:
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;
Code:
Das DisplayFormat und die EditMask habe ich wie eim Eingangspost beschrieben belassen. Nun klappt alles wie es soll :)
procedure TFormSetDateTimeEdit.FieldZeitGetText(Sender: TField; var Text: string; DisplayText: Boolean);
begin Text := FormatDateTime('hh:nn', sender.AsDateTime); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:07 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