Forum Delphi.cz

Delphi => Obecné => Téma založeno: František 09-08-2021, 16:48:49

Název: Použitie Resources
Přispěvatel: František 09-08-2021, 16:48:49
potreboval by som vysvetrlit princip Resources
mam xsd ktory som pridal do resources
ako do dostanem ako parameter na meno suboru do funkcie
ci ho len docasne ulozit a potom vymazat na disk? nezda sa mi toto moc ciste
Název: Re:Použitie Resources
Přispěvatel: Radek Červinka 10-08-2021, 15:11:12
Proc to ukladas do resource? To budes nekdy z venci editovat? Proc to nemas jako const? Resource jsou primarne k tomu, aby se dalo pozdeji exe menit bez kompilace.
Název: Re:Použitie Resources
Přispěvatel: pf1957 10-08-2021, 15:37:25
Resource jsou primarne k tomu, aby se dalo pozdeji exe menit bez kompilace.
S tim bych moc nesouhlasil: resource jsou prostredek, jak k .exe pribalit cokoli, co vznika jinak nez prekladem jazyka.

Namatkou funkce, ktera nacte resource do bufferu ve forme ANSIStringu (z non-unicode ery):
Kód: Delphi [Vybrat]
  1. //------------+-----------------------------------------------------------------
  2.  
  3.   function    LoadResource
  4.               (const AResName,AResType:ANSIString)
  5.               : ANSIString;
  6.  
  7. //------------+-----------------------------------------------------------------
  8.   var
  9.     ResHandle: HRSRC;
  10.     MemHandle: HGLOBAL;
  11.     MemSize:   integer;
  12.     MemPtr:    pBytes;
  13.   begin
  14.     try
  15.       ResHandle := FindResource(hInstance,pChar(AResName),pChar(AResType));
  16.       if ResHandle=0 then
  17.         RaiseLastOSError;
  18.       MemHandle := Windows.LoadResource(hInstance,ResHandle);
  19.       if MemHandle=0 then
  20.         RaiseLastOSError;
  21.       try
  22.         MemSize := SizeOfResource(hInstance,ResHandle);
  23.         if MemSize=0 then
  24.           RaiseLastOSError;
  25.         MemPtr := LockResource(MemHandle);
  26.         if not Assigned(MemPtr) then
  27.           RaiseLastOSError;
  28.         SetLength(Result,MemSize);
  29.         CopyMemory(addr(Result[1]),MemPtr,MemSize);
  30.       finally
  31.         FreeResource(MemHandle);
  32.       end;
  33.     except
  34.       Result := sz;
  35.     end;
  36.   end;
  37.  
Název: Re:Použitie Resources
Přispěvatel: vandrovnik 10-08-2021, 16:48:59
Použil bych tResourceStream: http://docwiki.embarcadero.com/Libraries/Sydney/en/System.Classes.TResourceStream.Create (http://docwiki.embarcadero.com/Libraries/Sydney/en/System.Classes.TResourceStream.Create)
Název: Re:Použitie Resources
Přispěvatel: pf1957 10-08-2021, 22:04:35
Použil bych tResourceStream
Ani jsem nevedel, ze to tam pridali a uz je to v D2007 (starsi tu nemam)