Autor Téma: Použitie Resources  (Přečteno 399 krát)

Offline František

  • Guru
  • *****
  • Příspěvků: 707
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Použitie Resources
« kdy: 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

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2984
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Použitie Resources
« Odpověď #1 kdy: 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.
Embarcadero MVP - Czech republic

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3292
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Použitie Resources
« Odpověď #2 kdy: 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.  

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1274
  • Karma: 51
    • Verze Delphi: 10.3
Re:Použitie Resources
« Odpověď #3 kdy: 10-08-2021, 16:48:59 »
Excellent
Rated 1 time

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3292
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Použitie Resources
« Odpověď #4 kdy: 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)