Fórum Analise sobre fig em botoes #345610
07/09/2007
0
gostaria que voces me ajudassem com uma questao...
A questao eh a seguinte: em minha aplicacao tenho muitas figuras. Sendo elas distribuidas pelos botoes. Porem, os botoes de confirmar, cancelar e sair são sempre as mesmas figuras. Isso faz com que o projeto fique maior, correto?! A invés de já deixar no botao ( a figura ) em tempo de projeto, qual a maneira mais rapida e que nao torne o sistema tao grande?!
Obrigado a todos!
Tremonti
Curtir tópico
+ 0Posts
09/09/2007
Werlon Goulart
Ele consegue essa proeza compactando o cabeçalho do Exe, que é onde ficam as imagens e outros recursos que serão usados, conforme for necessitando ele vai descompactando de modo totalmente transparente.
Inclusive ele ´criptografa´ o Exe/Dll gerando um código indecifrável, o que contribui para a proteção do seu sistema.
Existem outros - inclusive gratuitos, mas não sei dizer o nome.
Aspack funciona em qquer Win....
Só q é pago.
Assim vc não terá mais q se preocupar com exes muito grandes.
Grande Abraço
Werlon Goulart
Gostei + 0
10/09/2007
Sistemald
Gostei + 0
10/09/2007
Gandalf.nho
Gostei + 0
11/09/2007
Tremonti
Obrigado
Gostei + 0
11/09/2007
Gandalf.nho
Gostei + 0
24/07/2009
Tremonti
Gostaria de fazer uma funcao onde retornar a figura que esta na imagelist atraves de seu indice.
Por exemplo, tenho tres imagens no imagelist... gostaria de preencher o botao com a nro 2... como faço?
Obrigado
Gostei + 0
24/07/2009
Tremonti
var s:TBitmap; begin s := TBitmap.Create; ImageList1.GetBitmap(0,s); SpeedButton1.Glyph := s; FreeAndNil(s); end;
Alguem pode ajudar?
Gostei + 0
24/07/2009
Wdrocha
sei q são mts megas d imagens.....o q eu fiz...foi colocar tudo em uma dll e carrego as imagens em tempo de execução e só carrego qdo é necessário...dessa forma meu programa não ficou lento ou pesado na hora da inicialização, pois carrego apenas as imagens necessárias e depois usá-las as mesmas são liberadas, conforme a necessidade.
Acredito q mesmo colocando em um ImageList não resolverá seu problema, pois elas serão carregas na hora da inicialização do seu programa...
eu acho melhor usa dll, q vc pod carregar as imagens através do método LoadFromResourceStream e pelo nome da imagem ao invés de ficar passando o índice dela....isso pod deixar a manutenção complicada...
é só uma idéia... :-)
flw..
Gostei + 0
28/07/2009
Tremonti
E no caso de usar imagelist, como faço pra deixar transparente?
Abracos
Gostei + 0
28/07/2009
Wdrocha
por exemplo, dentro do arquivo, vc colocará algo como,
[b:f3b5ef662f]
imgTeste RCDATA ´teste.jpg´
imgOther RCDATA ´other.png´[/b:f3b5ef662f]
[b:f3b5ef662f]Não esqueça de colocar este arquivo em uma pasta juntamente com as imgens.[/b:f3b5ef662f]
Agora vc terá q compilar este arquivo para q ele gere um [b:f3b5ef662f].res[/b:f3b5ef662f] e como isso será feito???
Pelo modo prompt, informe o seguinte comando, supondo q seu delphi esteja instalado em [b:f3b5ef662f]Arquivos de programas[/b:f3b5ef662f] ou [b:f3b5ef662f]Program Files[/b:f3b5ef662f] como é o meu caso q estou utilizando o Vista.
[b:f3b5ef662f]cd Program Files\Borland\Delphi7\Bin[/b:f3b5ef662f]
agora vc informará o seguinte comando :
[b:f3b5ef662f]brcc32.exe -v pathDaPasta\NomeDoArquivo.rc[/b:f3b5ef662f]
o compilador chamado brcc32.exe irá verificar se todas as imagens informadas estão dentro da pasta para que se possa gerar o arquivo de recursos q será usado pela DLL. Se ocorreu tudo perfeitamente, siga os próximos passos.
Delphi vá em ,File ---> New --->Other --->DLL Wizard.
No novo projeto q foi aberto,
abaixo da cláusula
Uses SysUtils, Classess;
{$R *.res}
[b:f3b5ef662f]{$R NomeDoArquivo.Res}[/b:f3b5ef662f]//Este arquivo foi gerado pelo compilador brcc32.exe, tem a extensão .Res e tem o mesmo nome do seu arquivo com extensão [.rc].
Basta compilar e sua DLL será gerada. :-)
agora, como incorporar isso ao seu projeto??? Como carregas essas imagens??? É o q veremos nos passos seguintes :
No seu projeto, o aconselho a criar uma constante, pois como o nome da DLL será referenciado inúmeras vezes, e este nome pod mudar, seria mt trabalhoso mudar todos os nomes, não é??
o nome q eu dei para este exemplo foi:
[b:f3b5ef662f]Const DLLIMAGENS = ´Nome.dll´;[/b:f3b5ef662f]
Obs : De preferência deixe esta DLL dentro da pasta do seu projeto.
agora, para finalizar, vamos carregar as imagens.
Procedure TfrmTeste.Teste(); Var DLL : THandle;//Conterá o endereço da DLL que estará em memória. PNG : TPNGObject; JPG : TJPEGImage; ResourceStream : TResourceStream; Begin JPG := TJPEGImage.Create(); PNG := TPNGObject.create(); DLL := LoadLibrary(PChar(DLLIMAGENS));//Carrega a DLL PNG.LoadFromResourceName(DLL, ´imgOther´);//Carrega a imagem com o nome imgOther. img1.picture.assign(PNG); ResourceStream := TResourceStream.Create(DLL, ´imgteste´, RT_RCDATA);//está é a imagem jpg. img2.Picture.Assign(JPG); FreeAndNil(ResourceStream);//Libera o objeto da memória. FreeAndNil(JPG);//Libera a variável JPG. FreeAndNil(PNG); FreeLibrary(DLL); MTexto.SetFocus; End; //******************************************************************************
Com isso vc poderá criar DLL e usar nos seus projetos. :-)
espero ter ajudado...
flw
Gostei + 0
28/07/2009
Lehapan
Você pode utilizar o componente TImageList, para colocar as imagens, e o componente TActionList, incluindo TActions dentro do TActionList e após vincular a TAction ao seu botão (simplesmente ´botao.Action := NomeAction´), assim ele irá carregar automaticamente a imgem da Action para o botão.
PS: de uma olhada melhor em TActionList e TAction, pois são ferramentas EXCELENTES.
Espero ter ajudado.
Gostei + 0
30/07/2009
Tremonti
eu uso actionlista para varios componentes de meu projeto. Porem, as acoes nao sao as mesmas... sao diferentes... a unica coisa igual seria a figura mesmo.
Com o Action nao é possivel fazer isso...
Mesmo assim, obrigado!!!
[b:ebca54e140]WDRocha[/b:ebca54e140],
Vou dar uma estudada na sua solucao e te comunico.. Obrigado...
*tenho que mandar sempre a dll junto com o exe, correto?
Gostei + 0
31/07/2009
Wdrocha
:-)
Gostei + 0
03/08/2009
Tremonti
Obrigado
Gostei + 0
03/08/2009
Tremonti
Obrigado
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)