Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TGifImage & Dll eine bessere Lösung ??? (https://www.delphipraxis.net/104527-tgifimage-dll-eine-bessere-loesung.html)

geskill 5. Dez 2007 19:07


TGifImage & Dll eine bessere Lösung ???
 
Hallo,
bevor Ihr jetzt sagt, dass Thema wurde schon behandelt oder dass existiert doppelt und wird geschlossen, lest einmal was ich zu sagen habe ...

Also ich habe eine Animierte GIF aus einer dll geladen und kann sie auch auf eine TImage Komponente laden, jedoch mache ich das sehr ! umständlich, ich wollte fragen, ob es nicht vielleicht eine bessere, elegantere Lösung gibt, und ja ich habe schon gegoogelt etc.

So der Weg funktioniert ist aber umständlich...
Delphi-Quellcode:
PROCEDURE LoadMainMenuBanner468;
VAR LibHandle: HINST; Image: TImage; RES :TResourceStream; GIF:TGifImage;
BEGIN
  IF FileExists(ExtractFilePath(ParamStr(0))+'RESSOURCE\SYS\StartLogo.dll') = TRUE THEN BEGIN
  LibHandle:=Loadlibrary(PChar(ExtractFilePath(ParamStr(0))+'RESSOURCE\SYS\StartLogo.dll'));
  IF LibHandle >= 3 THEN BEGIN
   // Bild wird geladen...
   RES := TResourceStream.CreateFromID(LibHandle, 3, 'GIF');
   // Gif Komponente wird erstellt...
   GIF := TGifImage.Create;
   Image := TImage.Create(Application.Owner);
       TRY
        Gif.LoadFromStream(Res);
        Image.Picture.Assign(Gif);
        // in Image.Picture ist jetzt das Bild vorhanden, alles klappt prima...
        {Image.Picture.SaveToFile(ExtractFilePath(ParamStr(0))+'BannerGif.gif');}
        {Form1.ImageGIFBanner.Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'BannerGif.gif');}
        {DeleteFile(ExtractFilePath(ParamStr(0))+'BannerGif.gif');}
        FINALLY
        Res.Free;
        GIF.Free;
        Image.Free;
        END;
  FreeLibrary(LibHandle);
  END ELSE
    RaiseLastOSError();
  END;
END;
Okay solltet euch nur den Code in der Mitte anschauen in den "{" & "}" Klammern...
Das geht zwar ist aber Total dumm, weil das muss doch noch anders gehen oder ?

Ich habe mal versucht:
Delphi-Quellcode:
Form1.ImageGIFBanner.Assign(Image);
das geht aber schief, dann kommt ein Fehler (TImage kann nicht TImage zugewiesen werden...)

Wäre echt nett wenn sich das mal bitte einer angucken kann, danke...

MFG
geskill

Der_Unwissende 6. Dez 2007 13:51

Re: TGifImage & Dll eine bessere Lösung ???
 
Von welchem Typ ist denn überhaupt Form1.ImageGIFBanner?

Und warum lädst Du das Gif über eigentlich erst in ein TImage? Also irgendwie verstehe ich die Vorgehensweise noch nicht richtig, hier wäre es sicherlich hilfreich, wenn Du dann doch etwas mehr Informationen rausgibst.
Davon ausgehend, dass ImageGIFBanner ein TGifImage ist, würde ich halt fragen, warum Du dann die Variable GIF vom gleichen Typ einführst? Und wenn die vom gleichen Typ sind, dann sollte ein direktes Assign ganz gut klappen.

Ansonsten kannst Du bei Image-Komponenten auch immer der Eigenschaft Picture.Bitmap eine Bitmap zuweisen, eine TGifImage wiederum bietet glaube ich die Eigenschaft Graphics an (die ein solches Bitmap liefert).

Gruß Der Unwissende

geskill 6. Dez 2007 16:20

Re: TGifImage & Dll eine bessere Lösung ???
 
