![]() |
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:
Okay solltet euch nur den Code in der Mitte anschauen in den "{" & "}" Klammern...
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; Das geht zwar ist aber Total dumm, weil das muss doch noch anders gehen oder ? Ich habe mal versucht:
Delphi-Quellcode:
das geht aber schief, dann kommt ein Fehler (TImage kann nicht TImage zugewiesen werden...)
Form1.ImageGIFBanner.Assign(Image);
Wäre echt nett wenn sich das mal bitte einer angucken kann, danke... MFG geskill |
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 |
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:
versucht, leider ist es dann nicht annimiert!
Form1.ImageGIFBanner.Canvas.Draw(0,0,GIF);
Wenn ihr noch mehr infos braucht dann mal schreiben ... MFG geskill PS: @ Der_Unwissende Du hast das geschrieben... Zitat:
Zitat:
|
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:
Möge das noch einem anderem weiterhelfen ^^
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; MFG |
Re: TGifImage & Dll eine bessere Lösung ???
Wieso prüfst du eigentlich, ob LibHandle>=3 ist?
|
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:
Sollte ja klar sein ...
IF LibHandle <> 0 THEN BEGIN
//Code END; MFG geskill |
Re: TGifImage & Dll eine bessere Lösung ???
*Räusper* Hast Du Dir den Rückgabewert von LoadLibrary mal angesehen?
|
Re: TGifImage & Dll eine bessere Lösung ???
Was hat denn bitte die Resourcen-Anzahl mit dem hModule zu tun?
|
Re: TGifImage & Dll eine bessere Lösung ???
Zitat:
|
Re: TGifImage & Dll eine bessere Lösung ???
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz