Mam wniosek, zbudowany w Delphi 2007, z TDateTimePicker
w formularzu. Ten selektor daty ma właściwość ShowCheckbox
ustawioną na True
, która obok daty lub czasu wyświetla pole wyboru, które jest automatycznie wybierane za każdym razem, gdy data zostanie wybrana przez użytkownika lub gdy data lub czas zostaną zmienione za pomocą kodu. Stan tego pola wyboru może być również kontrolowany ręcznie przez użytkownika, a jego stan można określić za pomocą właściwości Checked
.Dlaczego funkcja TDateTimePicker.Checked zwraca zawsze wartość True w systemie Windows 7?
Poniższy kod pokazuje jak określić stan tego pola wyboru w przypadku OnChange
:
procedure TForm1.FormCreate(Sender: TObject);
begin
DateTimePicker1.ShowCheckbox := True;
end;
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
ShowMessage('Checked: ' + BoolToStr(DateTimePicker1.Checked, True));
end;
Powyższy kod działa zgodnie z oczekiwaniami w systemie Windows XP, ale w Windows 7, Checked
powraca własności zawsze prawdziwe niezależnie od rzeczywistego stanu tego pola wyboru.
Dlaczego właściwość Checked
zwraca zawsze wartość True, nawet jeśli to pole wyboru nie jest zaznaczone? Czy istnieje sposób, aby to naprawić lub obejść?
P.S. Moja aplikacja korzysta z motywów Windows:
Dzięki temu zadziałał urok :) – Re0sless
"Znany problem" został naprawiony w D2009. –
Czy są jakieś problemy z systemem tym obejściem, czy działa to samo dla XP, VISTA i 7? – mwhobrey