![]() |
Resourcen einbinden
Hallo Delphi-Freunde/innen,
ich bin von Uralt-Delphi 2005 auf Delphi Berlin SE umgestiegen und will jetzt meine Projekte übernehmen. Bei meinem Projekt Abfrage ist eine Resource mit einer zweiten Ikone "verschwunden". Ich denke kein Problem: mit "Resourcen und Bilder" kann ich die Ikone in das Projekt übernehmen. Es werden das Script AbfrageRecource.rc und Abrage.dres, die ich einbinde, erzeugt. Aber wenn ich die Ikone aufrufen will, kommt "Resource ... nicht gefunden". Woran liegt das? RC-Script:
Delphi-Quellcode:
Icon_1 ICON "abfrage_2.ico"
Delphi-Quellcode:
Bitte meldet euch, ich bin ratlos.
Bild.LoadFromResourceName(HInstance,'Icon_1');
Image1.Canvas.Draw(0,0,Bild) Gruß und Dank Willie. |
AW: Resourcen einbinden
Ich habe meine Ressourcen unter Projekt -> Ressourcen und Bilder -> Hinzufügen eingebunden. Als Typ habe ich RCData gewählt.
Mit einer Ressourcendatei hatte ich dann nichts mehr am Hut. Das hat alles Delphi für mich gemacht. |
AW: Resourcen einbinden
Da, wo deine RC/RES eingebunden wird, gibt es keine Message im BuildLog?
Mit einem Ressource-Explorer mal in die EXE gucken, ob alles "richtig" drin ist und ob vielleicht noch was Anderes fehlt/fehlerhaft ist. |
AW: Resourcen einbinden
Ich würde vermuten, Delphi hat die Ressource ICON_1 genannt, aber er lädt Icon_1.
|
AW: Resourcen einbinden
Zitat:
ICON_1 konnte dabei genau so wenig gefunden werden wie Icon_1. |
AW: Resourcen einbinden
Hast Du das Kompilat mal mit einem Ressourceneditor untersucht?
|
AW: Resourcen einbinden
Ich habe alles versucht, die Icons, auch Bitmaps, werden nicht eingebunden.
Ich habe eine kleine Testanwendung geschrieben:
Delphi-Quellcode:
Mit "Resourcen und Bilder" habe ich 2 Ikonen eigefügt, sie stehen im gleichem Ordner, wie das Programm. In der Projektverwaltung werden die Ikonen angezeigt.
unit ResTester_h;
{$R ResTester.dres} interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Image1: TImage; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var bmp: TBitmap; begin beep; bmp:=TBitmap.Create; try bmp.LoadFromResourceName(HInstance,'Icon_1'); Image1.Canvas.Draw(1,1,bmp); finally bmp.free; end; end; end. Ein IconGrabber findet keine Icons. Welchen Resourcen-Explorer soll ich downloaden, es gab ihn früher bei Borland als Zugabe und Beispiel. (finde ihn nicht mehr) Nachtrag: Könnte das eine weitere Gemeinheit von E. sein, die Möglichkeiten der Starter Edition ein zu schränken? Deshalb bin ich sehr daran interessiert, ob es bei euch läuft! Willie. |
AW: Resourcen einbinden
Zitat:
![]() |
AW: Resourcen einbinden
Zitat:
dann wäre da noch die frage des Typs.. Was denn nun *.ico, *.bmp oder gar *.png? gruss |
AW: Resourcen einbinden
Zitat:
Zitat:
Das Problem liegt also woanders. Zitat:
Zitat:
|
AW: Resourcen einbinden
hab den Resourcen-Hacker herunter geladen. Die Icons sind eingebunden, an Position 1 (ersetzt ungewünscht die Standart-Programm-Ikone) und an Position 6. Die anderen sind RX in verschiedenen Größen. Wie ich die Ikonen ansprechen soll, weiß ich immer noch nicht. Ich habs mit 1 und 6 Icon_1 und Icon_6 versucht, es geht nicht!!!
Willie |
AW: Resourcen einbinden
Ich habe das so gelöst:
Delphi-Quellcode:
Ja es geht offenbar auch mit Bildern und RCDATA.
ResName := 'Logo';
if FindResource(HInstance, PChar(AnsiUpperCase(ResName)), RT_RCDATA) = 0 then begin ShowMessage('Resource not found' + ' ' + ResName); Exit; end; //Logo aus der Ressource laden jpegImage := TJPEGImage.Create; try stream := TResourceStream.Create(HInstance, ResName, RT_RCDATA); try jpegImage.LoadFromStream(stream); finally stream.Free; end; Einbinden, wie oben in meinem Beitrag geschrieben. |
AW: Resourcen einbinden
Zitat:
Denn darum geht es ihm.. Ob in der Starter Edition Einschränkungen diesbezüglich vorliegen. gruss |
AW: Resourcen einbinden
Welche Auflösungen hat den dein Icon ?
Habs schon erlebt, das der Resourcecompiler beim compilieren von bestimmten Auflösungskombinationen ärger macht. Ansonsten, probier einfach mal folgendes:
Delphi-Quellcode:
var
res : TResourceStream; begin res := TResourceStream.Create(HInstance,'Icon_1',PWideChar('ICON')); image1.picture.LoadFromStream(res); res.free; end; |
AW: Resourcen einbinden
Hmm..
irgendwie drehen wir uns im Kreis.. Erstelle doch mal ein Testprojekt und stelle dies incl. Source, Res-Datei und verwendete Icons hier ein. Dann kann man sich mal in Ruhe alles anschauen und entsprechend kompilieren. Wie schon beschrieben, kann es an mehren Punkten liegen: - ICON - defekte RES - nicht funktionierendes Einlesen - .. Deshalb ein komplettes Testprojekt mit all den Verwendeten Bestandteilen.. |
AW: Resourcen einbinden
Hallo Willis,
sollte das: {$R ResTester.dres} nicht {$R ResTester.res} heissen! Gruss |
AW: Resourcen einbinden
Zitat:
|
AW: Resourcen einbinden
Aber intern ist es das gleiche, nur halt mit "Delphi" im Namen.
Man kann auch RC erstellen manuell und in der DPR (nicht in PAS) startet dann der Delphi-Compiler den Ressource-Compiler und erzeugt automatisch die RES.
Delphi-Quellcode:
{$RESOURCE ResTester.res ResTester.rc} // oder {$R ...
|
AW: Resourcen einbinden
Hallo Ghostwalker,
geht nicht: [dcc32 Fehler] ResTester_h.pas(51): E2362 Auf protected-Symbol TPicture.LoadFromStream kann nicht zugegriffen werden |
AW: Resourcen einbinden
Liste der Anhänge anzeigen (Anzahl: 1)
HolgerX, ein Testprogramm von mir liegt vor.
1. Die Ikone wird in der Resource abgelegt. (mit Resource-Hacker überprüft) 2. Sie lässt sich aber nicht nutzen. 3. Ich habe es auch mit BRCC32 und einem RC-Script versucht, bringt auch nichts. 4. Bei Delphi 2005 und 2006 hat alles problemlos geklappt. Frage: Ist es einem von euch gelungen, mit meinem Testprogramm eine Ikone als Resource ein zu binden und auch anzeigen zu lassen?!? W. 1 und 6 sind die eingebunden Ikonen. |
AW: Resourcen einbinden
Habe es ebenfalls mal getestet. Die Icon-Datei als ICON oder RCDATA. Nichts wird angezeigt, da die Resource nicht gefunden werden kann.
IDE ist 10.2. |
AW: Resourcen einbinden
Wieso hat ein Icon denn die Language-ID 1031? Üblich wäre doch 1033.
|
AW: Resourcen einbinden
Die ICONS heißen "1" bis "6" und nicht "ICON_1" bis "ICON_6".
-> Name Liste im Resorce Hacker
Code:
ViewName des Typ
Name : Sprache Es kann auch sein, dass es hier eine "ID" ist, dann hießen die "#1" bis "#6" (ich glaub die Stringrepäsentation war so) oder PChar(1) bis PChar(6). PChar natürlich nur da, wo es nicht als Delphi-String übergeben wird. |
AW: Resourcen einbinden
Zitat:
|
AW: Resourcen einbinden
Liste der Anhänge anzeigen (Anzahl: 1)
das geht... Willie.
Himitsu, #1 wird akzeptiert, die Ikone wird aber nicht gefunden. |
AW: Resourcen einbinden
Man kann aber auch keine Icon-Resource in ein TBitmap laden!
So funktioniert es hier bei mir unter Tokyo:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin Image1.Picture.Icon.LoadFromResourceName(HInstance,'Icon_1'); end; |
AW: Resourcen einbinden
@Uwe
Jo..so tuts. Hab mal selbst ein bischen probiert. Aber mit einem Resourcestream krieg ichs nicht gebacken. Schreibweise ist dabei egal, ob ich Ansi- oder Widestring im Namen übergeben, egal. Ob ich als Typ Icon oder Icon Group angeben, auch egal. Jedesmal "Kenn ich net...". Das is schon etwas...merkwürdig. |
AW: Resourcen einbinden
Wenn ihr meinen Beitrag richtig interpretiert hättet wäre aus dem Problem keine 3 Seiten geworden.
Aber sei es drum. Zitat:
Zitat:
gruss |
AW: Resourcen einbinden
Hallo, das ist die Lösung. Danke.
Was bei Delphi 2005 klappt, muss bei Delphi 10 nicht unbedingt funktionieren!!! Ok, ganz glücklich wäre ich jetzt, wenn ich wüste, wie ich ein JPG-Bild aus der Resource anzeigen kann. Als Resource abgelegt habe ich es: RCDATA. Ghostwalker, du hast recht, etwas merkwürdig bleibt die Sache schon.. Willie. |
AW: Resourcen einbinden
[QUOTE=Willie1;1376885
Ok, ganz glücklich wäre ich jetzt, wenn ich wüste, wie ich ein JPG-Bild aus der Resource anzeigen kann. Als Resource abgelegt habe ich es: RCDATA. [/QUOTE] Siehe Beitrag #12 |
AW: Resourcen einbinden
Hallo, auf die Gefahr hin, dass ich nerve: aber es geht nicht!!!
Delphi-Quellcode:
bei Zeile 5 klemmt es:
procedure TForm1.Button2Click(Sender: TObject);
var ResStr: TResourceStream; begin ResStr:=TResourceStream.Create(HInstance,'JpgImage_1',PWideChar('RT_RCDATA')); Image1.Picture.Graphic:=TJpegImage.Create; Image1.Picture.Graphic.LoadFromStream(ResStr); ResStr.Free; // Image1.Picture.Graphic.Free; end; wieder Resource ... nicht gefunden. Die Resource JpgImage_1 ist ein gebunden. bei Delphi 2005/6 hat es geklappt natürlich ohne PWideChar. Willie. N.T. kann das Projekt als Zip hochladen, wenn gewünscht. |
AW: Resourcen einbinden
Du schreibst
Delphi-Quellcode:
TResourceStream.Create(HInstance,'JpgImage_1',PWideChar('RT_RCDATA'));
Aber es muss heißen
Delphi-Quellcode:
TResourceStream.Create(HInstance, 'JpgImage_1', RT_RCDATA);
Und
Delphi-Quellcode:
ganz weg.
Image1.Picture.Graphic:=TJpegImage.Create;
Und
Delphi-Quellcode:
. Nicht
Image1.Picture.LoadFromStream();
Delphi-Quellcode:
Image1.Picture.Graphic.LoadFromStream();
|
AW: Resourcen einbinden
Glados, ist klar RT_RCDATA ist eine Konstante vom Typ PWideChar. Jetzt klappt es. Endlich!
Delphi-Quellcode:
geht nicht.
Image1.Picture.LoadfromStream()
[dcc32 Fehler] ResTester_h.pas(44): E2362 Auf protected-Symbol TPicture.LoadFromStream kann nicht zugegriffen werden Meine Lösung über TJepImage funktioniert. Noch eine Ergänzung: es fällt mir auf, wenn ich eine Ikone einbinde, wird im Windows-Explorer nicht mehr die Default-Ikone RX, sondern die eingebundene Ikone angezeigt. Ich weiß nicht, ob das im Sinne des Delphi-Erfinders ist. MfG Willie. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:10 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-2025 by Thomas Breitkreuz