Fórum Analise sobre fig em botoes #345610

07/09/2007

0

Galera,

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

Tremonti

Responder

Posts

09/09/2007

Werlon Goulart

Existe um utilitário q compacta Exes e Dll.... chama-se AsPack.
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


Responder

Gostei + 0

10/09/2007

Sistemald

Cara eu uso um image list com as figuras que se repetem. acredito que seja uma das melhores soluções.


Responder

Gostei + 0

10/09/2007

Gandalf.nho

Eu também uso um ImageList. Coloco-o num DataModule, referencio-o nos outros forms e pronto, as imagens estão à disposição.


Responder

Gostei + 0

11/09/2007

Tremonti

Galera, mas como eu carrego uma imagem para um botao sendo que esta imagem se encontra em um imagelist?

Obrigado


Responder

Gostei + 0

11/09/2007

Gandalf.nho

Os componentes que possuem acesso ao ImageList possuem uma propriedade que permite indicar qual ImageList deseja usar. Depois disso, é só usar a propriedade ImageIndex para indicar qual imagem da lista deseja usar.


Responder

Gostei + 0

24/07/2009

Tremonti

gandalf.nho,

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


Responder

Gostei + 0

24/07/2009

Tremonti

Da pra utilizar este codigo... porem nao fica transparente a figura no botao...

var s:TBitmap;
begin
   s := TBitmap.Create;
   ImageList1.GetBitmap(0,s);
   SpeedButton1.Glyph := s;
   FreeAndNil(s);
end; 



Alguem pode ajudar?


Responder

Gostei + 0

24/07/2009

Wdrocha

Tenho um aplicação com mts imagens, inúmeras nem são quantas são ao certo...

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..


Responder

Gostei + 0

28/07/2009

Tremonti

Legal... Mas nunca utilizei dll... pode me ajudar?

E no caso de usar imagelist, como faço pra deixar transparente?

Abracos


Responder

Gostei + 0

28/07/2009

Wdrocha

Bom dia, vc pod criar um arquivo de Recursos para isso....pod ser um arquivo texto qualquer q será salvo com a extensão [b:f3b5ef662f].rc[/b:f3b5ef662f]

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


Responder

Gostei + 0

28/07/2009

Lehapan

Caro Tremonti,

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.


Responder

Gostei + 0

30/07/2009

Tremonti

[b:ebca54e140]lehapan,[/b:ebca54e140]

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?


Responder

Gostei + 0

31/07/2009

Wdrocha

Sim....a dll sempre tem q acompanhar o executável....

:-)


Responder

Gostei + 0

03/08/2009

Tremonti

Qual a [color=green:03e4e3da2c]use[/color:03e4e3da2c] que tenho que declarar para poder usar TPNGObject?

Obrigado


Responder

Gostei + 0

03/08/2009

Tremonti

Qual a [color=green:18c8bcca10]use[/color:18c8bcca10] que tenho que declarar para poder usar TPNGObject?

Obrigado


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar