AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Sekunden im Text von TDBEdit (Uhrzeit) werden bei Fokus auf 00 gesetzt
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Getox · begonnen am 20. Aug 2019 · letzter Beitrag vom 20. Aug 2019
Antwort Antwort
Getox

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

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

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

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 20. Aug 2019, 13:52
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.)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Getox

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

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

  Alt 20. Aug 2019, 13:54
Eigentlich DisplayFormat und EditMask und die habe ich ja beide befüllt
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 20. Aug 2019, 13:57
Ich dachte, vielleicht eines versehentlich falsch befüllt...!?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Getox

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

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

  Alt 20. Aug 2019, 14:04
Zitat:
TField.DisplayFormat = "HH:MM" used to display existing values, but EditMask
will not work to control data entered by user. EditMask processing uses the
text property, not the displaytext, hence gets a datetime string like
"12/03/2005 10:57:03" and can not remove both leading (date) and trailing
(seconds) extraneous characters. You can not get hours and minutes from a
full datetime string using a mask.

Quelle: https://groups.google.com/forum/#!to...32/ZuDseFAGWaU
Da muss ich mir wohl was anderes einfallen lassen...
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?
  Mit Zitat antworten Zitat
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, 14: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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz