Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Resourcen einbinden (https://www.delphipraxis.net/193313-resourcen-einbinden.html)

Willie1 15. Jul 2017 10:38

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:
    Bild.LoadFromResourceName(HInstance,'Icon_1');
    Image1.Canvas.Draw(0,0,Bild)
Bitte meldet euch, ich bin ratlos.
Gruß und Dank
Willie.

zeras 16. Jul 2017 09:56

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.

himitsu 16. Jul 2017 10:12

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.

Redeemer 16. Jul 2017 15:13

AW: Resourcen einbinden
 
Ich würde vermuten, Delphi hat die Ressource ICON_1 genannt, aber er lädt Icon_1.

Glados 16. Jul 2017 15:14

AW: Resourcen einbinden
 
Zitat:

Ich würde vermuten, Delphi hat die Ressource ICON_1 genannt, aber er lädt Icon_1.
Ich habe das heute mal mit ICON_1 durchgespielt. Die Resource habe ich dabei so erstellt, wie ich es immer mache und wie es auch immer funktioniert.
ICON_1 konnte dabei genau so wenig gefunden werden wie Icon_1.

DeddyH 16. Jul 2017 16:24

AW: Resourcen einbinden
 
Hast Du das Kompilat mal mit einem Ressourceneditor untersucht?

Willie1 16. Jul 2017 17:39

AW: Resourcen einbinden
 
Ich habe alles versucht, die Icons, auch Bitmaps, werden nicht eingebunden.
Ich habe eine kleine Testanwendung geschrieben:
Delphi-Quellcode:
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.
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.
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.

Zacherl 16. Jul 2017 17:50

AW: Resourcen einbinden
 
Zitat:

Zitat von Willie1 (Beitrag 1376804)
Welchen Resourcen-Explorer soll ich downloaden, es gab ihn früher bei Borland als Zugabe und Beispiel.

ResHacker z.b.

EWeiss 16. Jul 2017 17:56

AW: Resourcen einbinden
 
Zitat:

Als Typ habe ich RCData gewählt.
Verstehe nicht warum man für Icons RCDATA verwendet und nicht Icon!

dann wäre da noch die frage des Typs..
Was denn nun *.ico, *.bmp oder gar *.png?

gruss

Glados 16. Jul 2017 18:23

AW: Resourcen einbinden
 
Zitat:

Verstehe nicht warum man für Icons RCDATA verwendet und nicht Icon!
Zitat:

Zitat von Glados (Beitrag 1376791)
Zitat:

Ich würde vermuten, Delphi hat die Ressource ICON_1 genannt, aber er lädt Icon_1.
Ich habe das heute mal mit ICON_1 durchgespielt. Die Resource habe ich dabei so erstellt, wie ich es immer mache und wie es auch immer funktioniert.
ICON_1 konnte dabei genau so wenig gefunden werden wie Icon_1.

Habe das alles mit ICON als Typ ebenfalls getestet. Mit und ohne Bitmap als Zwischenspeicher.
Das Problem liegt also woanders.

Zitat:

dann wäre da noch die frage des Typs..
Zitat:

Icon_1 ICON "abfrage_2.ico"

Willie1 16. Jul 2017 18:46

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

zeras 16. Jul 2017 18:59

AW: Resourcen einbinden
 
Ich habe das so gelöst:

Delphi-Quellcode:
  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;
Ja es geht offenbar auch mit Bildern und RCDATA.

Einbinden, wie oben in meinem Beitrag geschrieben.

EWeiss 16. Jul 2017 19:12

AW: Resourcen einbinden
 
Zitat:

Zitat von zeras (Beitrag 1376811)
Ich habe das so gelöst:

Delphi-Quellcode:
  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;
Ja es geht offenbar auch mit Bildern und RCDATA.

Einbinden, wie oben in meinem Beitrag geschrieben.

Mit Delphi Berlin SE Kompiliert?
Denn darum geht es ihm.. Ob in der Starter Edition Einschränkungen diesbezüglich vorliegen.

gruss

Ghostwalker 17. Jul 2017 06:14

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;

HolgerX 17. Jul 2017 06:59

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..

tshubaka 17. Jul 2017 07:07

AW: Resourcen einbinden
 
Hallo Willis,
sollte das: {$R ResTester.dres}
nicht {$R ResTester.res} heissen!

Gruss

Uwe Raabe 17. Jul 2017 09:03

AW: Resourcen einbinden
 
Zitat:

Zitat von tshubaka (Beitrag 1376822)
sollte das: {$R ResTester.dres}
nicht {$R ResTester.res} heissen!

Nein. Die dres-Datei wird vom internen Resourcen-Management der IDE erzeugt.

himitsu 17. Jul 2017 09:29

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 ...

Willie1 17. Jul 2017 10:35

AW: Resourcen einbinden
 
Hallo Ghostwalker,
geht nicht:
[dcc32 Fehler] ResTester_h.pas(51): E2362 Auf protected-Symbol TPicture.LoadFromStream kann nicht zugegriffen werden

Willie1 17. Jul 2017 11:13

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.

Glados 17. Jul 2017 11:22

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.

DeddyH 17. Jul 2017 11:27

AW: Resourcen einbinden
 
Wieso hat ein Icon denn die Language-ID 1031? Üblich wäre doch 1033.

himitsu 17. Jul 2017 12:02

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.

Uwe Raabe 17. Jul 2017 12:20

AW: Resourcen einbinden
 
Zitat:

Zitat von Willie1 (Beitrag 1376841)
HolgerX, ein Testprogramm von mir liegt vor.

Na, ja. Zugegeben, du hast einen Quelltext gepostet, der das Auslesen des Icons zeigt. Zu einem Testprogramm erwarte ich aber mindestens eine ZIP-Datei mit den zum Build nötigen Dateien. In diese Fall gehört sicher neben der DFM, PAS und DPR auch noch die ICON- und DPROJ-Datei dazu, damit man das ohne großen Aufwand auf seinem System probieren kann. Man muss das in ein Verzeichnis entpacken, das Projekt in der IDE laden und compilieren können. Andernfalls mutet man den Helfenden hier meiner Meinung nach zuviel zu.

Willie1 17. Jul 2017 16:00

AW: Resourcen einbinden
 
Liste der Anhänge anzeigen (Anzahl: 1)
das geht... Willie.

Himitsu, #1 wird akzeptiert, die Ikone wird aber nicht gefunden.

Uwe Raabe 17. Jul 2017 16:45

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;

Ghostwalker 17. Jul 2017 17:16

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.

EWeiss 17. Jul 2017 17:48

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:

dann wäre da noch die frage des Typs..
Was denn nun *.ico, *.bmp oder gar *.png?
Zitat:

Wieso hat ein Icon denn die Language-ID 1031? Üblich wäre doch 1033.
Nö 1031

gruss

Willie1 17. Jul 2017 18:44

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.

zeras 17. Jul 2017 19:01

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

Willie1 18. Jul 2017 11:10

AW: Resourcen einbinden
 
Hallo, auf die Gefahr hin, dass ich nerve: aber es geht nicht!!!
Delphi-Quellcode:
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;
bei Zeile 5 klemmt es:
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.

Glados 18. Jul 2017 11:29

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:
 Image1.Picture.Graphic:=TJpegImage.Create;
ganz weg.

Und
Delphi-Quellcode:
Image1.Picture.LoadFromStream();
. Nicht
Delphi-Quellcode:
Image1.Picture.Graphic.LoadFromStream();

Willie1 18. Jul 2017 15:14

AW: Resourcen einbinden
 
Glados, ist klar RT_RCDATA ist eine Konstante vom Typ PWideChar. Jetzt klappt es. Endlich!

Delphi-Quellcode:
Image1.Picture.LoadfromStream()
geht nicht.

[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 07:06 Uhr.

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