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

(Resolvido) Controle de foco para TCombobox


Denis Courcy

Pergunta

Pessoal, uso Delphi 7 e estou com um problema para controlar o foco de entrada em um TCombobox.

Fiz uma simulação a parte para verificar se o problema estava em minha aplicação, mas o problema persistiu.

O problema é o seguinte:

Se estou em um componente qualquer e tendo direcionar o foco para o Tcombobox ele simplesmente não aceta o foco. Se retiro a crítica na saída do componente que está dando a ordem, ele aceita. Se troco o Combobox por um edit ou outro componente, ele aceita.

O que fazer? Poderiam me ajudar?

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

case key of

vk_return, vk_tab:

ComboBox1.SetFocus;

end;

end;

procedure TForm1.Edit1Exit(Sender: TObject);

begin

if (not edit1.focused) and (not ComboBox1.Focused) then

showmessage('deu caca'); {sempre passa aqui. O ComboBox1.Focused é sempre falso e com a negativa fica verdadeito passando por aqui, quando não deveria.}

end;

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Denis não tem erro nenhum ... usei o seu código e não deu esse problema

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    ComboBox1: TComboBox;
    procedure Edit1Exit(Sender: TObject);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1Exit(Sender: TObject);
begin
   ComboBox1.SetFocus;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   case key of
   vk_return, vk_tab:
   ComboBox1.SetFocus;
   end;
end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas,

O meu código estava

procedure TForm1.Edit1Exit(Sender: TObject);
begin
if (not edit1.focused) and (not ComboBox1.Focused) then
showmessage('deu caca'); {sempre passa aqui. O ComboBox1.Focused é sempre falso e com a negativa fica verdadeito passando por aqui, quando não deveria.}
end; 
Você postou
procedure TForm1.Edit1Exit(Sender: TObject);
begin
   ComboBox1.SetFocus;
end;
Tente novamente com o meu código, por favor.
Link para o comentário
Compartilhar em outros sites

  • 0

deveria ser assim então

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    ComboBox1: TComboBox;
    procedure Edit1Exit(Sender: TObject);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//Chame Focused para determinar se a caixa de combinação é atualmente o
//destinatário de entrada do teclado. Quando Focused retorna true, a caixa
//de combinação é o controle ativo e mensagens de teclas são enviados a ele.
//Quando Focused é false, a caixa de combinação não está ativa (embora possa ser selecionada).

procedure TForm1.Edit1Exit(Sender: TObject);
begin
   if (edit1.Focused) and (not ComboBox1.Focused) then
   showmessage('deu caca');
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   case key of
   vk_return, vk_tab:
   ComboBox1.SetFocus;
   end;
end;

end.

obs: leve em consideração, que o evento OnExit do componente sempre será chamado

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado.

O teste passou. Mas preciso ter controle absoluto sobre o foco de cada elemento desta tela de minha aplicação.

Vou aumentar o nível de dificuldade desta tela e, se houver mais dúvidas, postarei novamente.

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,3k
    • Posts
      652,5k
×
×
  • Criar Novo...