Armazenar imagens em DLL

07/08/2003

0

Não tem como!!!

Colocar imagens em uma dll e depois mostrar as imagens em um componente TImage É IMPOSSÍVEL, utilizando o Delphi 6.

Já tentei de tudo, simplesmente não dá.

Obrigado,

Roberto

[b:295487903e]Título editado pelo Moderador em face de não refletir o conteúdo da thread. (AZ)[/b:295487903e]


Tenil

Tenil

Responder

Posts

07/08/2003

Joilson_gouveia

E prá que vc precisa de uma DLL?????

Eu tenho um Form com um objeto ImageList (Paleta Win32) que contem todas as imagens que minha aplicação necessita!!!

Basta eu usar as propriedades do objeto ImageList para recuperar/mostrar minhas imagens na situação desejada!!!


Responder

08/08/2003

Bacalhau

É assim:

- cria um form dentro da DLL, contendo a imagem
- cria uma function no DLL mais ou menos assim

function EnviaImagem : TImage;

var X : TForm1; // a form que criaste

begin
X := Tform1.create(form1);
EnviaImagem := X.Image1;
X.free;
end;

exports enviaimagem index 1;


O segredo está em chamar na aplicação principal esta DLL de uma forma dinâmica. Cá vai:

1. crias um type

Type TChama : procedure; // é esquisito mas é assim mesmo

2. No procedure que importa a imagem, cria uma variavel do tipo TChama, uma do tipo TImage e outra do tipo THandle. Assim:

var portugal : TChama;
hd : THandle;
im : TImage;

3. O código dentro do procedure é este:

Hd := LoadLibrary(pchar(NOMEDADLL.DLL));

if Hd <> 0 then
begin
@PORTUGAL := GetProcAddress(Hd,pchar(enviaimagem));
if @PORTUGAL <> nil
then IM := PORTUGAL; // CAPTURASTE AQUI A IMAGEM
end;

Cuidado que tens de acrescentar algumas units na cláusula USES, especialmente na DLL, que tem de ter a unit SHAREMEM.

Se houver dúvidas estou em virtual.viegas@netc.pt


Responder

08/08/2003

Tenil

E prá que vc precisa de uma DLL????? Eu tenho um Form com um objeto ImageList (Paleta Win32) que contem todas as imagens que minha aplicação necessita!!! Basta eu usar as propriedades do objeto ImageList para recuperar/mostrar minhas imagens na situação desejada!!!


O problema é que preciso armazenar várias imagens, o executável fica muito grande e se eu precisar alterar as imagens bastará trocar a DLL.


Responder

08/08/2003

Tenil

bacalhau, não funcionou.

Acho que vou estudar JAVA. Quem sabe eu não consiga fazer lá.

De qualquer forma, obrigado.

Se alguém tiver uma outra forma e puder me ajudar, eu ficarei muito grato.

Roberto


Responder

08/08/2003

Roger_malk

ding_ling

já tentou usando TStream e TMemoyStream

vou fazer uns testes aqui e volto a te dar noticia.

roger_malk


Responder

09/08/2003

Cebikyn

Já tentou usar [color=darkblue:6874190fdf]Image1.Picture.Bitmap.LoadFromResourceName(Instance, Name)[/color:6874190fdf]? Funciona perfeitamente no meu Delphi 6 Enterprise.


Responder

09/08/2003

Robotizar

olha se é isso migaum

Por vezes, quando iniciamos um projecto, temos uma preocupação: fazer uma aplicação pequena. Bem, a solução pode passar por colocar todos os bitmaps que vamos utilizar numa dll. Então vamos lá começar:

Deve usar o Image Editor, criar uma nova Resource File (.res), neste ficheiro vamos colocar os bitmaps e icons (ambos funcionam da mesma forma) que queremos na nossa aplicação, clique com a tecla direita do rato na nova resource file e crie um novo bitmap, depois desenhe ou cole do clipboard um bitmap, finalmente guarde o ficheiro com o nome images.res. Depois disto estar feito vá ao IDE do Delphi e no File menu clique New... e escolha DLL depois cole o código abaixo, não se esqueça de adicionar uma unit vazia ao projecto. Guarde o projecta da dll no mesmo directório do ficheiro image.res, finalmente faça o build da dll (não se esqueça, que não se pode correr (executar) uma dll!)

Código da Dll:

library ImageRes; {nome da dll}
uses DummyUnit; {DummyUnit é uma unit vazia, que é necessária}
{$R images.res} {nome da resource file, que deve estar no mesmo caminho da dll}
begin
end.
Código da DummyUnit:

unit DummyUnit;
interface
implementation
end.


Usar os bitmaps que estão na dll:
Estão aqui alguns exemplos como extrair os bitmaps da dll:

procedure TForm1.SpeedButton1Click(Sender:TObject);
var
MyHandle :THandle;
Bmp : TBitmap;
begin
MyHandle := LoadLibrary(´ImageRes.DLL´); {nome da dll construida acima}
Bmp := TBitmap.Create;
Bmp.Handle := LoadBitmap(MyHandle, ´BITMAP1´); {Bitmap1 é o nome do bitmap criado no ficheiro image.res}
SpeedButton1.Glyph.Handle := LoadBitmap(MyHandle,´BITMAP1´); {Carrega o Bitmap1 para o glyph do SpeedButton1}
Canvas.Draw(0,0,Bmp); {Desenha o bitmap no canvas da form}
Image1.picture.bitmap:=Bmp; {Carrega o bitmap para o componente Timage}
Bmp.Free;
end;


Responder

16/11/2004

Anicetojunior

como eu faço para copiar ou carregar um icone no image editor ?

Muito Obrigado...


Responder

16/11/2004

Bruno Belchior

foi exatamente como o colega explicou acima que fiz em todos os sistemas que tenho até hoje (guardei uma foto da Daniela Saraiba no minha tela de Soubre oculta hehehe, fuciona com um ovo de páscoa)


Responder

16/11/2004

Bruno Belchior

foi exatamente como o colega explicou acima que fiz em todos os sistemas que tenho até hoje (guardei uma foto da Daniela Saraiba no minha tela de Soubre oculta hehehe, fuciona com um ovo de páscoa)


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar