[Delphi] Gif files in de exe meeverwerken

Pagina: 1
Acties:
  • 112 views sinds 30-01-2008
  • Reageer

  • Warbringer
  • Registratie: Oktober 1999
  • Laatst online: 19:48
Hoi,

Ik zit met een probleem. Op verschillende pagina's staat uitleg over hoe ik Gif files mee kan complileren met een EXE file. Zodat de gifs dus in de exe staan en niet als externe files aangeroepen hoeven te worden.

Nou is het volgens die sites de bedoeling dat ik een resource file aanmaak.

Ok, ik heb 53 gif files in een submap staan nu, en een RS file gemaakt volgens deze standaard.

gif1 GIF "plaatje.gif"
gif2 GIF "plaatje1.gif"

etc.

Deze heb ik met BRCC32 van delphi naar een .res file laten compileren.

daarna heb ik ($R .\gif\resourcefile.res) toegevoegd aan mijn project.

Dus zou delphi iig moeten laten weten dat er een res file aanwezig is.

Het is nu dus de bedoeling dat ik die 53 gif files in de exe zelf bak, en ze ook kan aanspreken vanuit de code natuurlijk :)

En hier loop ik dus vast..

http://delphi.about.com/library/weekly/aa021301a.htm

is de manual die ik gebruik, maar ik ben nog maar een beginner en echt duidelijk is het me niet helemaal.

GoT Search was dead end. Google search en FAQ links gaven me die link. Ik heb nog 1 page kunnen vinden maar daar snapte ik helemaal niks van. Ging allemaal over streaming van mp3's enzo, ik wil eerst beginnen met wat GIF'jes :)

Is er iemand die me een stapje de goeie richting in kan helpen? Ik werk trouwens op Delphi 5.

thanks in advance.

I want to live forever, so far.. so good.


  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 11-09 09:09
Je moet in het object waar je de gif in weergeeft "getrecource" aanroepen. Daar kun je dan je plaatje uitkrijgen. Hoe het precies werkt met een gif weet ik niet.

"If you don't know where you are going, any road will take you there"


  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

keurig dat verhaal volgen, ff printen en gewoon letterlijk opvolgen dan komt 't wel goed!

{$R AboutDelphi.RES}

doe je om 't te declareren, je kunt er zelfs hele webpages en plaatjes daarin in je exe mee kwijt!

zie ook:http://www.jansfreeware.com/articles/delphiresource.html

Cogito Ergo Credo


  • lytjepole
  • Registratie: September 2000
  • Laatst online: 15:59

lytjepole

Schier?

[Did you know... ... that 35% of statistics are made-up?]


  • Warbringer
  • Registratie: Oktober 1999
  • Laatst online: 19:48
Op donderdag 07 maart 2002 01:32 schreef jopiek het volgende:
keurig dat verhaal volgen, ff printen en gewoon letterlijk opvolgen dan komt 't wel goed!

{$R AboutDelphi.RES}

doe je om 't te declareren, je kunt er zelfs hele webpages en plaatjes daarin in je exe mee kwijt!

zie ook:http://www.jansfreeware.com/articles/delphiresource.html
Die had ik ook al gevonden via google, maar daar kwam ik HELEMAAL niet uit. :-\

Maar als ik het goed begrijp, als ik die ($r .\gif\delphiresources.res) meeneem, dan neemt hij alle files in die res file mee bij het compileren van de EXE file?

ok, dat lukt dan nog wel, maar nu dus het aanroepen, ik hoor hier GetResource, of LoadResource..

t'is me allemaal wat onduidelijk, maar ik zoek wel weer gewoon verder :) thnx guys!

I want to live forever, so far.. so good.


  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

Op donderdag 07 maart 2002 11:25 schreef Warbringer het volgende:

[..]

Die had ik ook al gevonden via google, maar daar kwam ik HELEMAAL niet uit. :-\

Maar als ik het goed begrijp, als ik die ($r .\gif\delphiresources.res) meeneem, dan neemt hij alle files in die res file mee bij het compileren van de EXE file?

ok, dat lukt dan nog wel, maar nu dus het aanroepen, ik hoor hier GetResource, of LoadResource..

t'is me allemaal wat onduidelijk, maar ik zoek wel weer gewoon verder :) thnx guys!
je include die file dus die wordt ook meegecompileerd... Zou een goed boek over Delphi (D6 Developers Guide of zo) niet wat zijn???

Cogito Ergo Credo


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 11:35

Tomatoman

Fulltime prutser

Controleer met de Image Editor (meegeleverd met Delphi) eerst eens of die GIF'jes inderdaad in je resource file zitten. Gewoon de .RES openen met het programma en je ziet een opsomming van alle resources. Image Editor kan een GIF trouwens niet weergeven (maar dus wel opsommen).

Als je wilt kijken of je GIF'jes daadwerkelijk in je executable worden gelinkt als resources, compileer dan DelphiX\demos\resxplor\resxplor.dpr, waarmee je alle resources in een executable kunt verkennen.

Een goede grap mag vrienden kosten.


Verwijderd

Wil je het plaatje op het scherm zetten? Je hebt eerst een GIF componentje nodig, bijvoorbeeld TGIFImage van http://www.melander.dk

Dan laden uit de resource. Werkt heel makkelijk met streams:
code:
1
2
3
4
5
6
7
8
var
  RS: TResourceStream;
  GIF: TGIFImage;
begin
  RS := TResourceStream.Create(HInstance, 'gifplaatje', RT_RCDATA);
  GIF := TGIFImage.Create;
  GIF.LoadFromStream(RS);
  Image1.Picture.Graphic := GIF;

  • Warbringer
  • Registratie: Oktober 1999
  • Laatst online: 19:48
Op donderdag 07 maart 2002 13:47 schreef TheOdyssey het volgende:
Wil je het plaatje op het scherm zetten? Je hebt eerst een GIF componentje nodig, bijvoorbeeld TGIFImage van http://www.melander.dk

Dan laden uit de resource. Werkt heel makkelijk met streams:
code:
1
2
3
4
5
6
7
8
var
  RS: TResourceStream;
  GIF: TGIFImage;
begin
  RS := TResourceStream.Create(HInstance, 'gifplaatje', RT_RCDATA);
  GIF := TGIFImage.Create;
  GIF.LoadFromStream(RS);
  Image1.Picture.Graphic := GIF;
Ja, die GIF converter had ik al gebruikt om de gif'jes te laten zien.
Dat was me dus al gelukt.

hiermee zou ik iig al een stuk verder moeten kunen komen, thnx all!

//edit

na wat gepruts, en wat schrikken (Delphi image editor ging de mist in) maar de Resource Hacker die ik gebruik voor exe's en dll's aan te passen werkt beter.

De kaarten zitten eruit, nu moet ik ze nog aanroepen.

Momenteel laad ik ze extern in dmw.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var i: integer; filenaam: string;
begin
  for i:= 1 to AantalKaarten do
  begin
    Kaarten[i]:= TImage.Create(self);
    with Kaarten[i] do
    begin
    Parent:= self;
    filenaam:= ('Gif\Kaart' + IntToStr(i) + '.Gif');
    Picture.LoadFromFile(filenaam);
    Tag:= i;
    DragMode:= dmAutomatic;
    Autosize:=true;
    Stretch:=false;
    Visible:= False;
    OnDragDrop:= ImageDragDrop;
    OnDragOver:= FormDragOver;
    end;
  end;
end;

maar met het voorbeeld van de post hierboven zal ik ze dus ook uit de exe zelf als resource kunnen halen :)

I want to live forever, so far.. so good.


Verwijderd

Haha!! GPJ Hogeschool Informatica Eindhoven :D maken van een patience look a like spel :P...

  • Warbringer
  • Registratie: Oktober 1999
  • Laatst online: 19:48
Op donderdag 07 maart 2002 15:40 schreef TimD het volgende:
Haha!! GPJ Hogeschool Informatica Eindhoven :D maken van een patience look a like spel :P...
yah pcies :)

Maar het lukt me nu nog niet helemaal.

die TgifImage ondersteund geen .top en .left properties?

en Timage en Tgifimage is natuurlijk weer niet compatible.

Ik moet dus die gifjes inladen wat nu dus door dit stukje code gebeurd:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var i: integer; filenaam: string;
begin
  for i:= 1 to AantalKaarten do
  begin
    Kaarten[i]:= TImage.Create(self);
    with Kaarten[i] do
    begin
    Parent:= self;
    filenaam:= ('Gif\Kaart' + IntToStr(i) + '.Gif');
    Picture.LoadFromFile(filenaam);
    Tag:= i;
    DragMode:= dmAutomatic;
    Autosize:=true;
    Stretch:=false;
    Visible:= False;
    OnDragDrop:= ImageDragDrop;
    OnDragOver:= FormDragOver;
    end;
  end;
end;

Dit moet dus samengegooid worden met
code:
1
2
3
4
5
6
7
8
var
  RS: TResourceStream;
  GIF: TGIFImage;
begin
  RS := TResourceStream.Create(HInstance, 'gifplaatje', RT_RCDATA);
  GIF := TGIFImage.Create;
  GIF.LoadFromStream(RS);
  Image1.Picture.Graphic := GIF;

En daar kom ik dus niet uit.

Die kaart[i is van het type array [0..aantalkaarten] of Timage, en dan loop ik weer vast :( :'(

I want to live forever, so far.. so good.


Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var i: integer; filenaam: string;
begin
  for i:= 1 to AantalKaarten do
  begin
    Kaarten[i]:= TImage.Create(self);

    GIF := TGIFImage.Create;
    GIF.LoadFromStream(RS);

    with Kaarten[i] do
    begin
    Picture.Graphic := GIF; //laden bitch

    Parent:= self;
    //filenaam:= ('Gif\Kaart' + IntToStr(i) + '.Gif');
    //Picture.LoadFromFile(filenaam);
    Tag:= i;
    DragMode:= dmAutomatic;
    Autosize:=true;
    Stretch:=false;
    Visible:= False;
    OnDragDrop:= ImageDragDrop;
    OnDragOver:= FormDragOver;
    end;
  end;
end;

?? :?

  • Warbringer
  • Registratie: Oktober 1999
  • Laatst online: 19:48
Op donderdag 07 maart 2002 15:56 schreef TimD het volgende:
?? :?
helaas, nope.. of ik krijg een cpu error beterft priviledges, of hij kan gewoon niks laden omdat er geen stream gemaakt word. :|

En als ik dan die RS aanmaak, krijg ik weer de melding dat de resource niet gevonden is, maar ik heb die al gechecked, en ze zijn er echt ..

ARG!
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
procedure TFormSeahaven.HaalKaartenOp;
var i: integer; filenaam: string;
    RS: TResourceStream;
    GIF: TGIFImage;
begin
  for i:= 1 to AantalKaarten do
  begin
    Kaarten[i]:= TImage.Create(self);
    filenaam:= trim(('KAART' + IntToStr(i) + ''));
    RS := TResourceStream.Create(HInstance,Filenaam,RT_RCDATA);
    GIF := TGIFImage.Create;
    GIF.LoadFromStream(RS);
      with Kaarten[i] do
    begin
    Picture.Graphic := GIF; //laden bitch
    Parent:= self;
    //Picture.LoadFromFile(filenaam);
    Tag:= i;
    DragMode:= dmAutomatic;
    Autosize:=true;
    Stretch:=false;
    Visible:= False;
    OnDragDrop:= ImageDragDrop;
    OnDragOver:= FormDragOver;
    end;
  end;

Ik heb met Resource Hacker gekeken of de file bestaat, en hij gestaat zeker weten. KAART1 is de eerste die aangesproken moet worden.

I want to live forever, so far.. so good.


Verwijderd

Misschien is het resource type het probleem. Probeer:
code:
1
RS := TResourceStream.Create(HInstance,Filenaam,'GIF');

  • Warbringer
  • Registratie: Oktober 1999
  • Laatst online: 19:48
Op vrijdag 08 maart 2002 10:18 schreef TheOdyssey het volgende:
Misschien is het resource type het probleem. Probeer:
code:
1
RS := TResourceStream.Create(HInstance,Filenaam,'GIF');
Ik benn "weer" een stukje verder.
Maar nu blijkt dat die TGIFImage de standaard properties van TImage niet ondersteund (dingen als .top, .left, .bringtofront etc etc).

Kan ik dat gewoon aanpassen in de TGifimage met Inherit ?

I want to live forever, so far.. so good.

Pagina: 1