Einzelnen Beitrag anzeigen

Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Bild über Ressource-Dll laden

  Alt 1. Dez 2007, 20:28
Hallo Leute,
ich wollte das Thema hier noch mal kurz aufgreifen um vllt. anderen leuten die das gleiche Problem haben das ganze mal etwas klarer zu machen...

Ich behandle allerdings nur das Laden von BMP Dateien, den Rest kann ich leider auch nicht :-( (wäre nett wenn mir einer animierte Gif erklären kann) Aber kommen ich zum Punkt.

1.
Ihr benötigt eine .dll (DATEI -> NEU -> WEITERE -> DLL-EXPERTE)
Die speichert Ihr erst einmal. Am besten in einem neuen Ordner.
Dann löscht Ihr alles überflüssige aus dem Projekt.

Das sieht dann ungefähr so aus (Die *.dll).
Delphi-Quellcode:
   library NAME;

   {$R *.res} 
   {$R 'BILDER.res' 'BILDER.rc'}
    begin
    end.
2.
Okay jetzt müssen wir eine *.rc Datei erstellen, es geht zwar mit delphi aber das ist mit dem Text-Editor schneller
In die Datei schreibt ihr dann dass: Ich finde es am besten wenn man mit 1 anfängt ist am übersichtlichsten, BITMAP ist
klar, und "SplashScreen.bmp" ist dann der BILDNAME, die Bitmap Datei muss unbedigt mit der neuen Textdatei ein den oben
genannten Neuen Ordner.

   1 BITMAP "SplashScreen.bmp" So die Textdatei abspeichern und um umbennenen (BILDER.rc) etc.!

3.
Jetzt müsst ihr euch wieder delphi vornehmen und die *.dll compilieren.
Wenn ihr jetzt in der Projektverwaltung nachschaut könnt ihr auch die neue *.rc sehen,
wenn nicht delphi mal neustarten, damit auch alles compiliert wird!
Ihr solltet auch mal schauen ob nach dem Compilieren eine *.res und *.drc Datei erzeugt wurde!
Das Projekt könnt ihr jetzt schließen.

4.
Nun erstellt ihr bzw. ladet euer Programm wo ihr die Bilddatei aus der dll laden wollt.
hier braucht ihr nur sehr wennig code ...

Delphi-Quellcode:
VAR LibHandle: HINST; Bitmap: TBitmap;
BEGIN
  // So als erstes muss angegeben werden wo sich eure dll befindet, ich arbeite immer mit "ExtractFilePath"
  // es ist einfach sicherer!
  LibHandle:=Loadlibrary(PChar(ExtractFilePath(ParamStr(0))+'NAME.dll'));
  IF LibHandle <> 0 THEN BEGIN
   Bitmap:=TBitMap.Create;
       TRY
         //So jetzt wird das Bild geladen, und zwar das erste, solltet ihr das schön durchnummeriert
         //haben dann ist es jetzt sehr einfach zu wissen welche Nummer ihr am ende eintragen müsst
         Bitmap.LoadFromResourceID(LibHandle, 1);
         //So jetzt muss das Bild nur noch angezeigt werden. Achtung bei mir kam immer ein fehler wenn
         //ich "FormX.Image1" benutzt habe also einfach so...
         Image1.Canvas.Draw(0,0,Bitmap);
        FINALLY
         Bitmap.Free;
        END;
  FreeLibrary(LibHandle);
  END ELSE
    RaiseLastOSError();
end;
Ich hoffe jetzt, dass es doch verständlich war und es dem ein oder anderen doch hilft :-)
Weil ich finde es doch besser die Dateien nicht alle in *.exe zu packen, die wird dann
einfach immer größer und, wenn man ein Updater im Programm hat muss der bei einem 0,5 MB
großen Bild bei jedem Update das laden, auch wenn sich das Bild nicht ändert...
MFG geskill
Sebastian
  Mit Zitat antworten Zitat