Ich möchte gern TDateEdit nutzen, stosse jedoch auf eine Merkwürdgkeit:
Es sind immer unterschiedliche Werte in OnChange, OnExit und OnAcceptDate vorhanden.
Ich habe ein kleines Beispiel angefügt, bei dem dieses Verhalten sehr schön deutlich wird.
Mein Verständnis von TDateEdit ist eigentlich: egal wie das Datum geändert wird (Maus/Tastatur) - das Endergebnis sollte immer das Gleiche sein.
Lazarus Version #: 1.1
Datum: 2012-04-18
FPC-Version: 2.6.1
SVN-Revision: 36892
i386-win32/win64
vx-rexx
TDateEdit - Fehler(?)
TDateEdit - Fehler(?)
- Dateianhänge
-
source.out.zip
- TDateEdit-Test
- (2.99 KiB) 73-mal heruntergeladen
Re: TDateEdit - Fehler(?)
Ich hab's nur kurz auf Lazarus 1.1 r37165M FPC 2.7.1 x86_64-linux-gtk 2 angeschaut.
Hier sind OnExit und OnChange gleich.
Bei OnAcceptDate musst du halt den Parameter auswerten
Edit2.Text:=DateToStr(ADate);
Dann passt's auch da.
Hier sind OnExit und OnChange gleich.
Bei OnAcceptDate musst du halt den Parameter auswerten
Edit2.Text:=DateToStr(ADate);
Dann passt's auch da.
-
- Beiträge: 290
- Registriert: Mo 24. Dez 2007, 13:14
- OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
- CPU-Target: AMD64X2
Re: TDateEdit - Fehler(?)
Ja hast du recht. Nur OnChange ist zuverlässig. Aber onchange ist nicht zu gut weil es bei jede ZAhl änderung (man möchte von 1 auf 2 stellige Tag ändern) aufgerufen wird.
Ich finde OnEditingDone brauchbar aber der wird nur aufgerufen wenn man Enter drückt.
Das war auch bei Delphi schon so. Du kannst mit OnKeyDown (Enter auswerten) und OnAcceptDate das Problem beheben.
Ich finde OnEditingDone brauchbar aber der wird nur aufgerufen wenn man Enter drückt.
Das war auch bei Delphi schon so. Du kannst mit OnKeyDown (Enter auswerten) und OnAcceptDate das Problem beheben.
-
- Beiträge: 290
- Registriert: Mo 24. Dez 2007, 13:14
- OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
- CPU-Target: AMD64X2
Re: TDateEdit - Fehler(?)
Die Ereignisse werden auch aufgerufen wenn mann Datumfenster öffnet und schließt.
Ich würde es so machen:
1. Eine Prozedur definieren, z.B.
2. OnAcceptDate verwenden von da aus DatumGeandert Prozedur aufrufen
2. OnKeyDown verwenden von da aus DatumGeandert Prozedur aufrufen
Dann gibts kein Problem mehr.
Ich würde es so machen:
1. Eine Prozedur definieren, z.B.
Code: Alles auswählen
procedure TForm1.DatumGeandert;
begin
if AlteDatum=DateEdit1.Date then
Exit;
//ab hier eigene funktionen
end;
Code: Alles auswählen
procedure TForm1.DateEdit1AcceptDate(Sender: TObject; var ADate: TDateTime;
var AcceptDate: Boolean);
begin
DatumGeandert;
end;
Code: Alles auswählen
procedure TForm1.DateEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=13 then DatumGeandert;
end;