Array
(
)

AppletModule

Renatacoimbra
   - 05 dez 2005

Olá Pessoal !

é possivel usar um arquivo recursos.res dentro de um AppletModule

#Código


implementation

{$R *.dfm}
{$R \Resource\Resource.res}



sempre fala q não achou o arquivo de recurso quando tento usa-lo.

Obrigada.


Renatacoimbra
   - 05 dez 2005

Só pra constar:

dentro do meu arquivo de recursos tem essa linha:

Recurso1 RCDATA configBD.exe

quando tento extrair o arquivo fala q não encontrou o recurso1


Renatacoimbra
   - 06 dez 2005

Alguém pode me ajudar ?

...


Emerson
   - 06 dez 2005

dentro do seu arquivo de recursos não pode haver a linha
Recurso1 RCDATA configBD.exe
o arquivo de recursos é um arquivo compilado!

faça assim:
crie um arquivo chamado Resource.RC e ponha essa sua linha nele.

depois compile seu arquivo com a seguinte linha de comando no prompt:
brcc32 Resource.RC
(brcc32 está na pasta ¬DELPHI¬\Bin)

depois de executar essa linha será gerado o arquivo Resource.res.


Renatacoimbra
   - 06 dez 2005

Obrigada emerson.en pela atenção

sim a linha citada está dentro do Resource.RC depois compilei e gerou o .res


Linha dentro do Resource.RC:
Recurso1 RCDATA configBD.exe

mais quando tento extrair o arquivo de dentro do .res fala q não encontrou o
Recurso1


Emerson
   - 06 dez 2005

publique aqui o código de extração que você utilizou...

um exemplo seria:
#Código

Procedure SaveConfigDB;
var
PathToSave : String;
Res : TResourceStream;
begin
PathToSave := ExtractFilePath(Application.ExeName)+´\ConfigDB.exe´;
if not FileExists(PathToSave) then
begin
Res := TResourceStream.Create(Hinstance, ´Recurso1´, ´RCDATA´);
try
Res.SavetoFile(PathToSave);
finally
Res.Free;
end;
end;
end;



Renatacoimbra
   - 06 dez 2005

Está dentro de um for porque tem mais de um arquivo.

#Código


// Extrair arquivos de configuracao
procedure InstalarArquivos;
var
i: integer;
Fres: TResourceStream;
fFile: TFileStream;
begin

//Setar Path e nome dos arquivos de destino
SetPathFiles;
for i := 0 to Files.Count - 1 do begin
//Extrair arquivo do Resource
Fres := TResourceStream.Create(0, ´RECURSO´ + IntToStr(i + 1), RT_RCDATA);
fFile := TFileStream.Create(Paths[i] + Files[i], fmCreate);
try
//Copiar arquivo para o local indicado
Ffile.CopyFrom(Fres, Fres.Size);
finally
//Destruir objetos
Fres.Free;
Ffile.Free;
end;

end;

end;



Emerson
   - 07 dez 2005

talvez porque a função seja case sensitive. tente colocar da mesma forma que você escreveu no arquivo .RC

TResourceStream.Create(0, ´Recurso´ + IntToStr(i+1), ´RCDATA´)

uma outra coisa: porque RT_RCDATA? no arquivo você colocou somente RCDATA, não foi?


Renatacoimbra
   - 07 dez 2005

emerson.en eu acho q o problema não é o RT_RCDATA, com ele tb funciona,

será se não é porque esse aplicativo é um CPL

{$E cpl}

é uma DLL daquelas q ficam no Painel de Controle do Windows?

testei essa mesma rotina com um aplicativo EXE normal e funciona certinho.