Página 1 de 1

Imagens dentro do executável

Enviado: 04 Abr 2015 17:25
por Cavalo Marinho
Boa tarde
tem como colocar as imagens que utilizo nos botoes, combos, etc dentro do executável, ou seja para não precisar levar a pastinha com todas as imagens, sem contar que o usuário pode apagar e o programa ficar muito feio.
Obrigado.

Imagens dentro do executável

Enviado: 04 Abr 2015 20:18
por Toledo
Amigo, é só usar um arquivo de resource (*.RC).

Crie um arquivo RC, por exemplo demo.rc, e informar os arquivos de imagens:

Código: Selecionar todos

BUTTON1	BITMAP  BUTTON.BMP
WORLD     ICON    WORLD.ICO
No arquivo PRG ou FMG, use assim:

Código: Selecionar todos

DEFINE WINDOW Form_Main ;
	AT 0,0 ;
	WIDTH 640 HEIGHT 480 ;
	TITLE 'Main Window' ;
	ICON 'WORLD' ;
	MAIN 

	@ 200,140 BUTTON ImageButton_1 ;
		PICTURE 'button1' ;
		ACTION MsgInfo('Button Pressed!','!') ;
		WIDTH 29 ;
		HEIGHT 29 TOOLTIP 'Print Preview' ;

END WINDOW
No seu projeto incluir o arquivo RC para compilação. Se estiver usando arquivo HBP, incluir o arquivo RC junto com os PRGs. Na IDE, incluir o arquivo RC no projeto,na aba de RC-Bat.

Abraços,

Imagens dentro do executável

Enviado: 05 Abr 2015 19:36
por Cavalo Marinho
Boa noite
Mais uma vez obrigado Toledo, vou fazer os testes, tenho muita coisa pra mudar, "mas não se faz um omelete sem quebrar os ovos", kkkkkkkk
:-Y

Imagens dentro do executável

Enviado: 05 Abr 2015 20:06
por Cavalo Marinho
Toledo infelizmente não funcionou, fiz os primeiros teste mas não deu certo, onde estou errando??? :% segue trechos do sistema onde estou testando

no arquivo fenix.fmg tem este trecho onde fiz as modificações nos três primeiros botoes, já no quarto botão (botao sair) que aponta para imagem funciona perfeito

DEFINE SPLITBOX
DEFINE TOOLBAR TBotoes BUTTONSIZE 104,64 FONT FonteMenu SIZE 11 FLAT
BUTTON tEntidade CAPTION "&Entidades" PICTURE 'BTNCLIENTE' ACTION mEntidade() TOOLTIP "Manuatenção de Entidades"
BUTTON tProdutos CAPTION "&Produtos" PICTURE 'BTNPRODUTO' ACTION mProduto() TOOLTIP "Manuatenção de Produtos"
BUTTON tGruposProd CAPTION "&Grupos" PICTURE 'BTNGRUPO' ACTION mGrupo() TOOLTIP "Manutenção de Grupos de Produtos"
END TOOLBAR

DEFINE TOOLBAR TBtSair BUTTONSIZE 104,64 FONT FonteMenu SIZE 11 FLAT
BUTTON Sair CAPTION "&Sair" PICTURE "imagens\sair.jpg" ACTION sair() TOOLTIP "Encerrar o sistemas"
END TOOLBAR

END SPLITBOX

arquivo fenix.rc
BTNCLIENTE BIPMAP d:\fenix\imagens\clientes.bmp
BTNPRODUTO BIPMAP d:\fenix\imagens\produtos.bmp
BTNGRUPO BIPMAP d:\fenix\imagens\grupos.bmp

arquivo fenix.hbp
-hbexe
-mt
-inc
-L\fenix\libs -lrddleto
-L\fenix\libs -lgenericas
-o\fenix\fenix

