Ir para conteúdo
Fórum Script Brasil
  • 0

Aplicativo Não Fecha!


Cleverson Honório Gouvêa

Pergunta

Aew Galera, tenho aqui a minha aplicação ela funciona toda perfeita!!!

Mas quando eu uso algum dos Form`s que imprimem um Relatório com o RVProject eu imprimo legal, fecho os form`s mas na hora de fechar o Projeto ele não fecha!!!

Minha aplicação fica aberta gerando assim vários erros se quero abrir ela novamente e etc...

O código que eu uso pra imprimir é o seguinte:

RvProject1.ExecuteReport('Report1');

Daí abre a janelinha pra imprimir!!!

Alguém tem alguma idéia???

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
Guest Guilherme Rosa

Tente o seguinte.

Antes da linha Application.Terminate da sua aplicação use a seguinte funcao:

Declare na cláusula Uses do form as 2 units: TLHelp32, PsAPI;

Agora vamos aos códigos:

Adicione logo abaixo da cláusula implementation as funções abaixo:

function TerminateProcesso(sFile: string): Bool;

var

verSystem: TOSVersionInfo;

hdlSnap,hdlProcess: THandle;

bPath,bLoop: Bool;

peEntry: TProcessEntry32;

arrPid: array [0..1023] of DWord;

iC: DWord;

k,iCount: Integer;

arrModul: array [0..299] of Char;

hdlModul: HMODULE;

begin

result:=false;

if ExtractFileName(sFile)=sFile then

bPath:=false

else

bPath:=true;

verSystem.dwOSVersionInfoSize:=SizeOf(TOSVersionInfo);

GetVersionEx(verSystem);

if verSystem.dwPlatformId=VER_PLATFORM_WIN32_WINDOWS then

begin

hdlSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

peEntry.dwSize:=Sizeof(peEntry);

bLoop:=Process32First(hdlSnap,peEntry);

while integer(bLoop)<>0 do

begin

if bPath then

begin

if CompareText(peEntry.szExeFile,sFile)=0 then

begin

TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,peEntry.th32ProcessID) ,0);

result:=true;

end;

end

else

begin

if CompareText(ExtractFileName(peEntry.szExeFile),sFile)=0 then

begin

TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,peEntry.th32ProcessID) ,0);

result:=true;

end;

end;

bLoop:=Process32Next(hdlSnap,peEntry);

end;

CloseHandle(hdlSnap);

end

else

if verSystem.dwPlatformId=VER_PLATFORM_WIN32_NT then

begin

EnumProcesses(@arrPid,SizeOf(arrPid),iC);

iCount:=iC div SizeOf(DWORD);

for k:=0 to Pred(iCount) do

begin

hdlProcess:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,false,arrPid [k]);

if (hdlProcess<>0) then

begin

EnumProcessModules(hdlProcess,@hdlModul,SizeOf(hdlModul),iC);

GetModuleFilenameEx(hdlProcess,hdlModul,arrModul,SizeOf(arrModul));

if bPath then

begin

if CompareText(arrModul,sFile)=0 then

begin

TerminateProcess(OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,False,arrPid [k]), 0);

result:=true;

end;

end

else

begin

if CompareText(ExtractFileName(arrModul),sFile)=0 then

begin

TerminateProcess(OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,False,arrPid [k]), 0);

result:=true;

end;

end;

CloseHandle(hdlProcess);

end;

end;

end;

end;

Exemplo:

Terminateprocesso(extractfilepath(Application.ExeName)+'MinhaAplicacao.exe');

Link para o comentário
Compartilhar em outros sites

  • 0

Quando você fechar o formulario dos relatório você Elimina tudo que se refere a ele, pois não ira utiliza-lo ate chamalo de de novo.

você vai no OnClose deste formulario e coloca :

nomedoformulario := nil;

e/ou

Self.action := caFree;

Não sei se isso ajuda.

Mas seria bom tentar

Boa sorte

Editado por Luis Ricardo
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...