Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Resource wird nicht gefunden

  Alt 1. Apr 2016, 21:41
Nein, tut mir leid, aber ich habe dein Projekt gerade mal mit dem Debugger durchgesteppt und die erste Exception wird hier geworfen:
Delphi-Quellcode:
constructor TResourceStream.CreateFromID(Instance: THandle; ResID: Integer;
  ResType: PChar);
begin
  inherited Create;
  Initialize(Instance, PChar(ResID), ResType, True); // <- da kommt die Exception
end;
dann wird im gleichen Atemzug TResourceStream.Destroy ganz brav und ohne weitere Exception durchlaufen, dann kommt die Ausgabe der MessageBox mit der Exception.

Der lokalen Variablen ResStream wird kein Wert zugewiesen!

Den Rest der Begründung findest du in meinem Post vorher.

Wenn du mit Resourcen arbeiten möchtest, dann kannst du dir auch einmal diesen Post von mir anschauen
http://www.delphipraxis.net/1330587-post3.html

Um meine Aussage zu überprüfen brauchst du lediglich eine Zeile einfügen:
Delphi-Quellcode:
procedure TForm1.LoadPNG(ID : Integer);
var
  ResStream : TResourceStream;
  Png : TPngImage;
begin
  ResStream := nil; // eine Zeile, die tut auch nix, die will nur spielen!
  try
    try
      ResStream := TResourceStream.CreateFromID(0, ID, RT_RCDATA);
      Png := TPngImage.Create;
      try
        Png.LoadFromStream(ResStream);
        Image1.Picture.Graphic := Png;
      finally
        Png.Free;
      end;
    except
      on E : Exception do
        ShowMessage(E.Message);
    end;
  finally
    // kann ersatzlos entfallen
    // if Assigned(ResStream) then
      ResStream.Free; // <- Warum ein Free zu einem Fehler !!!? <- Kommt ja jetzt nicht mehr
  end;
end;
Und noch etwas zum Thema Resource-Dateien

Wenn du die *.RC Datei in dein Projekt aufnimmst, dann wird diese Datei automatisch beim Erzeugen des Projekts erstellt und eingebunden. Das umständliche und manuelle Erzeugen der *.res Datei entfällt.

So sieht das dann in der dpr aus
Delphi-Quellcode:
program ResTest;

{$R 'Resources.res' '..\Rescource\Resources.rc'} // <- diese Zeile wird automatisch von Delphi erstellt

uses
  Forms,
  frmMain in 'frmMain.pas{Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 1. Apr 2016 um 21:53 Uhr)
  Mit Zitat antworten Zitat