Tenho os seguintes problemas com o TDateTimePicker
controle:
(1) Quando o formulário aparece, ele é automaticamente focado. É meu primeiro controle no formulário, mas tudo precisa ser desfocado na inicialização. Eu tentei o seguinte:
procedure TfrmMain.FormShow(Sender: TObject);
begin
// ...
// Defocus everything
Self.ActiveControl := nil; // Does not work
end;
(2) Além disso, existe um TSpeedButton
que deve desfocar este controle, mas pressioná-lo não remove o foco do TDateTimePicker
. (Outros controles, como o normal, TButton
o removem.)
Você pode definir sua
TabStop
propriedade como falsa para evitar que obtenha o foco inicial.Observe que isso também impedirá que o usuário use a TABtecla para mudar o foco para
TDateTimePicker
também.A razão pela qual pressionar a
TSpeedButton
não muda o foco deTDateTimePicker
é o fato de queTSpeedButton
não é um controle focável.Esse é um requisito muito estranho. Minha intuição é que seu design está abaixo do ideal. Você não deve lutar contra o sistema operacional e suas convenções – você deve tentar aderir às normas que os usuários esperam da plataforma.
Isso é esperado, pois
TSpeedButton
é um controle gráfico e não um controle de janela. Conseqüentemente, um botão de velocidade não é uma janela (como um botão normal, caixa de edição, botão de opção, caixa de seleção, caixa de combinação, caixa de listagem, visualização de lista, etc.).Em particular, isso significa que os usuários não podem mover-se para o seu botão usando o teclado (Tab), portanto, os botões de velocidade tornam a sua GUI menos acessível e menos conveniente de usar.
Nunca uso botões de velocidade por esse motivo.
Mas se você insistir totalmente, poderá desfocar tudo desde o início.
Você só precisa adicionar um
OnActivate
manipulador que defina o formulárioActiveControl
comonil
: