Como abrir vários arquivos via ParamStr(i) com MDIChild[i] ?
14/05/2020
0
Bom dia Pessoal,
Estou desenvolvendo uma aplicação em Delphi e estou enfrentando duas dificuldades. Preciso abrir um arquivo através do ParamStr(i) na minha aplicação. Isso já consegui. Porém, a primeira dificuldade é fazer o software reconhecer quando se abre mais de 1 parâmetro ao mesmo tempo, pois envio 2 arquivos ao mesmo tempo, e a aplicação abre somente 1.
A Segunda dificuldade é fazer abrir o(s) arquivo(s) também quando o meu software já está aberto, pois este trabalha com MDIChild[i] e posso abrir quantos arquivos eu quiser. Com esse código, mesmo usando Mutex, ele cria 2 instâncias do software.
Código Abaixo:
var
Hwnd: THandle;
begin
//cria um mutex usando um nome único
CreateMutex(nil, False, 'App.exe');
//verifica se houve erro na criação
if GetLastError = ERROR_ALREADY_EXISTS then
begin
if ParamCount > 0 then // verifica se foi passado parâmetro para abrir arquivos
begin
for I := 0 to ParamCount - 1 do
begin
if ParamStr(I) <> '' then
begin
LoadArquivo(ParamStr(I)); //Cria um MDIChild e carrega o arquivo passado por parâmetro (funcionado bem)
end else
begin
showmessage('Este Programa já está sendo executado'); // Se já houver uma instância do software sendo executada, mostra essa mensagem
Halt(0); // cancela execução
end;
end;
end;
end;
end;
Alguém poderia me ajudar com essas duas dificuldades, por gentileza?
Estou desenvolvendo uma aplicação em Delphi e estou enfrentando duas dificuldades. Preciso abrir um arquivo através do ParamStr(i) na minha aplicação. Isso já consegui. Porém, a primeira dificuldade é fazer o software reconhecer quando se abre mais de 1 parâmetro ao mesmo tempo, pois envio 2 arquivos ao mesmo tempo, e a aplicação abre somente 1.
A Segunda dificuldade é fazer abrir o(s) arquivo(s) também quando o meu software já está aberto, pois este trabalha com MDIChild[i] e posso abrir quantos arquivos eu quiser. Com esse código, mesmo usando Mutex, ele cria 2 instâncias do software.
Código Abaixo:
var
Hwnd: THandle;
begin
//cria um mutex usando um nome único
CreateMutex(nil, False, 'App.exe');
//verifica se houve erro na criação
if GetLastError = ERROR_ALREADY_EXISTS then
begin
if ParamCount > 0 then // verifica se foi passado parâmetro para abrir arquivos
begin
for I := 0 to ParamCount - 1 do
begin
if ParamStr(I) <> '' then
begin
LoadArquivo(ParamStr(I)); //Cria um MDIChild e carrega o arquivo passado por parâmetro (funcionado bem)
end else
begin
showmessage('Este Programa já está sendo executado'); // Se já houver uma instância do software sendo executada, mostra essa mensagem
Halt(0); // cancela execução
end;
end;
end;
end;
end;
Alguém poderia me ajudar com essas duas dificuldades, por gentileza?
Ricardo
Curtir tópico
+ 0
Responder
Post mais votado
14/05/2020
tente assim:
var Hwnd: THandle; begin //cria um mutex usando um nome único CreateMutex(nil, False, 'App.exe'); //verifica se houve erro na criação if (GetLastError = ERROR_ALREADY_EXISTS) then // se há uma instância, avisa e sai begin showmessage('Este Programa já está sendo executado'); // Se já houver uma instância do software sendo executada, mostra essa mensagem Halt(0); // cancela execução end else if (ParamCount > 0) then // verifica se foi passado parâmetro para abrir arquivos for i := 0 to ParamCount - 1 do begin arquivo := ParamStr(i); if (arquivo <> '') and file(arquivo) then LoadArquivo(arquivo); // Cria um MDIChild e carrega o arquivo passado por parâmetro (funcionado bem) end; end;
Emerson Nascimento
Responder
Mais Posts
23/05/2020
Ricardo
tente assim:
var Hwnd: THandle; begin //cria um mutex usando um nome único CreateMutex(nil, False, 'App.exe'); //verifica se houve erro na criação if (GetLastError = ERROR_ALREADY_EXISTS) then // se há uma instância, avisa e sai begin showmessage('Este Programa já está sendo executado'); // Se já houver uma instância do software sendo executada, mostra essa mensagem Halt(0); // cancela execução end else if (ParamCount > 0) then // verifica se foi passado parâmetro para abrir arquivos for i := 0 to ParamCount - 1 do begin arquivo := ParamStr(i); if (arquivo <> '') and file(arquivo) then LoadArquivo(arquivo); // Cria um MDIChild e carrega o arquivo passado por parâmetro (funcionado bem) end; end;
Obrigado pela resposta, consegui resolver a situação abrindo o primeiro arquivo via ParamStr(i) e os outros através de Message do windows.
Responder
Clique aqui para fazer login e interagir na Comunidade :)