Armazenar imagens em DLL
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]
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
Curtidas 0
Respostas
Joilson_gouveia
07/08/2003
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!!!
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
Bacalhau
07/08/2003
É 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
- 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
Tenil
07/08/2003
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.
GOSTEI 0
Tenil
07/08/2003
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
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
Roger_malk
07/08/2003
ding_ling
já tentou usando TStream e TMemoyStream
vou fazer uns testes aqui e volto a te dar noticia.
roger_malk
já tentou usando TStream e TMemoyStream
vou fazer uns testes aqui e volto a te dar noticia.
roger_malk
GOSTEI 0
Cebikyn
07/08/2003
Já tentou usar [color=darkblue:6874190fdf]Image1.Picture.Bitmap.LoadFromResourceName(Instance, Name)[/color:6874190fdf]? Funciona perfeitamente no meu Delphi 6 Enterprise.
GOSTEI 0
Robotizar
07/08/2003
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;
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
Anicetojunior
07/08/2003
como eu faço para copiar ou carregar um icone no image editor ?
Muito Obrigado...
Muito Obrigado...
GOSTEI 0
Bruno Belchior
07/08/2003
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)
GOSTEI 0
Bruno Belchior
07/08/2003
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)
GOSTEI 0