#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (Image03.JPG) |
2800円出した本です。これを参考に作ろうとしたんですが、まぁ....しかし、全く動かないじゃないか......最初につまずいたのは、リソース名のRESファイルが作成されない。何度実行しても、できるのは、リソースファイル.RESしかできない。 変だと思って出来上がったリソースファイル.RESの中身を秀丸に表示してみた。しっかり中にできているではないか。二つ目のピンク書き発見。次に例文の入力である。入力する途中で、3つ目4つ目の間違い発見。まっ、3つ目、これは、簡単です。Psoundなんて変数は定義してないわけだから、PWavesoundの間違いであることは明白。 4つ目、あれ、もう一度出来上がったリソースファイルを秀丸に送ってみる。やはりない。'test.wav'なんてなく、代わりにファイル名になっているのは、'SAMPLEWAVE'だった。入力を終わって走らせる。「SndPlaySoundなんて知らないよ」ってコンパイラの返事。 解らない.....uses節に何かを加えるんだろうが、何を加えるのか解らない。 |
GoogleでSndPlaySoundとDelphiで検索。出た! MMsystemを書き加える、コンパイル完了Buttonに記述したんですが、押してもならない。 さらに検索、外部ファイルを鳴らす時は、この書式であることが判明した。PWavesoundのところに'test.wav'のようにファイル名を入れると鳴ることがわかった。 じゃあ、PWavesoundの中身は何だろう。レコード世代だし、LPSTR、きっと大きなStringに違いないとButtonのCaptionに代入した。 中身はなんと、WAVE Fileの中身の部分が入っていた。いくつかサイトを見ても、外部ファイルを鳴らす方法ばかり、お風呂で考えることにした。SND_ASYNCが 怪しい。ここにファイル名ではなく、「鳴らすデータだよ」って説明するものをSND_ASYNCのところに入れるのであろう。 お風呂を出てから、WinAPIで検索するが、出てくるのは、VBばっかり......PC-98時代が長かったためか、VBVBVBVBVBVBVBVB、BASICから離れられないのだろうか.....Googleなんて、日本のサイトから表示するのでDelphi付けていてもWinAPIに該当するVBの日本のサイトをいっぱい表示する。結局、毎度のことながら、Altavistaで検索。Dephi関係のサイトがいっぱい出る。日本語はないけど..... こういう英語って単純明快、リソースファイルの先頭位置を示して鳴らすときには、SND_ASYNC or SND_Memoryって書けばよいと解った。鳴った! そして、私が最終的に作ったのは、 >procedure TForm1.MP2(s:pchar; sync:uint); >var hFind, hRes: THandle; Song: PChar; >begin > hFind:=FindResource(HInstance, s, RT_RCDATA); > if hFind<>0 then begin > hRes:=LoadResource(HInstance, hFind); > if hRes <> 0 then begin > Song:=LockResource(hRes); > if Assigned(Song) then SndPlaySound(Song, Sync or snd_Memory); > UnlockResource(hRes); > end; > FreeResource(hFind); > end; >end; それで、鳴らしたいところで MP2('Samplewave', Snd_ASync); と記述する。これは次の作業を進めながら鳴らす。この方法だと、終了ボタンでは、なる前にwindowを閉じてしまうので、 MP2('Samplewave', Snd_Sync); と記述すると、なり終わるまで次の作業はとまっているとわかった。これだけ間違いあって2800円? |