| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
jairovital Novato

Registrado: Segunda-Feira, 25 de Abril de 2011 Mensagens: 37
|
Enviada: Dom Mai 26, 2013 6:37 pm Assunto: [RESOLVIDO] Abrir por código o OpenDialog do FilenameEdit |
|
|
Tenho um componente FilenameEdit, da RxLib, que gostaria de abrir um arquivo com ele através de uma tecla de atalho (CTRL-O).
Tentei o componente com a propriedade Dialog seguida da função Execute, mas ela é só uma propriedade e o retorno é boolean, ou seja, não se aplica.
Também tentei a procedure DoClick do componenente, mas não funciona e dá erro.
Ou seja, eu gostaria de abrir um arquivo pelo componente FilenameEdit usando uma tecla de atalho (hotkey). Alguém tem alguma dica boa?
Editado pela última vez por jairovital em Ter Mai 28, 2013 7:41 am, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Dom Mai 26, 2013 7:01 pm Assunto: |
|
|
| Código: | if Key = ^O then
begin
Key := #0;
JvFilenameEdit1.Dialog.Execute(Handle);
end; |
Testei com o Jedi, mas com o RX é a mesma coisa. |
|
| Voltar ao Topo |
|
 |
jairovital Novato

Registrado: Segunda-Feira, 25 de Abril de 2011 Mensagens: 37
|
Enviada: Seg Mai 27, 2013 7:44 am Assunto: |
|
|
Ôpa, Batera!
Que beleza ainda encontrar você por aqui, como sempre ensinando muita coisa boa!
Pois é, ainda não me aventurei pelo Jedi...
E o meu Delphi é o 7.
Está dando o seguinte erro em:
if Key = ^O then
Incompatible types.
Este If está no evento OnKeyDown do Form, que tem a seguinte definição:
TForm_LargLeg.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
Eu encontrei outro código que sugere colocar um componente Timer com intervalo de 1, e dentro dele colocar o seguinte:
| Código: |
var i:byte
for i:= 8 to 222 do begin
if GetAsyncKeyState(i)=-32767 then begin
case i of
65: begin
if GetKeyState(vk_control)<0 then
Button1Click(Sender);
end;
80: begin
if GetKeyState(vk_control)<0 then
Button2Click(Sender);
end;
end;
end;
|
O que você acha? Como usar duas teclas se não for possível aceitar ^O ?
Tentei colocar apenas uma tecla, com o seu código. Ficou assim:
if (key = VK_F12) then FilenameEdit1.Dialog.Execute(Handle);
E deu o seguinte erro:
Too many actual parameters.
Ideias?
. |
|
| Voltar ao Topo |
|
 |
adami Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010 Mensagens: 501
|
Enviada: Seg Mai 27, 2013 8:28 am Assunto: |
|
|
amigo tenta isso
no evento do formulario : OnKeyDown
//111 = O e 79 = o
if (key = 111) or (key = 79) then begin
OpenDialog1.Execute;
end; |
|
| Voltar ao Topo |
|
 |
jairovital Novato

Registrado: Segunda-Feira, 25 de Abril de 2011 Mensagens: 37
|
Enviada: Seg Mai 27, 2013 10:55 am Assunto: |
|
|
| adami escreveu: | amigo tenta isso
no evento do formulario : OnKeyDown
//111 = O e 79 = o
if (key = 111) or (key = 79) then begin
OpenDialog1.Execute;
end; |
E a tecla CTRL? E mais: eu não tenho o componente OpenDialog. Eu tenho o FilenameEdit. O diálogo é dele, e não do OpenDialog. Mas valeu a dica. |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Seg Mai 27, 2013 1:37 pm Assunto: |
|
|
Opa Jairo, to aqui ainda! rsrs
Jairo, o código que te passei é pra ser colocado no evento OnKeyPress! Não é no OnKeyDown não... |
|
| Voltar ao Topo |
|
 |
adami Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010 Mensagens: 501
|
Enviada: Seg Mai 27, 2013 2:28 pm Assunto: |
|
|
L = 76 //maiúsculo
l = 108 //minusculo
o OpenDialog é nativo do delphi, o delphi 7 possui ele, esta na aba Dialogs.
| jairovital escreveu: | | adami escreveu: | amigo tenta isso
no evento do formulario : OnKeyDown
//111 = O e 79 = o
if (key = 111) or (key = 79) then begin
OpenDialog1.Execute;
end; |
E a tecla CTRL? E mais: eu não tenho o componente OpenDialog. Eu tenho o FilenameEdit. O diálogo é dele, e não do OpenDialog. Mas valeu a dica. |
|
|
| Voltar ao Topo |
|
 |
jairovital Novato

Registrado: Segunda-Feira, 25 de Abril de 2011 Mensagens: 37
|
Enviada: Seg Mai 27, 2013 7:29 pm Assunto: |
|
|
| Batera escreveu: | Opa Jairo, to aqui ainda! rsrs
Jairo, o código que te passei é pra ser colocado no evento OnKeyPress! Não é no OnKeyDown não... |
Eu coloquei o código no evento OnKeyPress. Ocorre o mesmo erro no (Handle), "Too many actual parameters". Eu tirei o (Handle) e não ocorre erro, mas também não acontece nada ao pressionar CTRL-O no formulário...
| adami escreveu: | | o OpenDialog é nativo do delphi, o delphi 7 possui ele, esta na aba Dialogs. |
Eu sei que existe o componente OpenDialog na paleta do D7. Mas eu estava tentando fazer com o componente FilenameEdit, que tem sua própria caixa de diálogo. Se nada der certo nas minhas aventuras, sob orientação de Batera, aí eu vou apelar e usar o OpenDialog. Mas eu queria antes ver se seria possível usar somente o FilenameEdit. |
|
| Voltar ao Topo |
|
 |
jairovital Novato

Registrado: Segunda-Feira, 25 de Abril de 2011 Mensagens: 37
|
Enviada: Seg Mai 27, 2013 7:38 pm Assunto: |
|
|
@Batera:
Acabei de fazer outro teste: colocando o código no evento OnKeyPress do componente FilenameEdit, e não no evento do formulário, e também SEM colocar o (Handle), apenas FilenameEdit1.Dialog.Execute, a janela de diálogo para abrir o arquivo aparece, desde que eu esteja com o foco no FilenameEdit! Mas tenho dois problemas ainda: primeiro, ao selecionar um arquivo e pressionar o botão "Abrir", o nome do arquivo não é passado para o campo do FilenameEdit. Ou seja, não vai abrir o arquivo. Segundo, eu gostaria que o CTRL-O fosse pressionado com o foco em qualquer componente do formulário e não somente se o foco estiver no FilenameEdit.
Entendeu as paradas? Diz aí tua opinião, mestre Batera.
(ou outro colega que tenha a solução). |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Seg Mai 27, 2013 10:36 pm Assunto: |
|
|
Verdade Jairo... fiz o teste aqui também e aconteceu a mesma coisa.
Experimente trocar o evento OnKeyPress do formulário para:
| Código: | if Key = ^O then
begin
Key := #0;
JvFilenameEdit1.DoClick;
end; |
Aqui deu certo! rsrs |
|
| Voltar ao Topo |
|
 |
jairovital Novato

Registrado: Segunda-Feira, 25 de Abril de 2011 Mensagens: 37
|
Enviada: Ter Mai 28, 2013 7:39 am Assunto: |
|
|
Caríssimo colega Batera.
Funcionou! Mas faltou algo importantíssimo que nós nos esquecemos desde o começo. O formulário tem uma propriedade chamada KeyPreview. Essa propriedade é falsa, por padrão. É necessário que ela seja verdadeira para que qualquer evento KeyPress funcione.
Coloquei o seu código e nada e nada. Tentei e tentei e nada. Foi quando me lembrei da safada Keypreview, que estava em falso... Coloquei em verdadeira e... voilà!
Valeu! Tópico RESOLVIDO. |
|
| Voltar ao Topo |
|
 |
jairovital Novato

Registrado: Segunda-Feira, 25 de Abril de 2011 Mensagens: 37
|
Enviada: Ter Mai 28, 2013 8:37 am Assunto: |
|
|
Aproveitando mais uma raspinha do seu conhecimento, caso eu queira colocar F1 para Help, qual seria o valor de Key em Keypress do formulário?
Tentei VK_F1, tentei Key_F1 e também #70, mas nenhum deu certo. |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Ter Mai 28, 2013 9:08 am Assunto: |
|
|
Opa Jairo, que bom que deu certo!
Tem essa parada do KeyPreview mesmo, rsrs.
Eu acho que pro F1 você terá que utilizar o evento OnKeyDown do formulário:
| Código: | if Key = VK_F1 then
ShowMessage('F1 pressionado'); |
|
|
| Voltar ao Topo |
|
 |
jairovital Novato

Registrado: Segunda-Feira, 25 de Abril de 2011 Mensagens: 37
|
Enviada: Ter Mai 28, 2013 9:28 am Assunto: |
|
|
Batera, amigão, agora é só alegria! Deu tudo certo!
 |
|
| Voltar ao Topo |
|
 |
|