|
![]() |
||
Abrindo arquivos via Windows com Delphi
|
||
. Nós temos 759.325 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.
![]() |
|
|
Opções do Tópico |
|
|
#1 (permalink) |
|
Super Participante
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22
![]() |
Olá pessoal!
Estou com problemas quanto à integração de um programa com o Windows. É simples, quero que utilizando a opção abrir com do windows ou mesmo dando dois cliques (uma vez que a associação tenha sido feita no Windows) o meu programa abra o arquivo selecionado. Tentei utilizar ParamStr mas debugando o programa e verificando a variável com o watch informa é inacessível... Porém não dá erro, simplesmente abre o programa como se eu tivesse rodado ele direto do executavel... Eu li que o ParamStr é da unit System que não está na minha uses clause, porém se eu tentar colocar ele diz que a unidade já foi definida... Então alguma sugestão?
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better. |
|
|
|
|
|
#2 (permalink) |
|
Zumbi
|
É com o ParamStr mesmo. Por exemplo, um programinha que pega o primeiro parâmetro passado e abre uma caixa de mensagem com ele:
Código:
__________________
Minha coleção de jogos (todos originais) |
|
|
|
|
|
#3 (permalink) | |
|
Super Participante
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22
![]() |
Citação:
E é isso que eu estou fazendo, porém não no código do projeto, tem q ser lá? No form MDI principal eu coloquei um if ParamCount > 1 then aí crio o MDI child e passo o ParamStr(1) como parametro do arquivo, porém ele está abrindo um arquivo vazio e quando eu rodei colocando um breakpoint nessa linha, vi que ele informa inacessible value tanto para o ParamCount quanto para o ParamStr...
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better. |
|
|
|
|
|
|
#4 (permalink) | |
|
Zumbi
|
Citação:
__________________
Minha coleção de jogos (todos originais) |
|
|
|
|
|
|
#5 (permalink) | |
|
Super Participante
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22
![]() |
Citação:
Estou sem o código agora, amanhã posto!
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better. |
|
|
|
|
|
|
#6 (permalink) |
|
Super Participante
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22
![]() |
Aí vai:
Código:
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better. |
|
|
|
|
|
#7 (permalink) | |
|
Zumbi
|
Citação:
__________________
Minha coleção de jogos (todos originais) |
|
|
|
|
|
|
#8 (permalink) |
|
Super Participante
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22
![]() |
É sim, conforme ai embaixo... O procedimento funciona normalmente quando chamado pelo OpenDialog...
Código:
assignfile(arquivoini, ExtractFilePath(ParamStr(0)) + 'hdpad.ini') normalmente...
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better. |
|
|
|
|
|
#9 (permalink) | |
|
Zumbi
|
Citação:
__________________
Minha coleção de jogos (todos originais) |
|
|
|
|
|
|
#10 (permalink) |
|
Zumbi
|
Só mais uma coisa, o nome do arquivo é o segundo parâmetro na chamada do executável, né? Porque só passa por esse teste se houverem dois parâmetros:
if ParamCount > 1 then
__________________
Minha coleção de jogos (todos originais) |
|
|
|
|
|
#11 (permalink) | |
|
Super Participante
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22
![]() |
Citação:
Já tentei como linha de comando mesmo ("c:\arquivos de programas\borland\delphi\projetcs\hdpad\hdpad.exe" c:\teste.txt) e não vai pra canto nenhum...
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better. |
|
|
|
|
|
|
#12 (permalink) | |
|
Zumbi
|
Citação:
if ParamCount > 0 then
__________________
Minha coleção de jogos (todos originais) |
|
|
|
|
|
|
#13 (permalink) | |
|
Super Participante
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22
![]() |
Citação:
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better. |
|
|
|
|
|
|
#14 (permalink) | |
|
Zumbi
|
Citação:
__________________
Minha coleção de jogos (todos originais) |
|
|
|
|
|
|
#15 (permalink) | |
|
Super Participante
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22
![]() |
Citação:
O problema agora se transformou em outro, ao tentar criar o form child está dando algo como Could not create form. There is no active MDI form. Porém o form está ativo, inclusive antes esse mesmo código funcionava, agora q botei essas variáveis q tá dando pau... O código q funcionava era o seguinte: Código:
Código:
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better. |
|
|
|
|
|
|
#16 (permalink) | |
|
Zumbi
|
Citação:
__________________
Minha coleção de jogos (todos originais) |
|
|
|
|
|
|
#17 (permalink) | |
|
Super Participante
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22
![]() |
Citação:
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better. |
|
|
|
|
|
|
#18 (permalink) | |
|
Zumbi
|
Citação:
ops: :lol:
__________________
Minha coleção de jogos (todos originais) |
|
|
|
|
|
|
#19 (permalink) | |
|
Super Participante
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22
![]() |
Citação:
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better. |
|
|
|
|
|
|
#20 (permalink) |
|
Super Participante
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22
![]() |
Descobri o problema, uma das chamadas do procedimento estava vindo do TPrincipalForm.Create, então na verdade o form ainda não estava criado quando a chamada era feita... Resolvi botando um timer para so chamar a função depois de 0.1 segundo... Mas será que não teria uma solução mais elegante q esse hack?
Outra coisa, voltando à questão do tópico, existe alguma maneira fácil de lidar com nomes de diretórios com espaço ou só fazendo uma função para gerenciar isso? Tipo: c:\arquivos de programas\borland\delphi\projects\pad.exe c:\windows\profiles\gustavo bastos\desktop\teste.txt Na verdade ele acha que c:\windows\profiles\gustavo é o parâmetro 1 e bastos\desktop\teste.txt o 2...
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better. |
|
|
|
![]() |
| Opções do Tópico | |
|
|