Fenix.Prg
consultaAcessos.prg
fConsulta.Prg
fSetup.Prg
farquivos.prg
f_Queries.prg
login.prg
manutBancos.prg
manutCeps.prg
manutCfops.prg
manutContador.prg
manutCstCsosn.prg
manutEmpresa.prg
manutEntidade.prg
manutFormasDePagamento.prg
manutGrupo.Prg
manutHistoricoDeCaixa.prg
manutIbge.prg
manutImpressorasFiscais.prg
manutLog.prg
manutNcmsh.prg
manutOrigemProdutos.prg
manutPedidos.prg
manutProduto.prg
manutRedesCartoes.prg
manutTipoDocumento.prg
manutTributacao.prg
manutUnidades.prg
manutUsuario.prg
manutVendedor.prg

relatUnidades.prg
frelatorios.prg

FENIX.RC

Imagens dentro do executável

Enviado: 05 Abr 2015 22:11
por Toledo
Cavalo Marinho escreveu:BTNCLIENTE BIPMAP d:\fenix\imagens\clientes.bmp
O correto é BITMAP para arquivos BMP.

Abraços,

Imagens dentro do executável

Enviado: 06 Abr 2015 09:18
por Cavalo Marinho
Bom dia, desculpe-me a minha falta de atenção :^|
Más mesmo assim, corrigir o arquivo FENIX.RC e mesmo assim não funfou, será que tem alguma relação com botoes em outras telas? acredito que não, é que troquei somente imagens dos botoes da tela principal do sistema, as outras telas ainda permanecem no modo antigo, lembrando que utilizo minigui extend com mingw.

Imagens dentro do executável

Enviado: 06 Abr 2015 11:13
por rubens
Olá...

Também estou tentando compilar com as imagens no programa mas tá dando o seguinte erro:

Código: Selecionar todos

Lines 21857, Functions/Procedures 17
Generating C source output to '.hbmk\win\bcc\TESTANFC.c'... Done.
hbmk2: Compiling resources...
Borland Resource Compiler  Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation.  All rights reserved.

Error TESTANFC.rc 2 17: Allocate failed
hbmk2[TESTANFC]: Error: Running resource compiler. 20018
brcc32.exe -IC:\BCC55\Include -Ic:\minigui\harbour\include -Ic:\minigui\include -IC:\hmg\TESTANFC C:\hmg\TESTANFC\TESTANFC.rc -fo.hbmk\win\bcc\TESTANFC.res

****
Failure!
Linha de criação do formulario com o icone

Código: Selecionar todos

DEFINE WINDOW TEMPLATE AT 206 , 305 WIDTH 747 HEIGHT 410 TITLE "Sistema de verificação de NFe/NFCe" ICON "MDVICO" MAIN BACKCOLOR {192,192,192}
arquivo RC

Código: Selecionar todos

MDVICO ICON MDV.ICO
o arquivo MDV.ICO está no path.

não consegui achar esse arquivo se tiver alguma coisa a ver...

Código: Selecionar todos

hbmk\win\bcc\TESTANFC.res
Rubens

Imagens dentro do executável

Enviado: 06 Abr 2015 21:27
por Toledo
Cavalo Marinho escreveu:corrigir o arquivo FENIX.RC e mesmo assim não funfou
Amigo, se for possível, compactar (ZIP ou RAR) estes arquivos BMP e anexar aqui neste tópico, assim eu monto um demo para você.
rubens escreveu:Também estou tentando compilar com as imagens no programa mas tá dando o seguinte erro:
Rubens, compactar este arquivo ICO e anexar aqui neste tópico, ai eu faço um demo também!

Abraços,

Imagens dentro do executável

Enviado: 06 Abr 2015 21:41
por Cavalo Marinho
Boa noite Toledo
Segue as imagens em anexo, e são estas mesmas imagens que estou utilizando nos botoes, e estão funcionando quando aponto para a pasta imagens, agora quando o botao aponta para a variável do arquivo fenix.rc não funciona, o botão fica sem imagem.
imagens.rar
Imagens bmp
(12.64 KiB) Baixado 142 vezes

Imagens dentro do executável

Enviado: 06 Abr 2015 22:36
por Toledo
Amigo, segue em anexo um exemplo!

Abraços,

Imagens dentro do executável

Enviado: 13 Abr 2015 18:09
por rochinha
Amiguinhos,

Não é uma solução, mas uma dica.

Eu sempre compilei meu sistema incluindo nele as .RCs e imagens tornando-o um executável único. Mas com o tempo e seu tamanho aumentando, inclusive pela existencia de muitos módulos e telas e pelo fato de usar BRC não houve mais possibilidade de grudar os .RCs ao EXE.

Parti então para a colocação de todos os recursos em .DLL e não me arrependo, afinal encontramos por ai sempre um SISTEMA.EXE com uma SISTEMA.DLL.

Outra coisa interessante reside no fato de atualizar-mos os clientes e por um erro jogar uma .DLL antiga sobre uma nova e BUG.

Adotei o seguinte esquema:

Meu sistema abre a sua .DLL correspondente caso ela tenha o mesmo nome do EXEcutável. Portanto a SISTEMA1.DLL sera executada apenas pelo SISTEMA1.DLL, a SISTEMA2.DLL sera executada apenas pelo SISTEMA2.DLL, assim por diante.

Ter um EXEcutável e uma DLL para ele é bem profissional e limpo, apesar de eu ainda usar a pasta IMAGENS, ka ka ka.

Imagens dentro do executável

Enviado: 14 Abr 2015 10:31
por Softwhouse
Rochinha, conta aí para nós como é que se faz ...

Imagens dentro do executável

Enviado: 14 Abr 2015 20:13
por rochinha
Amiguinhos,

Vou apresentar como eu uso com FiveWIN. Para MiniGUI com certeza o processo será o mesmo só um pouquinho diferente.

Todos os recursos que preciso são chamados dentro de arquivos .RC e quanto existe uma mudança em telas ou uma manutenção nestes recursos eu refaço a .DLL, assim:

Código: Selecionar todos

rem @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"      > NFWH29.RC
rem @ECHO 1 24 themed.manifest >> NFWH29.RC
@ECHO #include "nfwh.rc"       >> NFWH29.RC

@SET FWDIR=%CAMINHO%
@IF EXIST NFWH29.DLL DEL NFWH29.DLL 
copy %FWDIR%\dll\SCREEN32.C

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

@IF EXIST NFWH29.res DEL NFWH29.RES > NULL
@IF EXIST NFWH29.ils DEL NFWH29.ils > NULL
@IF EXIST NFWH29.ilf DEL NFWH29.ilf > NULL
@IF EXIST NFWH29.ilc DEL NFWH29.ilc > NULL
@IF EXIST NFWH29.ild DEL NFWH29.ild > NULL
@IF EXIST NFWH29.tds DEL NFWH29.tds > NULL
@IF EXIST NFWH29.map DEL NFWH29.map > NULL
REM @IF EXIST NFWH29.rc  DEL NFWH29.rc  > NULL
@IF EXIST NULL.       DEL NULL.

@DIR NFWH29.DLL
@COPY /y NFWH29.DLL C:\SISTEMA

:fim
No exemplo acima estou anexando na .DLL um único .RC. Veja abaixo o seu conteúdo:

Código: Selecionar todos

#include "WinApi.ch"

#include "nfwaux.rc"
#include "nfwhbmp.rc"
#include "nfwhdlg.rc"
#include "nfwhdlg1.rc"
#include "nfwhdlg2.rc"
#include "nfwhdlg3.rc"

#include "prev32.rc"
#include "GenLabel.rc"

#include "nfwhtms.rc"
#include "nfwhstat.rc"
#include "nfwform.rc"
Neste .RC faço a inclusão unificada de todos os .RCs que necessito. Dividi as NFWHDLGs em vários porque uso o WorkShop e ele tem limite de tamanho destes arquivos, assim como tem limite na hora de colar os recursos no executável.

Agora vem a parte mais dificil e dolorosa de todas. Acrescentar a chamada a .DLL dentro do sistema:

Código: Selecionar todos

   Cl_NFWHDLL     := StrTran( cFileName( GetModuleFileName( GetInstance() ) ), ".EXE", ".DLL" )

   Set Resources to Cl_NFWHDLL
As funções cFileName( GetModuleFileName( GetInstance() ) ) irão trazer o nome do aplicativo aberto. Em MiniGUI será necessário buscar funções aproximadas, pois não lembro se são especificas da FiveWIN.