Entwickler-Ecke
Multimedia / Grafik - JPEG von res zur Laufzeit laden
JayK - Sa 16.04.05 13:03
Titel: JPEG von res zur Laufzeit laden
Hallo Leute,
ich habe ein Programm mit res Datei, wo JPGs drin sind.
Auf dem Formular befindet sich eine ComboBox. Wenn man den Wert in der ComboBox verändert, soll von der Ressource mit dem Namen, der dem Text in der Combobox entspricht, in ein TImage geladen werden.
Beispiel:
In der ComboBox wähle ich das Item 'ALL' aus.
In das Image soll nun 'ALL.jpg' aus der .res Datei geladen werden.
Kann mir da jemand weiterhelfen?
AXMD - Sa 16.04.05 13:09
Titel: Re: JPEG von res zur Laufzeit laden
JayK hat folgendes geschrieben: |
Hallo Leute,
ich habe ein Programm mit res Datei, wo JPGs drin sind.
Auf dem Formular befindet sich eine ComboBox. Wenn man den Wert in der ComboBox verändert, soll von der Ressource mit dem Namen, der dem Text in der Combobox entspricht, in ein TImage geladen werden.
Beispiel:
In der ComboBox wähle ich das Item 'ALL' aus.
In das Image soll nun 'ALL.jpg' aus der .res Datei geladen werden.
Kann mir da jemand weiterhelfen? |
Da gibts was, das nennt sich Suche. Schon mal verwendet :roll:
AXMD
AXMD - Sa 16.04.05 13:27
Das Resourcen-Prinzip ist aber immer das gleiche; was du danach mit den Ressourcen machst ist vollkommen unabhängig davon
AXMD
JayK - Sa 16.04.05 13:39
Ich will nicht anmaßend wirken,
aber einem TBitmap werde ich ja wohl schlecht einem TJPEGImage oder ein JPG-Bild (falls das noch nichtmal diesen Typ zugewiesen bekommt) zuweisen. Oder doch :shock: ?
Dasselbe für TIcon.
Und für TGraphic finde ich keine Handle Eigenschaft / Wert.
AXMD - Sa 16.04.05 13:42
Schon klar :roll: Schon mal die Unit jpeg angeschaut oder TJPEGImage?
AXMD
JayK - Sa 16.04.05 20:51
Da gibt's leider ein kleines Problem:
Wenn ich die aus dem Uses-Klausel zu öffnen versuche, öffnet er nur einen Laden-Dialog. :evil:
Borland schickt ja seine Units auch nicht einfach so als Pascal-Datei mit, sonst könnte man die ja einfach verändern und so :roll: .
EDIT: Jepp, ist nur eine DCU Datei, schön vorcompiliert und durchgekaut.
JayK - So 17.04.05 15:02
Na gut OK, ich habs jetzt mal über den Weg mit dem RessourceStream probiert, kriege aber immer wieder eine
Zitat: |
Zugriffsverletzung bei Adresse ... Lesen aus Adresse 00000000. |
zurück.
Delphi-Quelltext
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: 27: 28:
| uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, XPMan, ComCtrls, ExtCtrls, ToolWin, StdCtrls, ImgList, Buttons, JPEG, axCtrls, Spin;
...
image1: TImage;
...
procedure TMainForm.Anzeigen(Sender: TObject); var resstream: TResourceStream; begin resstream := tresourceStream.CreateFromID(hInstance, 100, RT_RCDATA); try image1.Picture.Graphic.LoadFromStream(ResStream); finally ResStream.Free; end; end;
procedure TMainForm.Button1Click(Sender: TObject); begin Anzeigen(Sender); end; |
Meine RC Datei sieht so aus:
Delphi-Quelltext
1: 2: 3:
| 100 RCDATA "img\all.jpg" 101 RCDATA "img\fa.jpg" ... |
und wurde einfach per "Zu Projekt hinzufügen" ins Projekt eingebunden.
Was mache ich jetzt schon wieder falsch?
(Link zum Thread, wo ich das her habe steht oben ja schon)
JayK - Sa 23.04.05 12:43
Also es scheint ja keiner zu wissen, wie das anzustellen ist.
Geht das vielleicht einfacher, wenn man die JPEGs über "Zum Projekt hinzufügen" einfügt? Oder Frage: Wie kommt man da überhaupt ran?
Ansonsten würde ich natürlich auch gerne Antworten zum .res Problem noch hören.
retnyg - Fr 13.05.05 16:49
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| uses ..., JPEG;
...
procedure TForm1.BitBtn1Click(Sender: TObject); var Bild: TJPEGImage; begin Bild := TJPEGImage.Create; Bild.LoadFromFile('c:\temp\1.jpg'); image1.Picture.Assign(bild); bild.free; end; |
statt loadfromfile nimmst du loadfromresourcename und - tada - problem gelöst.
JayK - Fr 13.05.05 16:59
retnyg hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| uses ..., JPEG;
...
procedure TForm1.BitBtn1Click(Sender: TObject); var Bild: TJPEGImage; begin Bild := TJPEGImage.Create; Bild.LoadFromFile('c:\temp\1.jpg'); image1.Picture.Assign(bild); bild.free; end; |
statt loadfromfile nimmst du loadfromresourcename und - tada - problem gelöst. |
Wäre schön, ist aber nicht so :( .
TJPEGImage hat anscheinend keine LoadFromRessourceName-Methode...
retnyg - Fr 13.05.05 17:03
oh :shock:
na dann probier es mal mit der stream-methode. dein .rc srcipt hast du aber schon mit brcc32 kompiliert ?
der name der jpg's wäre dann übrigens 100 und 101, nicht all oder so. erster absatz im rc script steht für den resource-namen.
JayK - Fr 13.05.05 17:25
retnyg hat folgendes geschrieben: |
oh :shock:
na dann probier es mal mit der stream-methode. |
hatte ich schon. (Siehe oben) Da kam immer diese dumme Fehlermeldung mit Lesen von Adresse 00000000...
retnyg hat folgendes geschrieben: |
dein .rc srcipt hast du aber schon mit brcc32 kompiliert ? |
Ich habs einfach ins Projekt aufgenommen, denn wenn ich es über Kommandozeile mit brc32.exe compilieren will, kommt immer
Borland Resource Compiler hat folgendes geschrieben: |
Fatal error. Could not spawn program: ILINK32.EXE |
raus.
retnyg hat folgendes geschrieben: |
der name der jpg's wäre dann übrigens 100 und 101, nicht all oder so. erster absatz im rc script steht für den resource-namen. |
Erster Absatz??? Ist erste Zeile, oder erster, na ja, "Parameter" gemeint?
retnyg - Fr 13.05.05 17:32
JayK hat folgendes geschrieben: |
retnyg hat folgendes geschrieben: | oh :shock:
na dann probier es mal mit der stream-methode. |
hatte ich schon. (Siehe oben) Da kam immer diese dumme Fehlermeldung mit Lesen von Adresse 00000000... |
Quelltext
1:
| image1.Picture.Graphic.LoadFromStream(ResStream); |
mit dem code kann das nicht klappen, denn du kannst graphic keinen jpeg-stream zuweisen.
baue den code in die neue variante ein.
Zitat: |
retnyg hat folgendes geschrieben: | dein .rc srcipt hast du aber schon mit brcc32 kompiliert ? |
Ich habs einfach ins Projekt aufgenommen, denn wenn ich es über Kommandozeile mit brc32.exe compilieren will, kommt immer Borland Resource Compiler hat folgendes geschrieben: | Fatal error. Could not spawn program: ILINK32.EXE | raus. |
such mal auf deiner platte nach der ilink32.exe. das verzeichnis wo die drin ist tust du zu deiner PATH-umgebungsvariable dazu (systemsteuerung, system, erweitert)
dann sollte es kompilieren. solange du das RC nicht zu einer RES datei kompilierst, existiert deine resource nicht.
der name der exe datei ist übrigens BR
CC32.exe, nicht BRC32.exe
Zitat: |
retnyg hat folgendes geschrieben: | der name der jpg's wäre dann übrigens 100 und 101, nicht all oder so. erster absatz im rc script steht für den resource-namen. |
Erster Absatz??? Ist erste Zeile, oder erster, na ja, "Parameter" gemeint? |
so ist es gemeint. und tu die ordnernamen ( bla\x.gif ) aus deinem rc skript weg. also die bilder in den gleichen ordner legen, wie das RC skript
JayK - Fr 13.05.05 17:50
retnyg hat folgendes geschrieben: |
JayK hat folgendes geschrieben: |
Delphi-Quelltext 1:
| image1.Picture.Graphic.LoadFromStream(ResStream); | |
mit dem code kann das nicht klappen, denn du kannst graphic keinen jpeg-stream zuweisen.
baue den code in die neue variante ein. |
Neue variante? Hab ich was verpasst :shock: ?
retnyg hat folgendes geschrieben: |
JayK hat folgendes geschrieben: | wenn ich es über Kommandozeile mit brc32.exe compilieren will, kommt immer Borland Resource Compiler hat folgendes geschrieben: | Fatal error. Could not spawn program: ILINK32.EXE | raus. |
such mal auf deiner platte nach der ilink32.exe. das verzeichnis wo die drin ist tust du zu deiner PATH-umgebungsvariable dazu (systemsteuerung, system, erweitert) |
:idea: jetzt hab ich auch 'ne idee, wie ich einfacher an den C#-Compiler rankomme :D (nebenbei)
retnyg hat folgendes geschrieben: |
der name der exe datei ist übrigens BRCC32.exe, nicht BRC32.exe |
Ups, :oops: hatte mich verschrieben ;) mit der br
cc32.exe gehts erstmal ohne Fehler :).
retnyg hat folgendes geschrieben: |
und tu die ordnernamen ( bla\x.gif ) aus deinem rc skript weg. also die bilder in den gleichen ordner legen, wie das RC skript |
Das wäre aber doof, es sind ca. 30 oder mehr Bilder...
GSE - Fr 13.05.05 17:58
mal was prinizipielles (nicht zur Frage gehörendes)
Zitat: |
Borland schickt ja seine Units auch nicht einfach so als Pascal-Datei mit, sonst könnte man die ja einfach verändern und so |
das ist nur in den personal bzw. Standard Versionen so, ab Delphi Pro liegen alle Borland-Units als pas Dateien vor, du kannst sie also auch einsehen und ggf. ändern.
mfg
GSE
retnyg - Fr 13.05.05 18:14
pas hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| {$R test.res} procedure TForm1.BitBtn1Click(Sender: TObject); var Bild: TJPEGImage; resstream: TResourceStream; begin Bild := TJPEGImage.Create; resstream := tresourceStream.Create(hInstance, 'BILD', RT_RCDATA); bild.LoadFromStream(resstream); image1.Picture.Assign(bild); bild.free; resstream.free; end; | |
test.rc hat folgendes geschrieben: |
Quelltext 1:
| bild RCDATA "C:\temp\1.jpg" | |
wichtig ist auch, dass man RCDATA gross schreiben muss. der sch... hat mich grade 10 min gekostet deswegen :evil:
JayK - Fr 13.05.05 18:38
Super! Es klappt jetzt :D :D . Danke Leute!! ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!