Simulando pressionamento de teclas no Forms

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

É possível simular o pressionamento de algumas teclas no Forms. Para isso, usa-se uma procedure da WIN_API_SHELL chamada SENDKEYS:

Selecionar tudo

Sintaxe:
PROCEDURE Win_Api_Shell.SendKeys 
(hWnd			IN	PLS_INTEGER,
 Keys			IN	VARCHAR2,
 RaiseExceptions	IN	BOOLEAN	DEFAULT FALSE);
Veja um pequeno exemplo, que simula o pressionamento da tecla DOWN:

Selecionar tudo

Win_Api_Shell.SendKeys (Win_Api_Utility.Get_Active_Window(TRUE)   ,'{Down}',FALSE);
Abaixo, outras teclas que podem ser usadas:

Selecionar tudo

                        {Backspace}
			{Break}
			{CapsLock}
			{Clear}
			{Delete}
			{End}
			{Enter}
			{Esc}
			{Help}
			{Home}
			{Insert}
			{NumLock}
			{PgDown}
			{PgUp}
			{PrtSc}
			{ScrollLock}
			{Tab}
			{F1} - {F12}
			{Up}
			{Down}
			{Left}
			{Right}
Pode ser feito combinações também! Elas devem estar dentro de parenteses.
LC_JK
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 46
Registrado em: Ter, 24 Ago 2004 2:02 pm
Localização: São Paulo
Contato:

mas onde eu posso colocar essa procedure?! no PROGRAM_UNIT?! ou coloco direto em uma trigger?!

como q faço pra simular?!
por exemplo

if ....
else..?!
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Sim, pode ser numa trigger, num botão, etc. Lembrando que o pressionamento de tecla acontecerá onde o cursor estiver.

Qual é a utilidade de "simular" o pressionamento de alguma tecla?

* Digamos que você quer sempre posicionar o cursor num item no quinto caractere. (sei lá porque, mas quer.. heheh). Daí, basta você simular o pressionamento do RIGHT 5 vezes no campo desejado...

Eu não pensei em tudo que pode ser feito... Sinceramente, eu nunca usei iso numa aplicação. Mas existe, e pode ser usado com criatividade em algum caso específico...

[]'s
jbruning
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Qua, 03 Nov 2004 11:25 am
Localização: São Ludgero - SC

Fiz o seguinte comando no WHEN-NEW-ITEM-INSTANCE:

Selecionar tudo

declare
hMDIWin PLS_INTEGER;
begin
  MDIWin := get_window_property  
                  (FORMS_MDI_WINDOW,WINDOW_HANDLE);
  Win_API_Shell.SendKeys(hMDIWin,'{End}',TRUE);
end;
Mas quando entro no campo aparece a mensagem: "Erro Interno do Oracle, ocorreu um erro de PL/SQL."
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

você conseguiu fazer essa rotina funcionar?
Já tentou colocar ela em algum botão pra testar?

Eu acabei de testar aqui e funcionou perfeitamente!
Lembrando que é necessario atachar a pll d2kwutil.pll no forms.
http://www.oracle.com/technology/softwa ... index.html

Ah... e também tem um errinho no código que você postou:
a variável é hMDIWin e não MDIWin !!!

Selecionar tudo

declare
hMDIWin PLS_INTEGER;
begin
  --arrumei abaixo
  hMDIWin := get_window_property  
                  (FORMS_MDI_WINDOW,WINDOW_HANDLE);
  Win_API_Shell.SendKeys(hMDIWin,'{End}',TRUE);
end;
Avatar do usuário
tfg
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 83
Registrado em: Seg, 03 Mai 2004 3:38 pm
Localização: Novo Hamburgo - RS

Sobre a d2kwutil.pll :

Pra fazer ela funcionar, é necessário criar uma chave no registro apontando pro diretório onde ela está.

Selecionar tudo

HKEY_LOCAL_MACHINE\Software\Oracle\D2KWUTIL60_PATH
(penei pra descobrir isso!!! :shock: )

[]´s
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:

Poxa tfg, você penou, mas por ter postado aqui, me ajudou e muito. Obrigado.
elkabong
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Seg, 31 Jul 2006 2:00 pm
Localização: Blumenau - SC

aí,

JBRUNING, o seu problema de erro interno foi resolvido com a dica do TFG ???
Pra mim continua apresentando "Erro Interno do Oracle, ocorreu um erro de PL/SQL."

Será que tem alguma coisa a ver com o fato de estar conectado remotamente ??? Sei lá....
Alguém teria alguma outra idéia ???

[]´s
Fábio Vitorino
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

Quais versões você está utilizando?
elkabong
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Seg, 31 Jul 2006 2:00 pm
Localização: Blumenau - SC

Forms [32 Bit] Version 6.0.8.23.2 (Production)
Windows 2000

[]´s
jramiro
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Seg, 21 Ago 2006 12:13 pm
Localização: rio de janeiro - RJ

ola pessoal, eu tb estou com esse erro.
já criei o registro apontando para onde esta dll, mas não corrigiu o erro?


estou usando a versao: Forms [32 Bit] Version 6.0.8.15.0 (Production)

desde já grato
Renan Orati
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 90
Registrado em: Qui, 23 Ago 2007 3:40 pm
Localização: São José do Rio Preto - SP

aí... será que com a D2KWUTIL tem como eu capturar a tecla que foi digitada também???? Ou ela apenas simula o pressionamento da tecla???

Porque eu estou querendo identificar quado o usuário pressiona a tecla ALT !!!

alguém tem uma dica?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Renan Orati escreveu:aí... será que com a D2KWUTIL tem como eu capturar a tecla que foi digitada também???? Ou ela apenas simula o pressionamento da tecla???

Porque eu estou querendo identificar quado o usuário pressiona a tecla ALT !!!

alguém tem uma dica?
Acho que você não vai conseguir isso com a D2KWUTIL... Na verdade acho pouco provável você conseguir isso :-(
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

Isso porque o Forms não gera evento de pressionamento de tecla.
Ele não tem uma trigger "on_key_press" por exemplo.
Concordo com o dr_gori, acho difícil conseguir algo assim.
davidmeloboy
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Sex, 05 Set 2008 1:53 pm
Localização: Parobé - RS
Contato:
David.

Ta certo já estou conseguindo dar o print, mas agora tem um porém, tem como eu jogar este printe para algum lugar automaticamente?
por exemplo: anexado em um email.
ou jogar para algum diretório?
davidmeloboy
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Sex, 05 Set 2008 1:53 pm
Localização: Parobé - RS
Contato:
David.

Galera estou aguardando uma resposta! É muito importante!
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 18 visitantes