Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Delphi - Ako dostať užívateľské dáta do *.RES?

Ako dostať do resources akýkoľvek objekt (obrázok, zvuk, dáta a podobne)? Ide mi o uloženie obrázkov a zvukov, aby som nemal zbytočné súbory na disku a program bol samostatný. Mám tu aj nejaký text o tom ako prehrať zvuk z resources, ale nie je tam vysvetlené, ako to tam vložiť a podobne. Potrebujem niečo univerzálne, čiže nie závislé od obsahu súboru.

Předmět Autor Datum
Bud si to udelas pomoci ResourceHackeru, nebo pomoci textoveho souboru neco.RC, kde napises co a odk…
Jan Fiala 11.06.2006 17:38
Jan Fiala
To je na mňa trochu veľa. Dá sa zapísať aj nejaký príklad na *.RC (uloženie a otvorenie)? Ak si dob…
msx. 11.06.2006 17:47
msx.
Ahoj, nehledáš něco podobného: Tipy_a_triky.htm je to jen na EXE. Ale příklad na to jak dostat soubo…
AZOR 11.06.2006 17:55
AZOR
Z tohto by som dokázal vytvoriť súbor s obrázkom na disku a ten vložiť do TImage. Dá sa to ešte taký…
msx. 11.06.2006 18:05
msx.
Pokud chces data z Resource cist, obvykle ma kazdy typ dat svou API funkci na cteni, napr. LoadIcon(…
Jan Fiala 11.06.2006 18:08
Jan Fiala
Dobre, tak to skúsim. To PChar je tam prečo? v príkladoch, čo som sem dal to nič také nie je.
msx. 11.06.2006 18:13
msx.
To PChar je tam proto, protoze do API funkci se retezce nepredavaji. Pokud tam posilas promennou, mu…
Jan Fiala 11.06.2006 18:47
Jan Fiala
Ešte otázka: Čo je pre obrázok? zvuk -> WAVE program -> EXEFILE obrázok -> ??? iné -> ???
msx. 11.06.2006 18:16
msx.
Zkousel jsi se divat do helpu na funkce, ktere jsem ti napsal ? Tam ty datove typy v resource mas uv…
Jan Fiala 11.06.2006 18:49
Jan Fiala
Ja somár som v helpe hľadal priamo: exefile, wave atď. a nič mi nenašlo, potom som to hľadanie vzdal…
msx. 11.06.2006 22:49
msx.
Stahni si resource hacker a vyrob si primo RES soubor. Budes to mit mnohem rychleji a bez problemu
Jan Fiala 11.06.2006 23:27
Jan Fiala
Za prve necisluj to priamo cislami ale urob si header so symbolmi, ktore budes pouzivat aj v program…
MM.. 12.06.2006 00:56
MM..
P.S. tie subory mas v c:\Program Files\Borland\Delphi7\Bin\Sources\_blabla_.bmp ??? Musis mu dat spr…
MM.. 12.06.2006 01:00
MM..
A co keby si pouzil miesto "BITMAP" slovicko "RCDATA"... pri BMP, JPG... pri hocijakych obrazkoch po…
Intex 12.06.2006 08:41
Intex
Alebo: *.rc flag bitmap flag.bmp krizik bitmap krizik.bmp kvet bitmap kvet.bmp mina bitmap mina.bm…
Intex 12.06.2006 08:47
Intex
Mne to nejde skompilovať.
msx. 12.06.2006 09:10
msx.
Takže problém s kompiláciou bol kvôli číslam na začiatku názvov súborov. Vyriešené. Ďakujem zúčastne… poslední
msx. 12.06.2006 09:20
msx.

To je na mňa trochu veľa. Dá sa zapísať aj nejaký príklad na *.RC (uloženie a otvorenie)?

Ak si dobre spomínam, tak nejako takto sa robilo prostredie WinXP v DElphi 6 cez súbor *.manifest. Pokúsim sa to vyhľadať, možno mi to pomôže.

Edit: Tak som našiel, ale zrejme je to niečo iné:
www.pcsvet.cz/art/article.php?id=2383&search=manife st

Edit 2: Vlastne to pridávanie do súboru *.RC to asi vyvetľuje, ale ako k tomu pristupovať, to nie. No teraz mi nie je celkom jasné, ako priradť obázok do TImage, ak mám len smerník na obrázok v pamäti. Z *.RES ako som už pred tým zistil dostanem len smerník na objekt a nič viac.

Z tohto by som dokázal vytvoriť súbor s obrázkom na disku a ten vložiť do TImage. Dá sa to ešte takým spôsobom otvoriť, že zo smerníka to vložím priamo do TImage? Na zvuky je na to:

procedure TForm1.PlaySndFromMemoryClick(Sender: TObject); 
var 
  f: file; 
  p: pointer; 
  fs: integer; 
begin 
  AssignFile(f, 'hello.wav'); 
  Reset(f,1); 
  fs := FileSize(f); 
  GetMem(p, fs); 
  BlockRead(f, p^, fs); 
  CloseFile(f); 
  sndPlaySound(p, SND_MEMORY or SND_SYNC); 
  FreeMem(p, fs); 
end; 

Na obrázok čo použiť? BTW, bude to, čo dostanem zo smerníka pri použití *.RC kompatibilné s tým, čo by som dostal, keby to načítam zo súboru na disku? Viď uvedený príklad.

Edit:

procedure TForm1.PlaySndFromResClick(Sender: TObject); 
begin 
  PlaySound('HELLO', hInstance, SND_RESOURCE or SND_SYNC); 
end; 

Ja somár som v helpe hľadal priamo: exefile, wave atď. a nič mi nenašlo, potom som to hľadanie vzdal. Totiž, bol som zvyknutý z dôb TP, že v helpe boli aj konštanty a nie len procedúry a funkcie, prípadne typy.

Skúsil som len tak pokusne BITMAP, ale zahlásilo mi toto:

c:\Program Files\Borland\Delphi7\Bin>brcc32 wurmi.rc
Borland Resource Compiler  Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation.  All rights reserved.

Error wurmi.rc 1 3: Not a positive short integer

c:\Program Files\Borland\Delphi7\Bin>

A toto bol vstupný súbor:

0 BITMAP Sources\0-free.bmp
1 BITMAP Sources\1-head.bmp
2 BITMAP Sources\2-body.bmp
3 BITMAP Sources\3-eat.bmp
4 BITMAP Sources\4-poison.bmp
5 BITMAP Sources\5-paling.bmp

Teraz som ho upravil takto:

W0 BITMAP Sources\0-free.bmp
W1 BITMAP Sources\1-head.bmp
W2 BITMAP Sources\2-body.bmp
W3 BITMAP Sources\3-eat.bmp
W4 BITMAP Sources\4-poison.bmp
W5 BITMAP Sources\5-paling.bmp

A dostal som toto:

c:\Program Files\Borland\Delphi7\Bin>brcc32 wurmi.rc
Borland Resource Compiler  Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation.  All rights reserved.

Error wurmi.rc 1 20: Expecting filename

Za prve necisluj to priamo cislami ale urob si header so symbolmi, ktore budes pouzivat aj v programe.
Najlepsie je pouzivat nejaky resource editor (to Borland neobsahuje resource editor?? ::)) pretoze rucne to pisat je na zblbnutie, hlavne ak clovek potrebuje zlozitejsi dialog (musel by si rucne vypisovat vsetky suradnice), alebo menu, apod.

O .rc suboroch najdes kopu informacii cez google (je to univerzalnejsie, pre Win32, nie je to definovane borlandom), napr. zacat mozes tu
http://msdn.microsoft.com/library/default.asp?url=/ library/en-us/tools/tools/about_resource_files.asp
hlavne teda ta asi bude zaujimat toto
http://msdn.microsoft.com/library/default.asp?url=/ library/en-us/tools/tools/resource_definition_state ments.asp

meno bitmapy je bud plna cesta alebo relativna mozno musi zacinat bodkou lomitkom apod. a mala by byt v uvodzovkach. Ak chces cislovat tak skus nezacat od nuly.

Najlepsie urobis ak si pozries priamo help k tomu tvojmu resource compileru ktory pouzivas, aby si vedel ako presne to ma vyzerat.

Alebo:

*.rc

flag bitmap flag.bmp
krizik bitmap krizik.bmp
kvet bitmap kvet.bmp
mina bitmap mina.bmp
otaznik bitmap otaznik.bmp
tile bitmap tile.bmp
trava bitmap trava.bmp
ico1 bitmap ico1.bmp
ico1b bitmap ico1b.bmp
ico2 bitmap ico2.bmp
ico2b bitmap ico2b.bmp
ico3 bitmap ico3.bmp
ico3b bitmap ico3b.bmp

Skompilovat ho... a potom v delphi nacitat:

krizik:= TBitmap.Create;
krizik.LoadFromResourceName(HInstance, 'krizik');

flag:= TBitmap.Create;
flag.LoadFromResourceName(HInstance, 'flag');

kvet:= TBitmap.Create;
kvet.LoadFromResourceName(HInstance, 'kvet');

...


edit: samozrejme, ze tie subory musia byt v adresari "/bin" kde je delphi... alebo si vytvor v tom adresari dalsi, kde si naukladas vsetky obrazky a potom zmen aj subor *.rc, kde pridas ten adresar, ktrory si v tom "/bin" vytvoril...

Zpět do poradny Odpovědět na původní otázku Nahoru