Página 1 de 2

Listar Resources? Alguém Sabe?

Enviado: 15 Out 2016 12:36
por fladimir
Olá pessoal...

Existe alguma função que traga a lista de Resources... exemplo no ADVPL da TOTVS eles tem uma função pelo q vi chamada GetArrayRes q traz a lista de resorces em um array... queria algo semelhante.

[]'s

Listar Resources? Alguém Sabe?

Enviado: 15 Out 2016 17:16
por asimoes
Directory() não resolve?

Listar Resources? Alguém Sabe?

Enviado: 15 Out 2016 18:03
por fladimir
Não seriam os arquivos RC e sim o q é incorporado no EXE...

Explico...

antes meus relatórios FR3 (fastreport) eram arquivos externos soltos na pasta Relatórios... agora todos eles estão incorporados ao EXE, ou seja, não precisa mais enviar os FR3 junto nem se alguém apagar o sistema ter q baixar pra rodar o relatório pois fazem parte do EXE.

Ok até ai tudo certo.

Porém quero deixar de uma forma q se em determinado cliente precisar ter um relatório PERSONALIZADO então vai em determinada opção no sistema chamada Editar Relatórios do Sistema e aparece uma LISTA de tais relatórios, esta LISTA pra eu não ter q toda vez q criar um relatório e mencionar no arquivo RC ter q adicionar ao ARRAY manualmente gostaria, se tiver como, através de uma função listar todos os Recursos q estão incorporados no sistema...

Hoje esta assim:

Conteúdo do arquivo Sistema.RC (compilado e incorporado ao EXE)

Código: Selecionar todos

relContrato     RCDATA    "D:\Projetos\Sistema\Relatorios\Contrato.FR3"
relEstoque       RCDATA    "D:\Projetos\Sistema\Relatorios\Estoque.FR3"
Ai qdo vou no sistema em Editar Relatórios crio um Menu Achoice a partir de um Array com o nome dos relatórios assim:

Código: Selecionar todos

aRelatorios := { "relContrato", "relEstoque" }
Ai o usuário escolhe o relatório e eu eu abro no Fast o relatório em modo Design pra poder Alterar e Salvar como o mesmo nome exemplo relContrato.FR3 (relatório a partir do Resource alterado e salvo na pasta do sistema)

Este procedimento será feito pela área técnica pra evitar de usuários ficarem modificando sem conhecimento.

Ai na parte q carrega os relatórios ficaria assim...

Código: Selecionar todos

...
CarregaRelatorio("relContrato")
...

function CarregaRelatorio( cNomeRelatorio )
   *-- Verifica se existe arquivo de relatório personalizado, caso não carrega do Resource.
   if file( cNomeRelatorio + '.FR3)
       oFR:LoadFromFile( cNomeRelatorio+'.FR3') 
   else
      oFR:LoadFromResource(cNomeRelatorio)
   endif
return nil
Tudo isto já funciona, porém se tivesse como listar os relatórios contidos no EXE através do Resource, evitaria falha de eu incorporar um relatório e esquecer de alterar a rotina de personalização.

[]´s

Listar Resources? Alguém Sabe?

Enviado: 15 Out 2016 19:21
por asimoes
Fladimir,

Entendi agora.

Achei esse cara Resource Viewer
http://www.heaventools.com/rt-tour-resource-viewer.htm

Não sei se vai te atender.

Listar Resources? Alguém Sabe?

Enviado: 15 Out 2016 20:55
por fladimir
Obrigado Alexandre, mas esse aplicativo seria pra visualizar os resources de fora, o q eu gostaria era q meu sistema visualizasse os resources exitentes e tratasse isso filtrando os q são relatorios FR3 pra montar um menu pra poder editar de forma automática, hj monto isso manualmente.

Pesquisei e em FiveWin tem uma função em C chamada GetResources() q teria esta informação...

Mas blz... vamos continuando, caso eu consiga migrar esta função para o Harbour posto aki.

Mais uma vez agradeço a força.

[]´s

Listar Resources? Alguém Sabe?

Enviado: 15 Out 2016 21:12
por asimoes
Fladimir,

Estou procurando no google, eu acho interessante obter essa informação.

Achei isso:

http://www.codeproject.com/Articles/422 ... -resources

A minha busca está indo nessa linha:

extract Resource from executable c++

Provavelmente você terá que achar um código em C ou C++ e portar para uma função harbour.

Tamu junto!

Listar Resources? Alguém Sabe?

Enviado: 15 Out 2016 21:24
por asimoes
Achei um que extrai todos os resources do .exe, sei que não é isso que você quer, mas pode ser útil, é free

https://sourceforge.net/projects/resourcextract/files/

Listar Resources? Alguém Sabe?

Enviado: 15 Out 2016 21:48
por wmanesco
Não sei se eu entendi direito, desculpe caso não tenha entendido.

Não teria como você ler os RCs e procurar por exemplo por "RCDATA" e ir pegando os nomes dos recursos?

Listar Resources? Alguém Sabe?

Enviado: 15 Out 2016 23:32
por fladimir
É por ai mesmo Alexandre... vou ver se consigo algo

Willian, não poderia pq os RC não vão pro cliente

Listar Resources? Alguém Sabe?

Enviado: 16 Out 2016 08:10
por JoséQuintas
Estou estranhando....

Você mesmo digita o nome no RC, antes de compilar.
E você quer uma lista do que você mesmo digita?
Não seria só digitar o mesmo nome no RC e no PRG?

Listar Resources? Alguém Sabe?

Enviado: 16 Out 2016 08:15
por JoséQuintas
o que o wmanesco escreveu está correto.
Se for o caso, você pode criar uma rotina, pra ser executada ANTES da compilação, que cria o PRG pra você a partir do arquivo RC.
Executaria a rotina antes de fazer a compilação, e já compilaria o PRG contendo a lista de resource.

Listar Resources? Alguém Sabe?

Enviado: 16 Out 2016 09:39
por asimoes
Fladimir,

Você pode incluir no .rc o próprio .rc como texto e depois acessar/listar.

Listar Resources? Alguém Sabe?

Enviado: 16 Out 2016 10:06
por fladimir
Verdade pessoal...

Vou tentar aki obrigado

Listar Resources? Alguém Sabe?

Enviado: 16 Out 2016 10:46
por asimoes
No arquivo seu.rc

FileRC TXT SEU.RC

Para ler:

Código: Selecionar todos

cDataRC   := Hb_LoadResourceRawFile ( "FileRC", "TXT"  )

#pragma BEGINDUMP
#include <Windows.h>
#include <hbApi.h>

//        HMG_LoadResourceRawFile ( cFileName, cTypeResource | nTypeResourceID )
HB_FUNC ( HB_LOADRESOURCERAWFILE )
{
   HRSRC   hResourceData;
   HGLOBAL hGlobalResource;
   LPVOID  lpGlobalResource = NULL;
   DWORD   nFileSize;
   TCHAR   *FileName     = (TCHAR*) hb_parc(1);
   TCHAR   *TypeResource = HB_ISCHAR (2) ? (TCHAR*) hb_parc(2) : MAKEINTRESOURCE ( hb_parni(2) );

   hResourceData = FindResource ( NULL, FileName, TypeResource );
   if ( hResourceData != NULL )
   {
       hGlobalResource = LoadResource ( NULL, hResourceData );
       if ( hGlobalResource != NULL )
       {
           lpGlobalResource = LockResource ( hGlobalResource );
           if ( lpGlobalResource != NULL ) 
           {
               nFileSize = SizeofResource ( NULL, hResourceData );
               hb_retclen ( (const CHAR *) lpGlobalResource, (HB_SIZE) nFileSize );
           }
           FreeResource ( hGlobalResource );
       }
   }

   if ( lpGlobalResource == NULL )
        hb_retclen ( (const CHAR *) NULL, (HB_SIZE) 0 );
}

#pragma ENDDUMP

Listar Resources? Alguém Sabe?

Enviado: 16 Out 2016 16:11
por JoséQuintas
Quais as opções de executar esses relatórios?
Faça um teste com o resource universal.
Uso pra algumas coisas.
Assim o resource fica embutido dentro de um PRG.

Código: Selecionar todos

FUNCTION JPEGBancoItau()

   #pragma __binarystreaminclude "image\banco341.jpg" | RETURN %s

FUNCTION JPEGBancoBradesco()

   #pragma __binarystreaminclude "image\banco237.jpg" | RETURN %s

FUNCTION JPEGNatal()

   #pragma __binarystreaminclude "image\natal.jpg"    | RETURN %s

FUNCTION JPEGAnoNovo()

   #pragma __binarystreaminclude "image\anonovo.jpg"  | RETURN %s
Pra ilustrar o retorno em run-time:

Código: Selecionar todos

hb_MemoWrit( "itau.jpg", JPEGBancoItau() )
A partir daí, é verificar na rotina que vai usar o relatório qual a melhor forma de usar.