Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bild aus Ressource laden - DesignTime geht, Laufzeit nicht (https://www.delphipraxis.net/104358-bild-aus-ressource-laden-designtime-geht-laufzeit-nicht.html)

DGS 2. Dez 2007 11:13


Bild aus Ressource laden - DesignTime geht, Laufzeit nicht
 
Problem vergleichbar mit dem hier:
http://www.delphipraxis.net/internal...t.php?t=111569

Jedenfalls kurze Fehlerbeschreibung:
Ich hab ne eigene Kompo erstellt, die von tImage erbt und ein defaultbild laden sollte. Zur Designtime klappt es auch wunderbar. Aber beim start tritt ne Exception auf. Bin da echt überfragt.


Meine Kompo:
Ich erbe von timage.

Im OnCreate der Kompo hab ich:
Delphi-Quellcode:
picture.Bitmap.LoadFromResourceName(HInstance, 'HINTERGRUND');
In der DPK der Kompo ist diese Ressource auch eingebunden mit
{$R 'KompoName.dcr'}

Nun hab ich halt zu Testzwecken sauberes Projekt erstellt und platziere Kompo auf der Form.
Passt alles wunderbar. promt wird die Hintergrundgrafik geladen, wie erwünscht.
Sobald ich starte, kriege ich folgende Meldung:

Zitat:

Im Projekt Project1.exe ist eine Exception der Klasse EResNotFound aufgetreten. Meldung: 'Ressource HINTERGRUND wurde nicht gefunden'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
Danach verabschiedet sich das Programm.


Was ich haben wollte:
in meine Kompo ( Erbe von tImage ) eine default bitmap zu haben. Die darf dann zur DesignTime oder Laufzeit natürlich geändert werden.

Über denkanstösse jeglicher Art bin ich dankbar.

nat 2. Dez 2007 12:07

Re: Bild aus Ressource laden - DesignTime geht, Laufzeit nic
 
Also ich habe das jetzt ma eben schnell zusammen geklatscht und getestet. bei mir klappt es problemlos (design+runtime)

MyImage.pas:
Delphi-Quellcode:
unit MyImage;

interface

uses
  SysUtils, Classes, Controls, ExtCtrls;

type
  TMyImage = class(TImage)
  private
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    constructor Create(AOwner: TComponent); override;
  published
    { Published-Deklarationen }
  end;

procedure Register;

implementation

{$R MyImage.res}

procedure Register;
begin
  RegisterComponents('Samples', [TMyImage]);
end;

constructor TMyImage.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  self.Picture.Bitmap.LoadFromResourceName(hInstance, 'DEFAULT_IMAGE');
end;

end.
MyImage.rc:
Delphi-Quellcode:
DEFAULT_IMAGE BITMAP "MyImage.bmp"

MyImage.pas erstellt, MyImage.rc erstellt, brcc32 MyImage.rc und danach dann die komponente über die ide installiert.
kann sie problemlos verwenden.

DGS 2. Dez 2007 12:27

Re: Bild aus Ressource laden - DesignTime geht, Laufzeit nic
 
Hab jetzt genauso gemacht wie du gesagt hattest.

Und... es KLAPPT!
Vielen Dank!

Nur frag ich mich, wieso es ned gleich geklappt hat :/

nat 2. Dez 2007 13:41

Re: Bild aus Ressource laden - DesignTime geht, Laufzeit nic
 
poste doch ma deinen source. dann können wir uns das ja ma angucken ;)

DGS 2. Dez 2007 13:51

Re: Bild aus Ressource laden - DesignTime geht, Laufzeit nic
 
Ich poste mal den konstructor. Hab da noch "paar" properties und Events, die aber keinen Einfluss haben dürften:

Delphi-Quellcode:
constructor tDGSpainter.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  // TODO: Create
  Height := 43;
  Width := 160;

  picture.Bitmap.LoadFromResourceName(HInstance, 'HINTERGRUND');

  if not ( csDesigning In ComponentState ) then
    if fAutoCon then
      start;

end;
Die ressource hab ich mit dem Bild Editor von Delphi in die Datei "DGSpainter.dcr" gepackt, wo auch das Icon für die Kompo drin war.
Ressource eingebunden im Package (dpk).

Wie gesagt, zur DesignTime hat alles bestens funktioniert.

Der Code ist derselbe wie deiner. Nur hab ich jetzt diese Bitmap in einer .res Datei, die ich in der DGSpainter.pas direkt einbinde.

SirThornberry 2. Dez 2007 13:54

Re: Bild aus Ressource laden - DesignTime geht, Laufzeit nic
 
wo hast du folgendes plaziert?
Delphi-Quellcode:
{$R DeineDatei.dcr}
bzw.
Delphi-Quellcode:
{$R DeineDatei.res}

DGS 2. Dez 2007 14:00

Re: Bild aus Ressource laden - DesignTime geht, Laufzeit nic
 
In der alten Version nirgens.

Das einbinden der ressource geschah über das Package.
Also in der Delphi Package ( .dpk ) stand halt:
Delphi-Quellcode:
{$R 'DGSpainter.dcr'}
Jetzt hab ichs so gemacht wie vorgeschlagen, direkt unter implementation eine .res eingebunden und damit funktionierts wunderbar.

...sollte ich zur Sicherheit im dritten post etwas fetter dazuschreiben, dass problem gelöst ist?

SirThornberry 2. Dez 2007 14:03

Re: Bild aus Ressource laden - DesignTime geht, Laufzeit nic
 
das dein Problem gelöst ist weiß ich, es ging um die Ergründung warum es bei dir ursprünglich nicht ging damit andere die es genauso machen gelöst bekommen und die Ursache finden.


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