Mascarar o Componente TDateTimePicker
Após pesquisar bastante sobre o conteúdo do campo TDateTimePicker que é mostrado (30/12/1899) quando nulo no FireBird, resolvi criar uma máscara para deixar em branco este conteúdo que o Delphi subtrai do FirreBird. Veja abaixo o código:
// Procedure para mascarar o objeto (campo) "TDateTimePicker", quando este for nulo.
// No FireBird, os valores de campo tipo TDateTime são mostrados com o valor "30/12/1899".
// Esta rotina, coloca a máscara desejada, no meu caso defini " / / ", com o TMaskEdit.
// Versão: Delphi XE4.
procedure MascaraCamposDateTimePicker(Formulario: TForm; EmEdicao: boolean);
var
ii: integer;
sData: string;
begin
with Formulario do
begin
for ii := 1 to ComponentCount - 1 do
begin
if Components[ii] is TCommonCalendar then
begin
sData := Copy(DataHoraParaCaracter((Components[ii] as TDateTimePicker)
.DateTime), 1, 10);
if sData = '30/12/1899' then
begin
(Components[ii] as TDateTimePicker).Visible := false;
if EmEdicao then
begin
(Components[ii] as TDateTimePicker).Visible := true;
(Components[ii] as TDateTimePicker).DateTime := Now;
end;
end
else
(Components[ii] as TDateTimePicker).Visible := true;
end;
end;
end;
end;
// No formulário que são mostrados os campos TDateTimePicker, inclua uma chamada para a procedure acima.
// Onde "Self" é o formulário em uso, e "False/True", se o registro está em modo de edição ou não.
MascaraCamposDateTimePicker(Self, False)
// Incluir objetos (componentes) no form que tem o TDateTimePicker, do mesmo tamanho e na mesma posição (Width/Top/Left) e
// Ative o controle para traz do objeto TDateTimePicker e pronto. O resto a procedure trata.
// Para colocar o objeto atraz do TDateTimePicker, basta clicar com o botão direito no objeto por exemplo um TMaskEdit e
// selecionar a opção "Control->Send To Back"
// Obs.: A função DataHoraParaCaracter, deve ser substituída pela função nativa DateTimeToStr.
// Procedure para mascarar o objeto (campo) "TDateTimePicker", quando este for nulo.
// No FireBird, os valores de campo tipo TDateTime são mostrados com o valor "30/12/1899".
// Esta rotina, coloca a máscara desejada, no meu caso defini " / / ", com o TMaskEdit.
// Versão: Delphi XE4.
procedure MascaraCamposDateTimePicker(Formulario: TForm; EmEdicao: boolean);
var
ii: integer;
sData: string;
begin
with Formulario do
begin
for ii := 1 to ComponentCount - 1 do
begin
if Components[ii] is TCommonCalendar then
begin
sData := Copy(DataHoraParaCaracter((Components[ii] as TDateTimePicker)
.DateTime), 1, 10);
if sData = '30/12/1899' then
begin
(Components[ii] as TDateTimePicker).Visible := false;
if EmEdicao then
begin
(Components[ii] as TDateTimePicker).Visible := true;
(Components[ii] as TDateTimePicker).DateTime := Now;
end;
end
else
(Components[ii] as TDateTimePicker).Visible := true;
end;
end;
end;
end;
// No formulário que são mostrados os campos TDateTimePicker, inclua uma chamada para a procedure acima.
// Onde "Self" é o formulário em uso, e "False/True", se o registro está em modo de edição ou não.
MascaraCamposDateTimePicker(Self, False)
// Incluir objetos (componentes) no form que tem o TDateTimePicker, do mesmo tamanho e na mesma posição (Width/Top/Left) e
// Ative o controle para traz do objeto TDateTimePicker e pronto. O resto a procedure trata.
// Para colocar o objeto atraz do TDateTimePicker, basta clicar com o botão direito no objeto por exemplo um TMaskEdit e
// selecionar a opção "Control->Send To Back"
// Obs.: A função DataHoraParaCaracter, deve ser substituída pela função nativa DateTimeToStr.
Eduardo
Curtidas 0