Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Controle de foco para Tcheckbox


Denis Courcy

Pergunta

Mais uma vez venho solicitar ajuda de vocês para o controle de fluxo de minha aplicação.

O omponente é o checkbox. Todas as vzes que aciono a seta para cima (vk_up), para que o controle passe para o componente anterior, ele passa primeiro por onExit antes de passar por OnkeyDown ou On KeyPress.

Com isso não consigo determinar que tecla foi acionada.

Isto não acontece com vk_return ou vk_escape. Mas acontece, também com [ssshift] vk_tab.

Em anexo tem os fontes de uma aplicação exemplo onde isto ocorre.

A pergunta que tenho é: Como determinar e controlar o fluxo de retorno com este componente.

teste.rar

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

acho que voce teria que testar o pressionamento de teclas

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    CheckBox1: TCheckBox;
    Edit1: TEdit;
    BitBtn1: TBitBtn;
    Edit2: TEdit;
    procedure CheckBox1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure CheckBox1Exit(Sender: TObject);
    procedure CheckBox1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function tbKeyIsDown(const Key: integer): boolean;
begin
  Result := GetKeyState(Key) and 128 > 0;
end;

procedure TForm1.CheckBox1KeyPress(Sender: TObject; var Key: Char);
begin
   showmessage('passou 1');
end;

procedure TForm1.CheckBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   showmessage('passou 2');
   case key of
      vk_up:
         edit2.SetFocus;
      vk_return:
         Edit1.SetFocus;
      vk_escape:
      begin
         BitBtn1.SetFocus;
         BitBtn1.Click;
      end;
   end;
end;

procedure TForm1.CheckBox1Exit(Sender: TObject);
begin
   if tbKeyIsDown(VK_UP) then
   showmessage('tecla seta para cima pressionada')
   else
   showmessage('passou 3');
end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Ok Resolvido.

O codigo que o Jhonas passou resolveu o problema do VU_UP, porém surgiu o problema do mouse que ao clicar passava direto por onExit e parava nas mensagens de controle de foco que eu usava para vigiar o fluxo correto. Continuei procurando e vi um artigo http://www.linhadecodigo.com.br/artigo/1248/delphi-cuidados-ao-usar-o-evento-onexit.aspx que informava sobre cuidados ao controlar foco através do OnExit. Este artigo, com pequenas alterações, resolveu meu problema.

Muito obrigado pelo esforço de todos que ajudaram.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...