Hi,
Ich benutze die TGifImage Unit von Anders Melander.
Form1.ImageGIFBanner ist vom Typ TImage, sollte bei jeder Delphi Version dabei sein, ich habe diese halt nur so benannt.

Weiß ich vllt. noch nicht gesagt habe, die *.gif Datei ist annimiert! Ich habe bereits
Delphi-Quellcode:
Form1.ImageGIFBanner.Canvas.Draw(0,0,GIF);
versucht, leider ist es dann nicht annimiert!

Wenn ihr noch mehr infos braucht dann mal schreiben ...

MFG
geskill

PS:
@ Der_Unwissende
Du hast das geschrieben...
Zitat:

Von welchem Typ ist denn überhaupt Form1.ImageGIFBanner?
Wenn man ein bischen überlegt und mal alles liest was ich geschrieben habe dann kann man auch darauf kommen, weil ich relativ weit unten bereits das
Zitat:

(TImage kann nicht TImage zugewiesen werden...)
geschrieben habe, nehm' ich dir aber nicht übel :-)

geskill 6. Dez 2007 17:32

Re: TGifImage & Dll eine bessere Lösung ???
 
So ich habe das ganze noch mal angeschaut, hier ist die Lösung, ohne TImage Variable (wie gesagt war unnötig^^)

Delphi-Quellcode:
PROCEDURE LoadMainMenuBanner468;
VAR LibHandle: HINST; RES :TResourceStream; GIF:TGifImage;
BEGIN
  IF FileExists(ExtractFilePath(ParamStr(0))+'RESSOURCE\SYS\StartLogo.dll') = TRUE THEN BEGIN
  LibHandle:=Loadlibrary(PChar(ExtractFilePath(ParamStr(0))+'RESSOURCE\SYS\StartLogo.dll'));
  IF LibHandle >= 3 THEN BEGIN
   RES := TResourceStream.CreateFromID(LibHandle, 3, 'GIF');
   GIF := TGifImage.Create;
       TRY
        Gif.LoadFromStream(Res);
        Form1.ImageGIFBanner.Picture.Graphic := GIF;
        FINALLY
        Res.Free;
        GIF.Free;
        END;
  FreeLibrary(LibHandle);
  END ELSE
    RaiseLastOSError();
  END;
END;
Möge das noch einem anderem weiterhelfen ^^

MFG

Apollonius 6. Dez 2007 17:41

Re: TGifImage & Dll eine bessere Lösung ???
 
Wieso prüfst du eigentlich, ob LibHandle>=3 ist?

geskill 6. Dez 2007 17:45

Re: TGifImage & Dll eine bessere Lösung ???
 
Hi,
ja das könnt ihr nicht wissen, das beduetet ungefähr so viel ob insgesammt 3 bilder in der *.dll vorhanden sind! Das kann man jetzt machen um wirklich sicher zu gehen ob doch nicht so ein Typ die Falsche *.dll nimmt, ich programmiere gerne so das es "affensicher" ist! Aber ihr könnt natürlich auch das nehmen:

Delphi-Quellcode:
  IF LibHandle <> 0 THEN BEGIN
  //Code
  END;
Sollte ja klar sein ...

MFG
geskill

DeddyH 6. Dez 2007 17:47

Re: TGifImage & Dll eine bessere Lösung ???
 
*Räusper* Hast Du Dir den Rückgabewert von LoadLibrary mal angesehen?

Apollonius 6. Dez 2007 17:48

Re: TGifImage & Dll eine bessere Lösung ???
 
Was hat denn bitte die Resourcen-Anzahl mit dem hModule zu tun?

Die Muhkuh 6. Dez 2007 17:50

Re: TGifImage & Dll eine bessere Lösung ???
 
Zitat:

Zitat von Apollonius
Was hat denn bitte die Resourcen-Anzahl mit dem hModule zu tun?

Nichts? :zwinker:

DeddyH 6. Dez 2007 17:51

Re: TGifImage & Dll eine bessere Lösung ???
 
Zitat:

Zitat von Die Muhkuh
Nichts? :zwinker:

Eben :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:41 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz