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?
Ricardo

Ricardo

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

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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar