Pergunta

Em uma forma do meu pedido, podemos adicionar conjuntos de dados adicionando quadros para o formulário. Para cada quadro, queremos ser capaz de se mover de um controle editar (Editors Dev Express) para a próxima pressionando a tecla Enter. Até agora, eu tentei quatro métodos diferentes em eventos KeyPress e KeyUp do meu controle.

  1. SelectNext(TcxCurrencyEdit(Sender), True, True); // also base types attempted

  2. SelectNext(Sender as TWinControl, True, True);

  3. Perform(WM_NEXTDLGCTL, 0, 0);

  4. f := TForm(self.Parent); // f is TForm or my form c := f.FindNextControl(f.ActiveControl, true, true, false); // c is TWinControl or TcxCurrencyEdit if assigned(c) then c.SetFocus;

Nenhum destes métodos estão trabalhando em Delphi 5. Alguém pode me orientar no sentido de obter este trabalho? Obrigado.

Foi útil?

Solução

Isso funciona em Delphi 3, 5 e 6:

KeyPreview propriedade do conjunto de formulário como True.

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  If (Key = #13) then
  Begin
    SelectNext(ActiveControl as TWinControl, True, True);
    Key := #0; 
  End;
end;

Outras dicas

Eu encontrei um projeto antigo que as capturas CM_DIALOGKEY mensagem quando o usuário pressiona a tecla Enter e, em seguida, ele dispara chave VK_TAB. Ele funciona com o número de controles diferentes.

interface
... 
  procedure CMDialogKey(var Message: TCMDialogKey);message CM_DIALOGKEY;

implementation
...

procedure TSomeForm.CMDialogKey(var Message : TCMDialogKey);
begin
  case Message.CharCode of
    VK_RETURN : Perform(CM_DialogKey, VK_TAB, 0);
    ...
  else
    inherited;
  end;
end;

O onKeyPress evento é trigered como qualquer outra forma.

O problema é que o procedimento executado (WM_NEXTDLGCTL, 0,0) doe trabalho no interior do quadro.

Você deve saber o controle ativo para triger o evento adequada.

procedure TFrmDadosCliente.EditKeyPress(Sender: TObject; var Key: Char);
var
  AParent:TComponent;
begin
  if key = #13 then
  begin
    key := #0;

    AParent:= TComponent(Sender).GetParentComponent;

    while not (AParent is TCustomForm) do
      AParent:= AParent.GetParentComponent;

    SelectNext(TCustomForm(AParent).ActiveControl, true, true);
  end;
end;

Você pode colocar uma TButton sobre a forma, torná-lo pequeno e escondê-lo sob algum outro controle. Defina a propriedade padrão para true (que torna recebendo a tecla Enter) e coloque o seguinte no evento OnClick:

SelectNext(ActiveControl, true, true);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top