GARANTIR DESCONTO

Fórum Chamar Um Método Ao Pressionar a Tecla Enter De Um ComboBox #206441

14/01/2004

0

Chamar O Método Em Sí Na Verdade Não É O Problema. O Problema Existe, Que O Método a Ser Chamado\Executado Depende do Valor Do Combobox...

//O Método Abaixo, chama o Método GetData Ao Se Pressionar a Tecla Enter Do
ComboBox.

Procedure Tform1.ComboBox1.KeyPress(Sender:Toboject;Var Key: Char);
Begin
If Key=#13 Then
GetData;
End;

//O Método GetData Depende do Valor Combobox

Procedure GetData;
Begin
ShowMessage(Form1.ComboBox1.Text);
End;

O Problema Que Dá, é Que o Valor Que Aparece na Mensagem ShowMessage, Não é o Valor Selecionado na Lista Suspensa, Mas Sim o Valor Atual Do Combobox.

Obs:Na Realidade O Método GetData A Ser Executado Não é Tão Trivial Assim, Só a Título de Exemplo Escrevi Este Método Contendo Uma Instrução APENAS.

Já Tentei De Tudo, Ate Mesmo Chamar Uma Mensagem Personalizada Do Windows, Usando a Função Da API PostMessage.Não Deu Resultado....Mas Acredito Na


Marco Salles

Marco Salles

Responder

Posts

14/01/2004

Anorex

no seu caso não o evento OnSelect não seria mais adequado?


Responder

Gostei + 0

14/01/2004

Marco Salles

no seu caso não o evento OnSelect não seria mais adequado?


Evento OnSelect De Quem :?: :?:

Quero Frisar Novamente [color=red:8b186ffbe2]Que ´ O Problema Existe, Que O Método a Ser Chamado\Executado Depende do Valor Do Combobox...E O Valor Do ComboBox Apresentado Para o Método Não É, 0 SELECIONADO e Sim o Valor Do Combobox Atual ´[/color:8b186ffbe2]

