dicas show delphi

DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais
sombra
Artigos Show Delphi

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais
sombra
iniciantes show delphi

INICIANTES

Aprenda a programar de um modo simples e fácil.

Saiba mais
sombra
downloads show delphi

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
sombra
voltar

PARA QUEM GOSTA DE DELPHI

Como colocar um DateTimePicker no DBGrid?

Fala galera do Show Delphi, tudo beleza?

O DBGrid padrão do Delphi já nos oferece muitas funcionalidades, mas há certas funções importantes no uso do dia a dia dos usuários que infelizmente não existem por padrão.

Uma delas é o preenchimento de datas, onde o usuário precisa informar tudo, inclusive as barras (“/”), e ainda ele pode informar algo incorreto e parecer um erro na tela, o que acaba se tornando em uma experiência menos agradável ao cliente.

Bem, e o que fazer?

Uma solução para este tipo de situação é colocar um DateTimePicker dentro do DBGrid, assim o usuário terá todas as funções do calendário e também os possíveis erros de validação de data serão evitados.

Maravilha, mas como fazer isso?

Vamos lá, o código é simples, mas não em um lugar único.

Atualizando a informação do Field.

1
2
3
4
5
6
7
8
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
  { Fazendo o seu dataset receber o valor informado no DateTimePicker }
  if ClientDataSet1.State in dsEditModes then
  begin
    ClientDataSet1DATA.AsDateTime := DateTimePicker1.Date;
  end;
end;

Mantendo a naturalidade de passar o foco pelas colunas.

1
2
3
4
5
procedure TForm1.DateTimePicker1Exit(Sender: TObject);
begin
  { Seta o foco de volta para o DBGrid depois de sair do DateTimePicker }
  DBGrid1.SetFocus;
end;

Mandendo o DateTimePicker, quando não usado.

1
2
3
4
5
6
procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
  { Deixa o DateTimePicker invisivível ao sair do foco na coluna. }
  if DBGrid1.SelectedField.FieldName = 'DATA' then
    DateTimePicker1.Visible := False;
end;

Fazendo o DateTimePicker ficar exatamente na frente do DBGrid.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  { Faz o DateTimePicker ficar exatamente na frente do DBGrid }
  if (gdFocused in State) then
  begin
    if (Column.Field.FieldName = 'DATA') then
      with DateTimePicker1 do
      begin
        Left := Rect.Left + DBGrid1.Left + 1;
        Top := Rect.Top + DBGrid1.Top + 1;
        Width := Rect.Right - Rect.Left + 2;
        Width := Rect.Right - Rect.Left + 2;
        Height := Rect.Bottom - Rect.Top + 2;
 
        Visible := True;
      end;
  end;
end;

Fazendo o DateTimePicker receber os eventos de KeyPress.

1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if (Key = Chr(9)) then
    Exit;
 
  { Seta os eventos de key press do dbgrid para o DateTimePicker1 }
  if (DBGrid1.SelectedField.FieldName = 'DATA') then
  begin
    DateTimePicker1.SetFocus;
    SendMessage(DateTimePicker1.Handle, WM_Char, word(Key), 0);
  end;
end;

Parece complicado? Preparamos um vídeo para ajudar no entendimento.

Se preferir, podes fazer o download dos arquivos do exemplo.
[download id=”3952″]

Dúvidas? Deixe o seu comentário!

Um abraço e até o próximo post.

  • Giovani Da Cruz
  • 2 comentários
  • 18 de maio de 2020

2 respostas para “Como colocar um DateTimePicker no DBGrid?”

  1. Paulo disse:

    Boa dica, parabéns.

  2. Maikon Bortoncello disse:

    Boa dica, parabéns.

Deixe um comentário

Ir ao topo

© 2024 Infus Soluções em Tecnologia - Todos os Direitos Reservados