Cleverson Honório Gouvêa
08/12/2006 - 13:18
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???
Borland_Linuxer
09/12/2006 - 16:32
Amigo eu faço assim:
abs
rvprjPrd.Close;
rvprjPrd.ProjectFile:='D:\Delphi\Projetos\Active delphi artigo\Relatorio entre datas\Parte IV\produtos.rav';
rvprjPrd.Open;
rvprjPrd.Execute;
Cleverson Honório Gouvêa
11/12/2006 - 13:43
Rapaz, mesmo assim, quando uso um Form que usa essa código no final o meu aplicativo não fecha!!!
É como se algo ainda estivesse aberto!!!
Será que você sabe o que pode ser??
Cara, pelo que entendi você fecha e depois imprime, é isso?
Teria como você enviar a impressão e depois fechar o form?
Acho que daí vai numa boa.
Eder Moraes
15/12/2006 - 08:35
Amigo isso pode ser um problema na aplicacao Rave, no componente RvProject use a propriedade "Store" que faz com que o relatorio fique seja carregado para dentro de sua aplicacao, Mais todas as vezes que alterar algo no relatorio externo voce tem que executar novamente o Store.
Guilherme Rosa
02/07/2008 - 15:08
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');
Luis Ricardo
02/07/2008 - 15:58
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