Como Mudar Isto,Quando Estamos Processando Um Evento Interno Do Próprio Combobox (Que No Meu Caso é o Evento ONKEYPRESS:?:

Amigos, Acredito Na Criatividade Do Pessoal Do Forum.E Agradeço Desde Já


Responder

Gostei + 0

14/01/2004

Fórum Vini

Olá,
não sei se entendi muito bem o seu problema, mas tente isso:
Showmessage(Combobox1.Items[Combobox1.ItemIndex]);

Ele pega o valor do item selecionado.

Espero ter ajudado.
Vinicius.


Responder

Gostei + 0

14/01/2004

Marco Salles

Vini , Vou Colocar a Dúvida De Outra Forma. Suponha Um Form Com Um Único Componente Combobox. Neste Componente em Sua Propriedade Items Digitamos Quatro Colunas.Por Exemplo:´Me;Ajude;Por;Favor´. Depois Disto, Limpamos Sua Propriedade Text. Finalmente Rodamos O aplicativo. O Resultado é Um Combobox Limpo.Vamos Então Com O Mouse Selecionar Este ComboBox. Agora Ainda Como O mouse Vamos Navegar Atê o Quarto Item , Neste Caso é a Palavra ´Favor´. Quando Esta Palavra Estiver Selecionada Na Lista Suspenda Damos Um <Enter>.
E O QUE ACONTECE COM O CONTEUDO DO COMBOBOX :?: NADA,ABSOLUTAMENTE NADA :!: Então o Que Estou Querendo é : Após o Item Estiver Selecionado, e Exeutando UM <ENTER> , Este Item Selecionado Aparecesse No COMBOBOX. Dá Para Fazer Isto Ou é Impossível :?:


Responder

Gostei + 0

14/01/2004

Anorex

Siga A Sua Última Mensagem Que Você Mesmo Deu A Soulução.

Fiz Do Jeito Que Você Descreveu O Que Queria E Saiu Do Jeito Que Você Está Querendo....... :!: :!: :!:


Responder

Gostei + 0

14/01/2004

Fábio Valente

O problema, pode ser, não testei.... que você está pegando o valor ´Text´ do combo ao pressionar a Tecla.... ou seja, o próprio componente não selecionou, ainda, o ítem que pressionou.... possivelmente a dica anterior do .Vini. resolverá!!!

Sem mais,


Responder

Gostei + 0

14/01/2004

Anorex

ComboBox1.Text := ComboBox1.Items[ComboBox1.ItemIndex];


Responder

Gostei + 0

14/01/2004

Marco Salles

Siga A Sua Última Mensagem Que Você Mesmo Deu A Soulução. Fiz Do Jeito Que Você Descreveu O Que Queria E Saiu Do Jeito Que Você Está Querendo....... :!: :!: :!:


No Meu Computador Isto Não Acontece. Quando Eu Seleciono Um Item Do Suspenso do Combobox e Dou Enter, Não Muda o Conteudo Do Combo, Mesmo Que Eu Escreva a Istruçao Sugerida No Evento OnkeyPress....
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
ComboBox1.Text := ComboBox1.Items[ComboBox1.ItemIndex];
end;

Agora Ja a Citação Do Nervouz :´O problema, pode ser, não testei.... que você está pegando o valor ´Text´ do combo ao pressionar a Tecla.... ou seja, o próprio componente não selecionou, ainda, o ítem que pressionou.... possivelmente a dica anterior do .Vini. resolverá!!!´
ACREDITO QUE DEVE SER ESTE O PROBLEMA, ESTOU AQUI PARA PEDIR UMA MANEIRA DED RESOLVER. COMO VOCE DISSE :´QUE NÃO TESTOU´,(MAS EU TESTEI) a Dica Do Vini Endossada Pelo Anorex Infelismente Não ResolveU... Amigos , Como Resolver :?:


Responder

Gostei + 0

14/01/2004

Paulo_amorim

Concordo com o Vini
O Text do Combo soh sera atualizado APOS o evento ONKEYPRESS
tente um evento posterior, por exemplo OnChange

Se vc coloca o mouse sobre uma opçao e clica enter mas o TEXT nao eh mudado, tente mudar a propriedade STYLE do ComboBox para DropDownList


Responder

Gostei + 0

14/01/2004

Paulo_amorim

Novamente tentando...ehehe

eu tentei aqui simular oq ue voce falou

com a propriedade Style setada como DROPDOWNLIST ele funcionou
o unico inconveniente eh que o usuario nao vai poder digitar o valor (apesar que a cada letra digitada ele vai para o primeiro registro encontrado)


Responder

Gostei + 0

14/01/2004

Marco Salles

Novamente tentando...ehehe eu tentei aqui simular oq ue voce falou com a propriedade Style setada como DROPDOWNLIST ele funcionou o unico inconveniente eh que o usuario nao vai poder digitar o valor (apesar que a cada letra digitada ele vai para o primeiro registro encontrado)


Meu Amigo Paulo, Com Esta Propiedade Selecionada(Style setada como DROPDOWNLIST) Irá Funcionar Do Jeito Que Eu Quero, [color=red:d003a19869]Mas o Problema é Que Eu Preciso Editar Valores No Combo. [/color:d003a19869]E Quanto a Sua Primeira Afirmação:´O Text do Combo so sera atualizado APOS o evento ONKEYPRESS tente um evento posterior, por exemplo OnChange ´,Posso Afirmar Que Ele Não Atualiza.[color=red:d003a19869]SÓ ATUALIZA COM A FUNÇÃO SHOWMESSAGE[/color:d003a19869].
Veja o Exemplop Abaixo Com O mesmo Form, Mesmo Combo:

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
ComboBox1.Text := ComboBox1.Items[ComboBox1.ItemIndex];
end;

//Escrevi um Evento OnChange Como V.C Sugeriu

procedure TForm1.ComboBox1Change(Sender: TObject);
var
texto:String;
begin
Texto:=ComboBox1.Text;
end;
end.

Conclusão:O TEXTO DO COMBO NÃO É ATUALIZADO.MAS SE COLOCAR UMA FUNÇÃO SHOWMESSAGE,AÍ A HISTÓRIA É DIFERENTE.MAS O USUÁRIO NÃO QUER FICAR VENDO MENSAGEM NA TELA,TODA VEZ QUE ELE APERTAR <ENTER>. SE ALGUEM CONHECE UMA OUTRA CHAMADA
QUE SEJA INTERNA E NÃO RETORNE NADA DE INTERFACE PARA O USUÁRIO,EU ACHO QUE ESTE PODE SER UM DOS CAMINHOS.....
OBS:ESTA ESTRATÉGIA EU TENTEI USAR USANDO UMA CHAMADA A API DO WINDOS FUNÇÃO POSTMESSAGE(COMO EU DESTAQUEI NO INÍCIO DO TÓPICO)

Marco Escreveu No Início Do Tópico:´Já Tentei De Tudo, Ate Mesmo Chamar Uma Mensagem Personalizada Do Windows, Usando a Função Da API PostMessage.Não Deu Resultado´

Continuo Ainda Acreditando na Criatividade dos Meus Amigos Do Forum...


Responder

Gostei + 0

14/01/2004

Marco Salles

Só Gostaria De Uma Resposta.Tem Ou Não Tem Jeito.


Responder

Gostei + 0

14/01/2004

Fabio.hc

Tem jeito sim.


Tente assim:

var
  Form1: TForm1;
  vtexto:string;

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
   vtexto:=ComboBox1.Items[ComboBox1.ItemIndex];
end;


procedure TForm1.ComboBox1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key = VK_RETURN then
    ComboBox1.Text:=vtexto;
end;



Responder

Gostei + 0

14/01/2004

Marco Salles

É Isto Mesmo Fabio.HC. Funcionou Como o Desejado. :D Mas Na Minha Terra (Sou Do Interior De Minas) Tem Um Ditado Popular Que Diz:´Mato a Cobra e Mostro o Pau...´Por Analogia Voce Matou a Cobra , Mas O Que Voce Usou Para Mata-la :?: Quem é VK_RETURN .(Tudo Bem Que Deve Ser Definido Na Secção Windows Como VK_TAB , VK_Up, Vk_Down , etc...),O Que Esta Variável Tem :?: e Porque Voce Escolheu o Evento ComboBox1KeyUp :?: . Dá Para MostrarComo Matou a ´Cobra´ :?:

P:S Quero Agradecer a Todos Que Atê Aqui Contribuiram Para O
Equacionamento Deste Tópico e Em Particular Parabenizar Ao ´Fabio.HC
Por Resolve-lo Da Maneira Como Ele Foi Colocado. Espero Que Ele
Contribua Mais Uma Ves Com Os Seus Conhecimentos e Mostre Como
Matou a ´Cobra´ :P


Responder

Gostei + 0

15/01/2004

Fabio.hc

[quote:baadb489f4=´Marco Salles´]Quem é VK_RETURN.[/quote:baadb489f4]É a tecla enter.

[quote:baadb489f4=´Marco Salles´]O Que Esta Variável Tem [/quote:baadb489f4]É para ser usada no KeyUp e KeyDown.

[quote:baadb489f4=´Marco Salles´]e Porque Voce Escolheu o Evento ComboBox1KeyUp[/quote:baadb489f4]Este evento é acionado quando solta a tecla.

[quote:baadb489f4=´Marco Salles´]Dá Para MostrarComo Matou a ´Cobra´.[/quote:baadb489f4]Quando clica no combo e abre caixa e passa o mouse sobre os itens a variavel itemindex é a incrementada com a posição do item selecionado, quando é pressionado a tecla enter o itemindex passa a ser -1, por isso o combo fica vazio, antes disso o conteudo do combo é armazenado na variavel vtexto, quando a tecla enter é solta, aciona o evento KeyUp e a variavél vtexto é armazenda em combo1.text.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar