Aplicação com dois ícones.

133 views
Skip to first unread message

Samuel N. Junior

unread,
Jun 24, 2011, 12:51:59 PM6/24/11
to DUG-RS - Delphi Users Group Rio Grande do Sul
Pessoal,

Tenho um aplicativo que gera dois executáveis diferentes e um DEFINE indica qual EXE deverá ser gerado.

Gostaria que o ícone de cada um deles fosse diferente sem ter que entrar nas propriedades do projeto e ficar trocando o icone.

Alguém sabe como fazer isso ?

Eu tentei criar um arquivo de resource com o ícone da segunda aplicação e se o define estiver "ativo" eu incluo o segundo icone com o comando {$R ICONE2.RES}

Nesse caso, quando eu compilo a aplicação eu recebo a mensagem "[DCC Error] E2161 Warning: Duplicate Resource: Type 14 (ICON GROUP), ID MAINICON. File ICONE2.RES resource keep; file PROJECT.RES resouce discated"

Só que o EXE é gerado normalmente e com o icone que eu quero. O único problema é que o EurekaLog não processa o EXE por causa do erro que ocorreu.

Alguém sabe como resolver isso ?

Thanks,

Samuel

Jefferson Follmann

unread,
Jun 24, 2011, 1:07:14 PM6/24/11
to dug...@googlegroups.com
Não sei se vai te ajudar, mas tu pode tentar trocar o icone em tempo de execução.
Já tentou algo como:

if( aap1) then
Application.Icon.LoadFromFile('icone1.ico')
else
Application.Icon.LoadFromFile('icone2.ico')

Não é algo elegante de se fazer (hehe).
Mas fica a dica!

Espero ter ajudado.

--
Você recebeu esta mensagem porque está inscrito no "DUG-RS -
Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR
Twitter: @dugrs



--
O único erro da natureza, é a incompetência não doer.
Linux: Live FREE or DIE!

Samuel N. Junior

unread,
Jun 24, 2011, 1:09:59 PM6/24/11
to dug...@googlegroups.com
Jefferson,

Obrigado pela dica mas isso não resolveria pois o usuário continuaria vendo apenas um ícone pelo Windows Explorer.

Eu preciso que o ícone seja compilado junto com o exe, substituindo completamente o antigo.

[ ]s

Samuel


Rodrigo de Vargas Matos

unread,
Jun 28, 2011, 7:30:05 AM6/28/11
to dug...@googlegroups.com
Bom dia Samuel.

Nunca precisei fazer isso e nem ao menos testei a sugestão que vou lhe dar. Esse trabalho vou ter que deixar para vc por falta de tempo, heheheh. Talvez vc consiga isso compilando num arquivo de recursos dois ou mais ícones diferentes e, indicando através de um arquivo INI, por exemplo, carregar o ícone que vc quiser para o seu aplicativo. Se isso funcionar, conseguirá um carregamento de ícone dinâmico, que acho que é o que vc precisa, pelo que entendi. Espero ter ajudado e boa sorte no seu projeto.

Atenciosamente.
Rodrigo de Vargas Matos.
----------------------------------------------


--- Em sex, 24/6/11, Samuel N. Junior <sam...@natsam.com.br> escreveu:
--

Samuel N. Junior

unread,
Jun 28, 2011, 12:12:55 PM6/28/11
to dug...@googlegroups.com
Rodrigo,

Carregar o ícone "dinamicamente" não resolve meu problema pois preciso que o usuário identifique o tipo da aplicação ao acessar a pasta/diretório pelo Windows Explorer.

Por enquanto terei que ticar trocando o ícone no projeto até descobrir como resolver isso.

[ ]s


Samuel

Augusto Nascimento

unread,
Jun 28, 2011, 12:46:17 PM6/28/11
to dug...@googlegroups.com
Samuel, acho que isso só seria possível com uma segunda aplicação, rodando em background e modificando o registro do windows, de modo que o ícone setado no windos fosse modificado de acordo com o que tu desejas.

Para mudar a nível de "explorer" creio que essa seja a única maneira, no momento em que o windows iniciar, uma aplicação tua (um executável bem básico e pequeno), analiza a situação do usuário e define o ícone que será exibido para ele no explorer do windows.

Samuel N. Junior

unread,
Jun 28, 2011, 1:05:19 PM6/28/11
to dug...@googlegroups.com
Acho que não consegui explicar direito o que eu quero.

Tenho um projeto com um Define como:

{$DEFINE FREEWARE}

E no código eu tenho uma série de IFDEF que indicam qual é a aplicação que será compilada. Como:

{$IFNDEF FREEWARE}
<instruções que criam algumas funções adicionais>
{$ENDIF}

O que eu preciso é um código que, em tempo de compilação, diga qual o ícone que será usado pelo executável, como:

{$IFDEF FREEWARE}
   {$R ICONE1.RES}
{$ELSE}
   {$R ICONE2.RES}
{$ENDIF}

Eu já faço isso para uma série de resources da aplicação, porém o único que não dá certo é o ícone, que "entra" em conflito com o do projeto e, apesar da aplicação ser compilada normalmente, inclusive com o ícone que deve ser utilizado, não permite que o EurekaLog funcione porque ao término da aplicação dá o erro:
"[DCC Error] E2161 Warning: Duplicate Resource: Type 14 (ICON GROUP), ID MAINICON. File ICONE2.RES resource keep; file PROJECT.RES resource discated"

Bom, vou continuar trocando o ícone manualmente no projeto sempre que colocar o DEFINE até descobrir como fazer isso.

Obrigado pelas dicas.

Samuel

Christian Bobsin

unread,
Aug 2, 2011, 8:03:53 AM8/2/11
to dug...@googlegroups.com
Eu tive que fazer algo parecido e a unica solução que achei foi fazer um ícone generico na aplicação e os atalhos todos apontando para um ícone determinado dentro da pasta de instalação. e para que a aplicação não ficasse com o ícone genérico quando fosse carregado eu fiz como o Jefferson sugeriu. 

Eu particularmente acho que a experiêcia do usuário (com excessão dos fuçadores) é a interação com os atalhos que disponibilizamos para ele e não ficar acessando o diretório de instalação pelo Explorer.




2011/6/28 Samuel N. Junior <sam...@natsam.com.br>



--
Christian Regina Bobsin

Jefferson Follmann

unread,
Aug 2, 2011, 10:21:29 AM8/2/11
to dug...@googlegroups.com
Olá Christian,

Que bom que consegui lhe ajudar então.
Lembro-me que tive (anteriormente) o seu mesmo problema e a única forma de resolver foi a mesma que você adotou.

Qualquer coisa, dá um grito.

Abraço!
Jefferson Luis Follmann
Fone: (51) 9818-1235


Reply all
Reply to author
Forward
0 new messages