Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bilder als Ressource laden (https://www.delphipraxis.net/49096-bilder-als-ressource-laden.html)

Kompon Ente 5. Jul 2005 14:30


Bilder als Ressource laden
 
Hi,

wie kann ich meine GIF-Images im Programm laden, sodass ich keinen Extraordner dafür brauche und sie direkt geladen werden?

Kompon Ente 5. Jul 2005 14:57

Ich muss dazu sagen, dass meine ImageList keine .gif-Dateien unterstützt! ;)

Muss also irgendwie anders gemacht werden...

jfheins 5. Jul 2005 15:08

Re: Bilder als Ressource laden
 
TBitmap hat Funktionen, um es aus ener Ressource zu laden ;)

Laden:
Delphi-Quellcode:
LoadFromResourceName (HInstance, 'Maske');
.rc-Datei:
Code:
Maske RCDATA "icons/bild.XXX"

Zacherl 5. Jul 2005 15:45

Re: Bilder als Ressource laden
 
Hallo,
um GIF anzuzeigen such mal nach der Unit GifImage.

Florian

Kompon Ente 5. Jul 2005 16:48

Hi,

es soll ja im Programm sein, ohne, dass ich es im Ordner habe.

Also praktisch nur die .exe-Datei und dort sind die Bilder drin gespeichert.

CalganX 5. Jul 2005 16:51

Re: Bilder als Ressource laden
 
Hi,
wenn du es einem TImage zuweist, wird es automatisch in einer Resource gespeichert. Wenn du es manuell machen willst, dann kannst du es auch so in einem Ressource ablegen. Du hast dann zwar am Anfang erstmal die .rc- bzw. .res-Datei, aber die wird am Ende durch den Linker mit in die Exe gepackt.
Aber wie gesagt benötigst du eine zusätzliche Unit für GIF-Bilder.

Chris

Kompon Ente 5. Jul 2005 17:36

:gruebel: :gruebel: :gruebel:

:wiejetzt:

Khabarakh 5. Jul 2005 17:44

Zitat:

Zitat von Kompon Ente
:gruebel: :gruebel: :gruebel:

:wiejetzt:

Kannst du vielleicht eine _etwas_ genauere Frage stellen :roll: ?

Wenn du im OI deinem Image ein Bitmap zuweist, kümmert sich Delphi um die Speicherung, sonst musst du eben eine Ressourcendatei benutzen. Aber auf beiden Wegen hast du letztendlich nur eine Echse.

Kompon Ente 5. Jul 2005 20:15

Hi,

ich verstehe aber nicht wie das gehn soll. :roll:

Ich nix schlau! :zwinker:

..mein Delphi unterstützt immernoch kein GIF, wie oft noch? :angel2:

CalganX 5. Jul 2005 20:19

Hi,
Zitat:

Zitat von Kompon Ente
..mein Delphi unterstützt immernoch kein GIF, wie oft noch? :angel2:

so oft, bis du darauf kommst, dass du bereits einen Hinweis bekommen hast.
Zitat:

Zitat von Florian Bernd
um GIF anzuzeigen such mal nach der Unit GifImage.

Chris

Luckie 5. Jul 2005 20:20

Re: Bilder als Ressource laden
 
Und wie oft sollen wir dir sagen, dass du dich nach eine entsprechenden Komponente umgucken sollst? Zum Beispiel Bei Google suchenTGifImage.

Kompon Ente 5. Jul 2005 20:23

Wo soll'n diese Unit sein? In meiner Bibliothek finde ich nichts.

CalganX 5. Jul 2005 20:32

Re: Bilder als Ressource laden
 
Hi,
im Internet. Google wirst du hoffentlich kennen: www.google.de
Ansonsten kannst du auch dem Link von Luckie folgen, der dir sogar schon direkt das richtige Suchwort gibt. Wir haben dir jetzt genügend Hinweise gegeben, versuch also bitte mal mit ein wenig Eigeninitiative dir die Komponente/Unit zu suchen.

Und wenn dir das zu stressig ist: du kannst auch andere Dateiformate verwenden (JPEG oder BMP), die (fast) direkt von Delphi unterstützt werden.

Chris

Kompon Ente 5. Jul 2005 20:36

Meine Güte, ich habe TGIFImage doch!!!!

Aber es ist doch sinnlos 6 Komponenten draufzumachen.

Ich will nicht, dass das Programm zu groß wird.

Gibt's keine andere Möglichkeit, die Pics ins Proggie einzubinden?

CalganX 5. Jul 2005 20:40

Re: Bilder als Ressource laden
 
Hi,
natürlich. Über Ressourcen. Dazu gibt es genügend Sources in der DP und oben gibt's sogar auch einen. Das Problem ist nur dein Format. Egal, was du damit machen willst: du weißt nicht, ob das wirklich funktioniert, da GIF einen eigenen Kompressionsalgorithmus verwendet. Also: über Ressourcen-Dateien einbinden. Fertig. Verwenden im Programm ist dann eine andere Sache (und eben dafür wirst du eine neue Komponenten brauchen).

Chris

SirThornberry 5. Jul 2005 20:42

Re: Bilder als Ressource laden
 
doch es gibt Möglichkeiten. Diese wurde bereits auch aufgezeigt.
Und zwar handelt es sich um Ressource-Dateien. Einfach eine neue Datei erstellen mit der Endung rc und dann "Project->Add To Project" und diese Datei auswählen.

Die Ressourcendatei ist dann so aufgebaut
Code:
NameFuerDieRessource1 RessourcenTyp "Dateiname der Datei die in die Exe mit rein soll1"
NameFuerDieRessource2 RessourcenTyp "Dateiname der Datei die in die Exe mit rein soll2"
dein Gifimage sollte dann noch mindestens die Möglichkeit haben von einem Stream zu laden.
Und an die Ressourcen kommst du dann mit TRessourceStream heran

Kompon Ente 5. Jul 2005 20:43

Also kann ich auch gleich einfach 6 Komponenten nehmen(?) Versteh ich das richtig?

SirThornberry 5. Jul 2005 20:45

Re: Bilder als Ressource laden
 
wenn du komponenten auf dein Formular setzt dann werden die zugewiesen Bilder in der DFM-Ressource gespeichert. Wenn du selbst eine Ressourcendatei anlegst wird die Ressource außerhalb davon angelegt und du kannst beliebig darauf zugreifen (wird also nicht direkt in deine Anzeigekomponente geladen).
Der vorteil von der manuellen Ressourceneinbindung ist das du nur eine Anzeigekomponente brauchst und später dann entscheiden kannst welche von den eingebunden Dateien gerade angezeigt werden soll

r2c2 5. Jul 2005 20:46

Zitat:

Zitat von Kompon Ente
Meine Güte, ich habe TGIFImage doch!!!!

Aber es ist doch sinnlos 6 Komponenten draufzumachen.

Ich will nicht, dass das Programm zu groß wird.

Gibt's keine andere Möglichkeit, die Pics ins Proggie einzubinden?

Einbinden, kannst du das gif auch so(sind ja auch nur 0en und 1en), nur anzeigen eben net. Und das wird sich auch nie ändern, wenn du Delphi nicht beibruingst, wie n Gif funktioniert. Das musst du dann entweder selber proggen oder ne Komponente benutzen. Mit dem Argument "Ich will n 0Byte Prog, das mehr kann als Word und Excel zusammen" kommst du nicht viel weiter(wenns doch gehen sollte, sag mir bitte wie! Lass das patentieren und du wirst reich). Wenn du n Feature willst, musst du auch in Kauf nehmen, dass dadurch Arbeit und Bytes entstehen.

mfg

Christian

P.S.: Ich kenn TGifImage nicht, aber IMHO sollte eigentlich eine Komponente reichen.

Luckie 5. Jul 2005 20:46

Re: Bilder als Ressource laden
 
Von was für 6 Komponenten redest du eigentlich die ganze Zeit? Inxstallier dir eine Komponente, zum Beispiel TGifImage, mit der das TImage um die Fähigkeit Gif's anzuzeigen erweitert wird und dann stellst du das anzuzeigende Image entweder im OI ein oder lädst es über die Resource, wie es hier schon mehrfach beschrieben wurde.

CalganX 5. Jul 2005 20:47

Hi,
Zitat:

Zitat von Kompon Ente
Also kann ich auch gleich einfach 6 Komponenten nehmen(?) Versteh ich das richtig?

nicht zwingend. Du wirst doch irgendwo deine Bilder anzeigen, oder? Das wird nicht einfach mit einem TImage funktionieren, aber scheinbar hast du das auch schon herausbekommen. Die Ressourcendatei enthält dann einfach nur die Bilde und die lädst du da raus über ein Objekt (nicht zwingend eine Komponente). Dafür brauchst du keine 6 Komponenten, sondern lediglich die Ressource, ein Objekt zum Rausladen und eine oder mehrere Komponenten zum Anzeigen.

Entweder verstehe ich dich nicht ganz, oder du verstehst nicht, was ich versuche dir mitzuteilen. :gruebel:
Chris

Kompon Ente 5. Jul 2005 20:47

Das versteh ich ja, aber meine Befehlshilfe funktioniert nicht, wenn ich Strg + Leertaste im Programm drücke (compilieren tut er's aber).

Deshalb komme ich atm nicht weiter..

Kompon Ente 5. Jul 2005 20:48

Doch, doch, Ihr versteht das schon. Nur ich bin etwas dämlich glaub ich, ich verstehe wie Ihr es meint, aber weiß es nicht umzusetzen. ;)

Naja, ist ja auch schon spät.. :roll:

r2c2 5. Jul 2005 20:54

Zitat:

Zitat von Kompon Ente
Das versteh ich ja, aber meine Befehlshilfe funktioniert nicht, wenn ich Strg + Leertaste im Programm drücke (compilieren tut er's aber).

Deshalb komme ich atm nicht weiter..

Dann musst du wohl oder übel lesen und zwar die Hilfe, da stehen die Eigenschaften. Du brauchst also die CodeCompletion gar nicht. Zum Zweiten sollte die CodeCompletion aber funktionieren und ich tippe einfach mal, das tut sie auch.

mfg

Christian

SirThornberry 5. Jul 2005 20:59

Re: Bilder als Ressource laden
 
gibt es bei deinem TGifImage keine Methode "LoadFromStream"? Wenn doch sollte es doch kein Problem geben.

Kompon Ente 5. Jul 2005 21:00

Weiß ich ja nicht, ich kann die Befehlshilfe (Strg + Leertaste) nicht aufrufen. ;)

Aber ich glaub ich bin einfach zu dämlich für die ganze Sache, am besten wir lassen das hier, sonst werdet Ihr nur noch mehr sauer, weil ich so schwer von Begriff bin! ;)

SirThornberry 5. Jul 2005 21:02

Re: Bilder als Ressource laden
 
Tipp doch einfach mal LoadFromStream, halt die Maus darüber und schau ob der ToolTip kommt, oder kompiliere nach dem du die Methode geschrieben hast, dann erkennst du an der Fehlermeldung ob es die Methode gibt.

Kompon Ente 5. Jul 2005 21:05

Normal kommt die Befehlshilfe schon, wenn ich einfach nur Strg + Leertaste klicke ... dann sollte er normal Sachen wie Self usw. anzeigen!

Er macht aber gar nichts, egal was ich tue. :roll:

Und btw: Ich glaube, LoadFromFile lädt das Bild nur aus dem Drdner. Aber ich möchte, dass es im Programm drinne ist, damit ich die GIF's löschen kann!

