Logo Hardware.com.br
GBastos
GBastos Super Participante Registrado
777 Mensagens 4 Curtidas

Abrindo arquivos via Windows com Delphi

#1 Por GBastos 05/05/2003 - 17:11
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?
romulo
romulo General de Pijama Registrado
7.4K Mensagens 0 Curtidas
#2 Por romulo
05/05/2003 - 17:37
É com o ParamStr mesmo. Por exemplo, um programinha que pega o primeiro parâmetro passado e abre uma caixa de mensagem com ele:


program Mensagem;

uses
Forms;

{$R *.RES}

begin
Application.Initialize;
Application.Run;
Application.MessageBox(PChar(ParamStr(1)), 'Mensagem', 0);
end.


Lembrando que ParamStr(0) retorna o caminho do executável.
Minha coleção de jogos (todos originais)
GBastos
GBastos Super Participante Registrado
777 Mensagens 4 Curtidas
#3 Por GBastos
05/05/2003 - 17:49
romulo
É com o ParamStr mesmo. Por exemplo, um programinha que pega o primeiro parâmetro passado e abre uma caixa de mensage...


Mas e onde fica afinal a maldita unit system?

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.
romulo
romulo General de Pijama Registrado
7.4K Mensagens 0 Curtidas
#4 Por romulo
05/05/2003 - 18:22
GBastos
Mas e onde fica afinal a maldita unit system?

E é isso que eu estou fazendo, porém não no código do projeto, tem q...


Você não precisa declarar, ela já fica disponível automaticamente. Você está debugando dentro do Delphi mesmo né? Você lembrou de colocar uns parâmetros para teste no Run->Parameters? Se não der certo, posta o código aí.
Minha coleção de jogos (todos originais)
GBastos
GBastos Super Participante Registrado
777 Mensagens 4 Curtidas
#8 Por GBastos
06/05/2003 - 17:36
É sim, conforme ai embaixo... O procedimento funciona normalmente quando chamado pelo OpenDialog...

procedure TEditorForm.Abrir(const Arquivo: string);
begin
Nomedoarquivo := Arquivo; {parametro passado}
RichEdit1.Lines.LoadFromFile(Nomedoarquivo);
Caption := ExtractFilename(Nomedoarquivo);
end;


Não entendo pq dá valor inacessivel se em outro procedimento utilizo
assignfile(arquivoini, ExtractFilePath(ParamStr(0)) + 'hdpad.ini') normalmente...
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better.
GBastos
GBastos Super Participante Registrado
777 Mensagens 4 Curtidas
#11 Por GBastos
07/05/2003 - 11:16
romulo
Só mais uma coisa, o nome do arquivo é o segundo parâmetro na chamada do executável, né? Porque só passa por esse tes...


É, como eu disse botei lá no parameters o nome do arquivo e ai q dá como valor inacessivel... Como pode dar valor inacessivel e não dar erro? As variáveis e funçoes da unit system sao otimizadas em tempo de execução para economizar memoria?

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.
GBastos
GBastos Super Participante Registrado
777 Mensagens 4 Curtidas
#15 Por GBastos
09/05/2003 - 15:09
romulo
Exatamente.


Era isso mesmo! Outra coisa, fiz uns testes e descobri que essas variáveis ficam inacessiveis devido a otimizaçã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:
procedure TPrincipalForm.NovoArquivo(Sender: TObject);
begin
QuantJanelasNovas := QuantJanelasNovas + 1;
TEditorForm.Create(self);
end;


Pode parecer estranho mas funcionava, agora mudei para:
procedure TPrincipalForm.NovoArquivo(Sender: TObject);
var
EditorForm: TEditorForm;
begin
QuantJanelasNovas := QuantJanelasNovas + 1;
EditorForm := TEditorForm.Create(Self);
if ParamCount > 0 then
EditorForm.Abrir(ParamStr(1));
end;


E dá esse erro q falei na linha do Create... Tentei tb mudar o nome do procedimento para NewChild como aconselha a documentação do Delphi, mas dá o mesmo erro...
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better.
© 1999-2025 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal