Autor Beitrag
JayK
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Sa 16.04.05 13:03 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Sa 16.04.05 13:09 
user profile iconJayK 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
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Sa 16.04.05 13:20 
user profile iconAXMD hat folgendes geschrieben:

Da gibts was, das nennt sich Suche. Schon mal verwendet :roll:


Ja, allerdings.
Aber gefunden hab ich nichts, dass brauchbar ist oder für mich verständlich ist.

Das naheliegenste war Bitmaps von Resourcen lesen, aber das ist ja für Bitmaps und zu einem anderen Zweck.
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Sa 16.04.05 13:42 
Schon klar :roll: Schon mal die Unit jpeg angeschaut oder TJPEGImage?

AXMD
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: 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.
ausblenden 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Fr 13.05.05 16:49 
ausblenden 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.

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Fr 13.05.05 16:59 
user profile iconretnyg hat folgendes geschrieben:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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.

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Fr 13.05.05 17:25 
user profile iconretnyg 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...

user profile iconretnyg 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.
user profile iconretnyg 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Fr 13.05.05 17:32 
user profile iconJayK hat folgendes geschrieben:
user profile iconretnyg 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...

ausblenden 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:
user profile iconretnyg 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 BRCC32.exe, nicht BRC32.exe
Zitat:

user profile iconretnyg 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

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Fr 13.05.05 17:50 
user profile iconretnyg hat folgendes geschrieben:
user profile iconJayK hat folgendes geschrieben:

ausblenden 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: ?

user profile iconretnyg 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)

user profile iconretnyg hat folgendes geschrieben:

der name der exe datei ist übrigens BRCC32.exe, nicht BRC32.exe

Ups, :oops: hatte mich verschrieben ;) mit der brcc32.exe gehts erstmal ohne Fehler :).

user profile iconretnyg 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...


Zuletzt bearbeitet von JayK am Fr 13.05.05 18:15, insgesamt 3-mal bearbeitet
GSE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 740

Win 2k, Win XP Pro
D5 Prof, D6 Ent, D2k5 PE
BeitragVerfasst: 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

_________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs
and the universe trying to produce bigger and better idiots. So far, the universe is winning. (Richard Cook)
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Fr 13.05.05 18:14 
pas hat folgendes geschrieben:

ausblenden 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);
  //  Bild.LoadFromFile('c:\temp\1.jpg');
  image1.Picture.Assign(bild);
  bild.free;
  resstream.free;
end;

test.rc hat folgendes geschrieben:
ausblenden 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:

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Fr 13.05.05 18:38 
Super! Es klappt jetzt :D :D . Danke Leute!! ;)