Clipper On Line • Ver Tópico - Criando um DLL de recursos, Telas, Bitmaps, Icones

Criando um DLL de recursos, Telas, Bitmaps, Icones

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

 

Criando um DLL de recursos, Telas, Bitmaps, Icones

Mensagempor rochinha » 13 Fev 2010 01:57

Amiguinhos,

Fazer um aplicativo seja qual destino ele terá com seus menus, telas e etc até que não é bicho de sete cabeças.

Mas ai chega a hora de rodar o mesmo naquele XP com tema modificado e seu aplicativo continua parecendo estar na era do Windows 95.

Para tanto podemos sacar o uso de temas em nossos aplicativos sem muito trabalho.

Basta ter em mãos um arquivo MANifest qualquer, exemplo:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly
  xmlns="urn:schemas-microsoft-com:asm.v1"
  manifestVersion="1.0">

  <assemblyIdentity
    processorArchitecture="x86"
    version="1.0.0.0"
    type="win32"
    name="log.exe"/>

  <description>DBFViewer 2000</description>

  <dependency>

    <dependentAssembly>

      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="x86"/>
    </dependentAssembly>
  </dependency>
</assembly>


Neste exemplo estou visualizando o MANifest do DBViewer 2000.

Para que seu aplicativo for Windows possa pegar carona no tema do Windows basta fazer assim:

SISTEMA.EXE
SISTEMA.EXE.MANIFEST

Onde SISTEMA.EXE é o seu aplicativo e SISTEMA.EXE.MANIFEST é um arquivo texto com o conteúdo acima.

Pronto seu aplicativo começa a ficar mais compativel com a interface.

Mas se eu não quizer usar um MANifest externo, posso incorporar isto diretamente em meu executável?

Sim.

Para isto introduziremos o arquivo dentro do .RC que será ligado ao seu aplicativo, assim:

1 24 "sistema.exe.manifest" 
1 ICON SISTEMA.ICO


Então utilizaremos os comandos necessários para gerar o arquivo .RES que posteriormente será integrado ao .EXE. Supondo que criei o arquivo MANIFEST.RC, então:

brc32 -r MANIFEST -foMANIFEST


Será criado o arquivo MANIFEST.RES.

Como o trabalho geralmente é gerenciado por arquivo de lotes o BUILDH.BAT que acompanha o Fivewin gera um arquivo com extensão .BC que contém todas as informações necessárias para gerar o executável, exemplo:

C:\BCC55\LIB\c0w32.obj +
Sistema.obj +
Outro.obj +
MaisOutro.obj +
Ultimo.obj, +
Sistema.exe, +
Sistema.map, +
C:\FIVEWIN\LIB\FiveH.lib +
C:\FIVEWIN\LIB\FiveHC.lib +
C:\HARBOUR\LIB\hbSix.lib +
C:\HARBOUR\LIB\hbzip.lib +
C:\BCC55\LIB\import32.lib,, +
Manifest.res


No trecho reduzido acima deixei apenas algumas linhas para se ter noção do conteúdo do arquivo, mas a estrutura deve ser idêntica e a hierarquia de arquivos deve ser mantida, sem esquecer das divisões entre os conjuntos feitas pelas virgulas.

Desta forma seu sistema terá incorporada a estrutura de temas. Caso queira acrescentar icones e bitmaps, basta incorporá-los a um .RC, compilar e acrescentar o .RES correspondente, assim:

Manifest.res + bitmaps.res + icones.res + telas.res


Mas o tópico dis algo sobre .DLL de recursos, num to entendendo onde o Rochinha quer chegar...

Calma.

A partir do que foi apresentado acima podemos dar partida no módulo avançado do tópico.

Para isto precisaremos de mais recursos: um arquivo de lote chamada RC2DLL32.BAT e um arquivo C chamado SCREEN32.C.

O RC2DLL32.BAT irá compilar o SCREEN32.C que juntamente com algumas bibliotecas e sua .RES de telas, icones e bitmaps gerará sua .DLL.

RC2DLL32.BAT
@ECHO OFF
@rem RC file to 32 bits resources DLL
@rem syntax: rc2dll32.bat Your_rc_file !!! without the .RC extension

@ECHO #include "WinApi.ch" > SISTEMA.RC
@ECHO #include "telas.rc"   >> SISTEMA.RC

@SET FWDIR=c:\fivewin
@SET BCDIR=c:\bcc55
@IF EXIST NFWH29.DLL DEL NFWH29.DLL
copy %FWDIR%\dll\SCREEN32.C

copy %BCDIR%\lib\uuid.lib
%BCDIR%\bin\bcc32 -c -I%BCDIR%\include SCREEN32.C
%BCDIR%\bin\brc32 -r NFWH29.rc
%BCDIR%\bin\ilink32 /Tpd /v %BCDIR%\lib\c0d32.obj SCREEN32.OBJ, SISTEMA.DLL,,%BCDIR%\lib\cw32.lib %BCDIR%\lib\import32.lib,, SISTEMA.RES

@IF EXIST SISTEMA.res DEL SISTEMA.res > NULL
@IF EXIST SISTEMA.ils DEL SISTEMA.ils > NULL
@IF EXIST SISTEMA.ilf DEL SISTEMA.ilf > NULL
@IF EXIST SISTEMA.ilc DEL SISTEMA.ilc > NULL
@IF EXIST SISTEMA.ild DEL SISTEMA.ild > NULL
@IF EXIST SISTEMA.tds DEL SISTEMA.tds > NULL
@IF EXIST SISTEMA.map DEL SISTEMA.map > NULL
@IF EXIST NULL.       DEL NULL.


SCREENS.C
#include <windows.h>

#pragma argsused

//------------------------------------------------------------------------//

int WINAPI _export DllEntryPoint( HINSTANCE hinst, DWORD fdwReason,
                                  PVOID pvReserved )
{
   return TRUE;
}

//------------------------------------------------------------------------//


Se tudo que foi explicado for seguido a risca e se sua .DLL for gerada, bastará então acioná-la dentro de seu sistema.

Para tanto bastará usar uma chamada assim:

...
SET RESOURCES TO "SISTEMA.DLL"
...


Porque gerar .DLL ao invés de incorporar os recursos diretamente no executável?

Dependendo do total de recursos como telas, imagens, etc a incorporação não é efetivada ocorrendo estouro no momento da linkagem.

Qual o tamanho de uma .DLL ou quantidade de recursos que ela pode conter?

Não sei, mas se for o caso é possivel criar várias .DLL para serem chamadas pelo sistema.

O que foi apresentado aqui serve também para outras GUIs e não se aplica somente a Fivewin, os métodos e recursos podem ser os mesmos mas o resultado será o mesmo.

Caso queiram, utilizem no lugar do Borland RC o compilador de recursos do Pelles, por ser mais recente pode ser livre de limitações que o Borland possa ter.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes



Retornar para FiveWin

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro