Notei estranho o comportamento estranho desse componente num pc novo, eu desmarcava o check e a consulta continuava filtrando por data, ai coloquei uma data bem antiga e todos os registros apareceram. Pensei: — Como assim?! eu tinha testado isso..
Abri um novo projeto, inseri o DateTimePicker (propriedade ShowCheckBox = true) e um botão onde coloquei:
ShowMessage(BoolToStr(DateTimePicker1.Checked))
Executei:
- Estava desmarcado, cliquei no botão, 0 (certo)
- Marquei, botão, -1 (certo)
- Desmarquei, botão, -1 (opa! ta errado)
Depois de ler, o que fiz:
Abri a unit ComCtrls (onde esta o componente). Para abri-la basta clicar com o direito em TDateTimePicker e selecionar a primeira opção do menu suspenso (Find declaration).
Procurei a procedure “TDateTimePicker.CNNotify”:
procedure TDateTimePicker.CNNotify(var Message: TWMNotify);
var
DT: TDateTime;
AllowChange: Boolean;
begin…
DTN_DATETIMECHANGE:
…{if FShowCheckbox and IsBlankSysTime(st) then * linha original}
if FShowCheckbox and (dwFlags = GDT_NONE) then {linha atualizada}
FChecked := False
…
Fiz uma pesquisa na pasta do Delphi pelo arquivo ComCtrls.dcu porque é ele que será usado quando você compilar o projeto. resultado nestas pastas:
- C:\Program Files\CodeGear\RAD Studio\5.0\lib
- C:\Program Files\CodeGear\RAD Studio\5.0\lib\debug
Fui no menu “Tools>Options>Enviroment Options>Delphi Options>Library – Win32″ e coloquei o diretório do arquivo .pas (C:\Program Files\CodeGear\RAD Studio\5.0\source\Win32\vcl) no início da lista do “Library path”.
Compilei o projeto, para gerar o arquivo .dcu no diretório do arquivo .pas. Peguei esse .dcu e coloquei nos dois diretórios que falei aqui em cima (o da pesquisa).
Voltei lá no Library path e tirei o diretório recém colocado.
Pronto! Tudo certinho!
fontes:
Segunda-feira, 3 | Agosto | 2009 at 18:45
Boa dica amigo. Tive o mesmo problema e consegui resolver com esta publicação.