Co do SplashScreena to zobacz sobie źrodła na: http://www.speedyshare.com/406126890.html jak
chcesz bez chowania belki na pasku zadań to usuń ze zdarzen OnCreate kod ze zmienną Ex, a poza
tym w OnCreate głownej formatki masz zrobione Sleepy, bo aplikacji nic nie robi, więc dodałem je,
aby uzyskać efekt odczekania. Poza tym poczytaj sobie poniższy artykuł, tam masz również przykłady
i opisany splash: Ekran powitalny - Splash Screen
Co do drugiego pytania to tak jak Tobie odpowiedziano - zasoby. Dokładnie masz wszystko opisane
tutaj: Zasoby w EXE Co do dźwięków lub muzyki to ja gdy
chodzi o zasoby umiem z nich odrwarzać przy użyciu biblioteki bass.dll, którą pobierzesz ze strony:
http://un4seen.com/bass.html - w pliku powinny być dołączone oprócz biblioteki przykłady jej użycia
także w Delphi. Jednak moduł bass.pass ładuje bibliotekę statycznie. Natomiast kod poniżej, ktory
użyłem w napisanej przez siebie grze, ładuje bibliotekę dynamicznie i ma procedury, który "mówią"
wszystko o ich działaniu. Kod ten pozwala na odtworzenie modułów muzycznych lub mp3 czy też to
plików wave z zasobów. Procedury OdtwarzajDzwiek - służa do plików mp3/wav/ogg, natomiast jak
nazwa wskazuje OdtwarzajModul - odtwarza mod/xm/it/s3m/stm i innych. W przykładach do dlla jest
wprawdzie podkatalog Dynamic z przykładem modułu do ładowania dynamicznego biblioteki, ale on
zawiera wszystkie funkcje, które trzeba użyć po sobie. Natomiast poniższy kod tylko te najważniejsze.
unit bassfile;
interface
uses
Forms, Windows, Dialogs, SysUtils;
const
Sound_Dll_Nazwa = 'bass.dll';
BASS_SAMPLE_LOOP = 4;
BASS_MUSIC_RAMPS = $400;
BASS_STREAM_PRESCAN = $20000;
BASS_MUSIC_PRESCAN = BASS_STREAM_PRESCAN;
type
HMUSIC = DWORD;
HSTREAM = DWORD;
BOOL = LongBool;
var
Chn : DWord;
Dll_H : THandle;
MyResource : HRSRC;
MyGlobal : HGLOBAL;
PResource : Pointer;
ResSize : Integer;
BASS_Init : function(device: Integer; freq, flags: DWORD; win: HWND; clsid: PGUID): BOOL; stdcall;
BASS_MusicLoad : function(mem: BOOL; f: Pointer; offset, length, flags, freq: DWORD): HMUSIC; stdcall;
BASS_StreamCreateFile : function(mem: BOOL; f: Pointer; offset, length, flags: DWORD): HSTREAM; stdcall;
BASS_ChannelPlay : function(handle: DWORD; restart: BOOL): BOOL; stdcall;
BASS_ChannelStop : function (handle: DWORD): BOOL; stdcall;
BASS_Free : function : BOOL; stdcall;
procedure InicjujBibliotekeBass;
procedure ZwolnijBibliotekeBass;
procedure OdtwarzajDzwiekPlik(NazwaPliku : PChar; CzyLoop : boolean);
procedure OdtwarzajModulPlik(NazwaPliku : PChar; CzyLoop : boolean);
procedure OdtwarzajDzwiekZasoby(NazwaZasobu : PChar; CzyLoop : boolean);
procedure OdtwarzajModulZasoby(NazwaZasobu : PChar; CzyLoop : boolean);
procedure ZatrzymajOdtwarzanie;
implementation
procedure InicjujBibliotekeBass;
begin
if not FileExists(Sound_Dll_Nazwa) then
begin
MessageBox(Application.Handle,
PChar('Nie można znaleźć pliku: ' + Sound_Dll_Nazwa + '!' +#13#10+
'Odtwarzanie dźwieków nie będzie możliwe.'),
PChar(Application.Title), MB_OK + MB_ICONERROR);
Exit;
end;
Dll_H := LoadLibrary(PChar(Sound_Dll_Nazwa));
if Dll_H = 0 then
begin
MessageBox(Application.Handle,
PChar('Nie można załadować pliku: ' + Sound_Dll_Nazwa + '!' +#13#10+
'Odtwarzanie dźwieków nie będzie możliwe.'),
PChar(Application.Title), MB_OK + MB_ICONERROR);
Exit;
end;
BASS_Init := GetProcAddress(Dll_H, 'BASS_Init');
BASS_MusicLoad := GetProcAddress(Dll_H, 'BASS_MusicLoad');
BASS_StreamCreateFile := GetProcAddress(Dll_H, 'BASS_StreamCreateFile');
BASS_ChannelPlay := GetProcAddress(Dll_H, 'BASS_ChannelPlay');
BASS_ChannelStop := GetProcAddress(Dll_H, 'BASS_ChannelStop');
BASS_Free := GetProcAddress(Dll_H, 'BASS_Free');
if (@BASS_Init = nil)
or (@BASS_MusicLoad = nil)
or (@BASS_StreamCreateFile = nil)
or (@BASS_ChannelPlay = nil)
or (@BASS_ChannelStop = nil)
or (@BASS_Free = nil) then
begin
MessageBox(Application.Handle,
PChar('Nieprawidłowa biblioteka: ' + Sound_Dll_Nazwa + '!' +#13#10+
'Odtwarzanie dźwieków nie będzie możliwe.'),
PChar(Application.Title), MB_OK or MB_ICONERROR);
Exit;
end;
if not BASS_Init(-1, 44100, 0, Application.Handle, nil) then
begin
MessageBox(Application.Handle,
'Błąd podczas inicjalizacji audio!',
PChar(Application.Title), MB_OK + MB_ICONERROR);
Exit;
end;
end;
procedure ZwolnijBibliotekeBass;
begin
BASS_Free;
FreeLibrary(Dll_H);
end;
procedure OdtwarzajDzwiekPlik(NazwaPliku : PChar; CzyLoop : boolean);
var
Loopowanie : integer;
SoundFileName : PChar;
begin
if (CzyLoop = True) then
begin
Loopowanie := BASS_SAMPLE_LOOP;
end
else
begin
Loopowanie := 0;
end;
SoundFileName := NazwaPliku;
Chn := BASS_StreamCreateFile(False, SoundFileName, 0, 0, Loopowanie);
BASS_ChannelPlay(Chn, False);
end;
procedure OdtwarzajModulPlik(NazwaPliku : PChar; CzyLoop : boolean);
var
Loopowanie : integer;
ModuleFileName : PChar;
begin
if (CzyLoop = True) then
begin
Loopowanie := BASS_SAMPLE_LOOP;
end
else
begin
Loopowanie := 0;
end;
ModuleFileName := NazwaPliku;
Chn := BASS_MusicLoad(False, ModuleFileName, 0, 0, Loopowanie, 0);
BASS_ChannelPlay(Chn, False);
end;
procedure OdtwarzajDzwiekZasoby(NazwaZasobu : PChar; CzyLoop : boolean);
var
Loopowanie : integer;
SoundResourceName : PChar;
begin
if (CzyLoop = True) then
begin
Loopowanie := BASS_SAMPLE_LOOP;
end
else
begin
Loopowanie := 0;
end;
SoundResourceName := NazwaZasobu;
MyResource := FindResource(HInstance, SoundResourceName, RT_RCDATA);
if MyResource = 0 then
begin
MessageBox(Application.Handle,
'Nie można znaleźć zasobu z dźwiękiem!',
PChar(Application.Title), MB_OK + MB_ICONWARNING);
Exit;
end;
MyGlobal := LoadResource(HInstance, MyResource);
PResource := LockResource(MyGlobal);
ResSize := SizeOfResource(HInstance, MyResource);
Chn := BASS_StreamCreateFile(True, PResource, 0, ResSize, Loopowanie);
BASS_ChannelPlay(Chn, False);
FreeResource(MyGlobal);
end;
procedure OdtwarzajModulZasoby(NazwaZasobu : PChar; CzyLoop : boolean);
var
Loopowanie : integer;
ModuleResourceName : PChar;
begin
if (CzyLoop = True) then
begin
Loopowanie := BASS_SAMPLE_LOOP;
end
else
begin
Loopowanie := 0;
end;
ModuleResourceName := NazwaZasobu;
MyResource := FindResource(HInstance, ModuleResourceName, RT_RCDATA);
if MyResource = 0 then
begin
MessageBox(Application.Handle,
'Nie można znaleźć zasobu z modułem muzycznym!',
PChar(Application.Title), MB_OK + MB_ICONWARNING);
Exit;
end;
MyGlobal := LoadResource(HInstance, MyResource);
PResource := LockResource(MyGlobal);
ResSize := SizeOfResource(HInstance, MyResource);
Chn := BASS_MusicLoad(True, PResource, 0, ResSize, Loopowanie, 0);
BASS_ChannelPlay(Chn, False);
FreeResource(MyGlobal);
end;
procedure ZatrzymajOdtwarzanie;
begin
BASS_ChannelStop(Chn);
end;
end.