SirThornberry 5. Jul 2005 21:09

Re: Bilder als Ressource laden
 
deswegen sollst du auch schauen ob es LoadFromStream gibt

Kompon Ente 5. Jul 2005 21:10

Ja, gibt es!

Es erfordert die Parameter (Stream: TStream)!

Wie geht's weiter?

SirThornberry 5. Jul 2005 21:18

Re: Bilder als Ressource laden
 
du musst jetzt deine Ressource einbinden (das beispiel mit dem RC was ich oben geschrieben hab).
Dann gehts so
Delphi-Quellcode:
var LStream: TResourceStream;
begin
  LStream := TResourceStream.Create(HInstance, 'NameOfYourRessource', 'YourResType');
  LStream.Position := 0;
  YourGifImage.LoadFromStream(LStream);
  LStream.Free;
end;

Kompon Ente 5. Jul 2005 21:20

Mein Bild, was ich einbinden will befindet sich von der Project1.exe aus gesehn im Ordner data\images\1.gif!

Wie geht das dann?

SirThornberry 5. Jul 2005 21:23

Re: Bilder als Ressource laden
 
dann geht es so
Datei erstellen namens "irgendwas.rc"
Inhalt dieser Datei
Code:
MyGifRes1 RC_Data "data\images\1.gif"
Dann in Delphi: "Project->Add To Project" und diese Datei auswählen

zum Laden des Gif-Images:
Delphi-Quellcode:
var LStream: TResourceStream;
begin
  LStream := TResourceStream.Create(HInstance, 'MyGifRes1', 'RC_DATA');
  LStream.Position := 0;
  YourGifComponent.LoadFromStream(LStream);
  LStream.Free;

Kompon Ente 5. Jul 2005 22:36

Das funktioniert nicht wirklich.

Hab's so gemacht, aber er greift irgendwie nicht auf die Daten in der irgendwas.rc zu, warum auch immer?! :roll:

Kompon Ente 5. Jul 2005 22:40

:wall:

Hab's vergessen dem Projekt hinzuzufügen - nun funktioniert's! :)

Danke..

Aber wie mache ich das, wenn ich jetzt mehrere Bilder haben will?

Muss ich dafür jedes Mal eine .rc-Datei machen oder geht das auch irgendwie in einer?

jfheins 6. Jul 2005 06:35

Re: Bilder als Ressource laden
 
einfach mehrere Zeilen ;)

Also z.B.
Code:
MyGifRes1 RC_Data "data\images\1.gif"
MyGifRes2 RC_Data "data\images\2.gif"
MyGifRes3 RC_Data "data\images\3.gif"

Kompon Ente 6. Jul 2005 13:22

Und wie mach ich das dann, dass ich die Bilder löschen kann und sie trotzdem im Programm gespeichert sind?

Muss ich die nur einmal laden oder wie? Ich check das nicht ganz..

Kompon Ente 6. Jul 2005 16:12

Hab's jetzt gemacht und er hat 'ne .res-Datei erstellt.

Nun funktioniert's auch ohne Bilder - vielen Dank für Eure Hilfe! :) :thumb:

SirThornberry 6. Jul 2005 18:40

Re: Bilder als Ressource laden
 
du musst die Bilder ja nicht löschen, in der fertigen Exe-Datei werden die Bilder direkt aus der Exe genutzt. Behalte die Orignalbilder lieber falls sich daran mal was leicht ändert, nicht das dein Projekt dann nicht mehr kompilierbar ist nur weil du die Dateien weg gelöscht hast.

Kompon Ente 6. Jul 2005 20:48

Hi,

wird sich nichts dran ändern, ist ein Galgenmännchen! :mrgreen:

Außerdem war's ja meine Aufgabe die Bilder so einzubinden, damit ich sie nicht mehr speichern muss. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 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