GARANTIR DESCONTO

Fórum Como compilar 2 projetos Delphi num soh .exe um projeto cha #288168

15/07/2005

0

Estou com um problemas pois preciso q no momento em que inicio um form Inicial (naum splash) eu tenha a opção de executar outro projeto compilado no mesmo .exe.





Obrigado


O4pr3ndiz

O4pr3ndiz

Responder

Posts

15/07/2005

Adriano Santos

Procure um artigo que escrevi na seção Artigos aqui do ClubeDelphi. O nome do artigo é : [b:53b4f8f76c][color=red:53b4f8f76c]Arquivos de Recursos[/color:53b4f8f76c][/b:53b4f8f76c]

Aqui eu coloquei no onCreate, mas você pode colocar em qualquer lugar.
O segredo está no WinExec depois que o arquivo executável é ´descompactado´ (extraído) de dentro do seu executável principal.

procedure TForm1.FormCreate(Sender: TObject);
    procedure CopiarEExecutar;
    var
      DirDestino : String;
      NomeArquivo: String;
      Fres : TResourceStream;
      fFile : TFileStream;
    begin
      DirDestino := ´C:\Temp\´;
      NomeArquivo := ´MeuExecutavel.exe´;
      {Cria uma instância de TResourceStream para manipulá-lo mais tarde}
      Fres := TResourceStream.Create(0,´MEURECURSO_NO_PROJETO´,RT_RCDATA);
      {Cria em memória o arquivo gravado no Resource}
      fFile := TFileStream.Create(DirDestino + NomeArquivo,fmCreate);
      try
        {Copia do Resource}
        Ffile.CopyFrom(Fres,Fres.Size);
        MessageDlg(´O Arquivo: ´ + NomeArquivo + ´ foi copiado com êxito e será executado.´,mtError,[mbOK],0);
        WinExec(PChar(DirDestino + NomeArquivo), SW_SHOWNORMAL);
      finally
        {Libera as variáveis necessárias.}
        Fres.Free;
        Ffile.Free;
      end;
    end;
begin
  CopiarEExecutar;
end;
[i:53b4f8f76c][/i:53b4f8f76c]


Responder

Gostei + 0

15/07/2005

Adriano Santos

Cometi um erro.
O WinExec tem que vir depois que a variável TResourceStream for liberada, caso contrário o programa não será aberto. Veja o fonte correto:

procedure TForm1.FormCreate(Sender: TObject);
    procedure CopiarEExecutar;
    var
      DirDestino : String;
      NomeArquivo: String;
      Fres : TResourceStream;
      fFile : TFileStream;
    begin
      DirDestino := ´C:\Temp\´;
      ForceDirectories(DirDestino);
      NomeArquivo := ´Calc.exe´;
      {Cria uma instância de TResourceStream para manipulá-lo mais tarde}
      Fres := TResourceStream.Create(0,´MEU_RECURSO´,RT_RCDATA);
      {Cria em memória o arquivo gravado no Resource}
      fFile := TFileStream.Create(DirDestino + NomeArquivo,fmCreate);
      try
        {Copia do Resource}
        Ffile.CopyFrom(Fres,Fres.Size);
        MessageDlg(´O Arquivo: ´ + NomeArquivo + ´ foi copiado com êxito e será executado.´,mtError,[mbOK],0);
      finally
        {Libera as variáveis necessárias.}
        Fres.Free;
        Ffile.Free;
      end;
      WinExec(PChar(DirDestino + NomeArquivo), SW_SHOWNORMAL);
    end;
begin
  CopiarEExecutar;
end;



Responder

Gostei + 0

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

Aceitar