Criar Teclado Virtual com Delphi
Boa tarde a todos.
Não sei se esta questão já foi solucionada, então aí vai:
Tenho 2 forms (FPrinc e FSec).Em FPrinc eu tenho vários edits (ednome, edrua, edcasa, etc...).Em FSec eu acrescentei 25 botões que correspondem as letras do alfabeto.
O que eu estou pretendendo fazer é uma espécie de "Teclado Virtual". Se o usuário estiver com problemas no teclado, este chamará FSec para preencher o campo que estiver focado em Fprinc.EX:O usuário está preenchendo "ednome", ao chamar FSec o aplicativo fará o seguinte comando:
Onde o caption do Tbutton é justamente as letras do alfabeto.
O código funciona perfeitamente, o problema é que não posso colocar esse mesmo comando para todos os edits de FPrinc. Existe alguma forma de generalizar este comando para todos os edits e maskedits que existam em FPrinc ?
Grato pela atenção.
Não sei se esta questão já foi solucionada, então aí vai:
Tenho 2 forms (FPrinc e FSec).Em FPrinc eu tenho vários edits (ednome, edrua, edcasa, etc...).Em FSec eu acrescentei 25 botões que correspondem as letras do alfabeto.
O que eu estou pretendendo fazer é uma espécie de "Teclado Virtual". Se o usuário estiver com problemas no teclado, este chamará FSec para preencher o campo que estiver focado em Fprinc.EX:O usuário está preenchendo "ednome", ao chamar FSec o aplicativo fará o seguinte comando:
Fprinc.ednome.text := Fprinc.ednome.text + Tbutton(sender).caption;
Onde o caption do Tbutton é justamente as letras do alfabeto.
O código funciona perfeitamente, o problema é que não posso colocar esse mesmo comando para todos os edits de FPrinc. Existe alguma forma de generalizar este comando para todos os edits e maskedits que existam em FPrinc ?
Grato pela atenção.
Hacson Alexandre
Curtidas 0
Respostas
Carlos Mazzi
28/05/2010
Vc teria que armazenar , num flag, qual o ultimo tEdit selecionado pelo usuario , eu usuario a propriedade Tag que existe num Tedit, ou seja se recebesse um foco num campo, mudava esse tag para 1 , por exemplo...
e ai eu verificaria no meu teclado virtual dessa forma:
Por exemplo , a letra "A":
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i := 0 to ComponentCount -1 do
begin
if (Components[i] is TEdit) then
begin
if TEdit(Components[i]).tag = 1 then
begin
TEdit(Components[i]).Text:= TEdit(Components[i]).Text +'A';
end;
end;
end;
A rotina, conta quantos componentes sao Tedit, marca e visualiza a qual esta com a propriedade tag =1 , (ou vc pode mudar colocando diferente de 0...) e adiciono o string nela. O caminho das pedras ta ai.. agora pode ficar muito mas facil abstraindo mais esse metodo, para nao ter q criar campo a campo... Sugiro que passe a String por parametro. Abracos++
var i:integer;
begin
for i := 0 to ComponentCount -1 do
begin
if (Components[i] is TEdit) then
begin
if TEdit(Components[i]).tag = 1 then
begin
TEdit(Components[i]).Text:= TEdit(Components[i]).Text +'A';
end;
end;
end;
A rotina, conta quantos componentes sao Tedit, marca e visualiza a qual esta com a propriedade tag =1 , (ou vc pode mudar colocando diferente de 0...) e adiciono o string nela. O caminho das pedras ta ai.. agora pode ficar muito mas facil abstraindo mais esse metodo, para nao ter q criar campo a campo... Sugiro que passe a String por parametro. Abracos++
GOSTEI 0
Marco Salles
28/05/2010
Boa tarde a todos.
Não sei se esta questão já foi solucionada, então aí vai:
Tenho 2 forms (FPrinc e FSec). Em FPrinc eu tenho vários edits (ednome, edrua, edcasa, etc...). Em FSec eu acrescentei 25 botões que correspondem as letras do alfabeto.
O que eu estou pretendendo fazer é uma espécie de "Teclado Virtual". Se o usuário estiver com problemas no teclado, este chamará FSec para preencher o campo que estiver focado em Fprinc. EX: O usuário está preenchendo "ednome", ao chamar FSec o aplicativo fará o seguinte comando:
Onde o caption do Tbutton é justamente as letras do alfabeto.
O código funciona perfeitamente, o problema é que não posso colocar esse mesmo comando para todos os edits de FPrinc. Existe alguma forma de generalizar este comando para todos os edits e maskedits que existam em FPrinc ?
Grato pela atenção.
..
este codigo esta aonde ???
Não sei se esta questão já foi solucionada, então aí vai:
Tenho 2 forms (FPrinc e FSec). Em FPrinc eu tenho vários edits (ednome, edrua, edcasa, etc...). Em FSec eu acrescentei 25 botões que correspondem as letras do alfabeto.
O que eu estou pretendendo fazer é uma espécie de "Teclado Virtual". Se o usuário estiver com problemas no teclado, este chamará FSec para preencher o campo que estiver focado em Fprinc. EX: O usuário está preenchendo "ednome", ao chamar FSec o aplicativo fará o seguinte comando:
Fprinc.ednome.text := Fprinc.ednome.text + Tbutton(sender).caption;
Onde o caption do Tbutton é justamente as letras do alfabeto.
O código funciona perfeitamente, o problema é que não posso colocar esse mesmo comando para todos os edits de FPrinc. Existe alguma forma de generalizar este comando para todos os edits e maskedits que existam em FPrinc ?
Grato pela atenção.
Fprinc.ednome.text := Fprinc.ednome.text + Tbutton(sender).caption;
este chamará FSec para preencher o campo que estiver focado em Fprinc.
Acho que a solução para isto é simples basta uma Orientação a Objeto
GOSTEI 0
Saulo Benvenutti
28/05/2010
MARCO ... de for o delphi 2010, o componente teclado virtual é nativo ...
para as outras versões ... tbm existe na biblioteca da TMS ...
mas se quizer fazer na unha mesmo tera que usar hooks de teclado ...
ex.: keybd_event(222, 0, 0, 0); a função keydb_event chama a api de teclado e simula uma tecla pressionada ...procure na web sobre esta função e vc terá as informações que necessida para implementar o teclado ...
minha sugestão é vincular a tag de um sppedbutton ... na chamada !!!
espero ter ajudado
para as outras versões ... tbm existe na biblioteca da TMS ...
mas se quizer fazer na unha mesmo tera que usar hooks de teclado ...
ex.: keybd_event(222, 0, 0, 0); a função keydb_event chama a api de teclado e simula uma tecla pressionada ...procure na web sobre esta função e vc terá as informações que necessida para implementar o teclado ...
minha sugestão é vincular a tag de um sppedbutton ... na chamada !!!
espero ter ajudado
GOSTEI 0
Marco Salles
28/05/2010
MARCO ... de for o delphi 2010, o componente teclado virtual é nativo ...
para as outras versões ... tbm existe na biblioteca da TMS ...
mas se quizer fazer na unha mesmo tera que usar hooks de teclado ...
ex.: keybd_event(222, 0, 0, 0); a função keydb_event chama a api de teclado e simula uma tecla pressionada ... procure na web sobre esta função e vc terá as informações que necessida para implementar o teclado ...
minha sugestão é vincular a tag de um sppedbutton ... na chamada !!!
espero ter ajudado
nun sou eu que quero fazer não.. Conheço o tclado virtual do Delphi 2010
particularmente não gosto de usar tag ( engessa o codigo . é uma alternativa estrturada mas foge da OO)
não conheço o TMS , mas se for codigo aberto pode cumprir ao propósito
para as outras versões ... tbm existe na biblioteca da TMS ...
mas se quizer fazer na unha mesmo tera que usar hooks de teclado ...
ex.: keybd_event(222, 0, 0, 0); a função keydb_event chama a api de teclado e simula uma tecla pressionada ... procure na web sobre esta função e vc terá as informações que necessida para implementar o teclado ...
minha sugestão é vincular a tag de um sppedbutton ... na chamada !!!
espero ter ajudado
GOSTEI 0