Fórum Armazenar imagens em DLL #173725
07/08/2003
0
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
Curtir tópico
+ 0Posts
07/08/2003
Joilson_gouveia
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!!!
Gostei + 0
08/08/2003
Bacalhau
- 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
Gostei + 0
08/08/2003
Tenil
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.
Gostei + 0
08/08/2003
Tenil
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
Gostei + 0
08/08/2003
Roger_malk
já tentou usando TStream e TMemoyStream
vou fazer uns testes aqui e volto a te dar noticia.
roger_malk
Gostei + 0
09/08/2003
Cebikyn
Gostei + 0
09/08/2003
Robotizar
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;
Gostei + 0
16/11/2004
Anicetojunior
Muito Obrigado...
Gostei + 0
16/11/2004
Bruno Belchior
Gostei + 0
16/11/2004
Bruno Belchior
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)