Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Resource vorhanden?? (https://www.delphipraxis.net/7320-resource-vorhanden.html)

madbrain 9. Aug 2003 12:09


Resource vorhanden??
 

Moin Moin!

Ich bin dabei ein Spiel zu coden, wo ich relativ viele BMPs, JPGs... als *.RES einbinde.
Nun hab ich das Porblem, dass ich bei verschiedenen Animationen nicht weiss wie viele bilder es sind. Das einfachste wäre es, wenn ich eine Function hätte die mir true liefert, wenn eine Resource (identifiziert durch einen string) vorhanden (also eingebunden) ist.
die function sieht unbgefähr so aus:

Delphi-Quellcode:
function ResExists(s : string): boolean;
var
    R: TResourceStream;
begin
    result := true;
    try
        r.Create(..., s, ...); // weiss ich aus dem kopf nich mehr
        r.free;
    except
        result := true;
    end;
end;
Seit ich allderdings Delphi7 hab, krieg ich fehlermeldungen wie "Resource nicht vorhanden". Toll. Genau das will ich ja überprüfen!

Weiss jmd, wie ich diese Problem lösen kann?
Vielleicht is es ja nur ein Compilerschalter oder so... :?:

Bin für jede Hilfe dankbar!!

chris 9. Aug 2003 13:57

Re: Resource vorhanden??
 
hi,

vielleicht so .. ungetestet, da nur überflogen

Delphi-Quellcode:
var
  R: TResourceStream;
begin
  result := true;
  try
    try
      r.Create()
    finally
      r.free
    end
  except
    result := false
  end

Christian Seehase 9. Aug 2003 14:34

Re: Resource vorhanden??
 
Moin MadBrain,

Zitat:

Zitat von madbrain
Seit ich allderdings Delphi7 hab, krieg ich fehlermeldungen wie "Resource nicht vorhanden".

kann es sein, dass der Fehler nur beim Start aus der IDE heraus kommt?
Dann hättest Du nämlich schlicht vergessen bei "Tools\Debugger Optionen\Sprach-Exceptions\Bei Delphi-Exceptions stoppen" den Haken wegzunehmen.

Kann sein, dass dieser Menüpunkt bei D7 an anderer Stelle zu finden ist.

Dein Code enthält allerdings einen massiven Fehler:
Wenn Create fehlschlägt, wird Free nicht mehr ausgeführt. chris' Struktur ist da besser.

Den Fehler mit try/except abzufangen finde ich allerdings nicht besonders gut.
Erstell Dir doch lieber einen eigenen Resourcentyp, der die Anzahl enthält, oder benutze die API Funktionen für Resourcen.

madbrain 11. Aug 2003 16:24

Re: Resource vorhanden??
 
Moin!
erstmal danke für die Hilfe, aber leider liegt das Problem woanders.

Der Fehler kommt auch, wenn man die EXE startet.

Zitat:

oder benutze die API Funktionen für Resourcen.
und wie mach ich das? :?: :?: :?:
hab mir mal die delphi hilfe von TResourceStream angeschaut aber irgendwie nix gefunden.

Zitat:

Erstell Dir doch lieber einen eigenen Resourcentyp, der die Anzahl enthält
genau diese Arbeit wollte ich mir ja vereinfachen!

der Code war nur so aus dem Kopf, deswegen hab ich try-finally weggelassen. :angle2:

PS: hab mich so lang nich gemldet, weil ich zu Hause kein internet hab

Assarbad 11. Aug 2003 16:29

Re: Resource vorhanden??
 
FindResource() oder du pruefst das Handle welches LoadBitmap() oder LoadIcon() zurueckgeben. Bei NULL kannste davon ausgehen, dass es nicht existiert!

madbrain 11. Aug 2003 16:42

Re: Resource vorhanden??
 
Danke! Werd ich gleich mal testen! :coder:

Verstehe aber nicht warum bei solchen Funktionen die Delphi-Hilfe versagt...

Assarbad 11. Aug 2003 17:17

Re: Resource vorhanden??
 
Weil es Win32 API-Funktionen sind. Die gehoeren eben nicht zu Delphi ;)

Dafuer braucht man das PSDK.

madbrain 12. Aug 2003 09:33

Re: Resource vorhanden??
 
hab das jetzt mal folgendermaßen umgesetzt:

Delphi-Quellcode:
function ResourceExists(const s : string; RC : PChar) : boolean;
var
    text   : string;
begin
    result := FindResource(0, PChar(s), RC) <> 0;
end;
das funzt auch einwandfrei. :spin:

wäre nur mal interessant zu wissen, wofür der erste Parameter gut ist :?:

negaH 12. Aug 2003 12:33

Re: Resource vorhanden??
 
Delphi-Quellcode:
var
  Module: THandle;
begin
  Module := LoadLibrary('Shell32.dll', LOAD_LIBRARY_ASDATAFILE);
  if Module <> 0 then
  try
    FindResource(Module, ....);
  finally
    FreeLibrary(Module);
  end;
end;
Wie man sieht gibt man im ersten Param das Modul bzw. die Instance, in der die Resource gesucht bzw. aus der geladen werden soll, an.

Du solltest entweder dort HInstance oder MainInstance angeben, und nicht 0.

Gruß Hagen

madbrain 12. Aug 2003 16:57

Re: Resource vorhanden??
 
Danke, werd ich gleich umsetzten.

Allerdings hat LoadLibrary bei mir nur einen Parameter :?:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:31 Uhr.
Seite 1 von 2  1 2      

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