- ベストアンサー
Delphi6personalを使用している際に発生するエラーと解決方法
- Delphi6personalを使用している際に、再生や停止時にエラーが発生することがあります。エラーメッセージは「'そのデバイス名はこのアプリケーションでエイリアスとして既に使用されています。一意のエイリアスを使用してください。'」と表示されます。
- このエラーの原因は、Opendialogを使用して開いたファイル名をMediaplayerコンポーネントのFilenameに代入する際に、既に使用されているデバイス名を指定してしまっていることです。
- 解決するためには、エラーメッセージで指摘されているように、一意のエイリアスを使用する必要があります。異なるデバイス名を指定することで、エラーを回避することができます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> どうして、同じだとダメなのですか? うーん。どうしてと言われても、そういう仕様なので私は何とも・・・ > それと、この場合、同じだとダメなのは、PropertyのFilename(初期設定) > それともあとから代入されるFilenameのことでしょうか? 何のプロパティでしょうか? MediaPlayerの?それともOpenDialogの? >procedure TForm1.OpenDialog2SelectionChange(Sender: TObject); >begin >MediaPlayer2.FileName :=OpenDialog2.FileName; >end; >こういう使い方をしています。 >これでも正常に動きます? 正常に動きます。 が、ファイル名を可変で開くことが出来ません。 また、可変で開こうとした際のキャンセルでもFileNameが設定されてしまい開けないファイルでも設定されてしまいます。 >質問ばかりで申し訳ありませんが、 >こういう疑問は一般にどういう本等を見れば、 >対処がわかるのでしょうか? 一般的にですか・・・。うーん。とにかくDelphiと名の付く本を見ることでしょうかねぇ。 参考URLに私もよく行くサイト紹介しておきます。
その他の回答 (3)
- kenzo-2000
- ベストアンサー率40% (18/44)
> 結局、MediaPlayerは2つ使えないのかな? 使えますよ。 ただし、同じファイルを開かなければの条件らしいです。 (書いてあったわけでなく、自分で検証した結果ですが・・・)
お礼
やはり、2つ同じファイルは使えないのですね。 別の方法を考えます。 ありがとうございました。
- kenzo-2000
- ベストアンサー率40% (18/44)
OpenDialog1とOpenDialog2のFileNameを同じにしていませんか? 先にOpenDialog2を設定し、その後にOpenDialog1を設定してもエラーが発生するはずですが・・・。 少し、ずれますが、ソースの添削を・・・・ if (OpenDialog2.Execute) then begin MediaPlayer2.FileName :=OpenDialog2.FileName; end; としたほうが良いでしょう。 (知ってたらごめんなさい)
補足
ANo.#2 OpenDialog1とOpenDialog2のFileNameを同じにしていませんか? >先にOpenDialog2を設定し、その後にOpenDialog1を設定してもエラーが発生するはずですが・・・。 同じにしています。 本当は違うファイルを使おうと思っていますが今は、 便宜上同じファイルにしてます。 どうして、同じだとダメなのですか? それと、この場合、同じだとダメなのは、PropertyのFilename(初期設定) のことですか? それともあとから代入されるFilenameのことでしょうか? よろしくお願いいたします。 >少し、ずれますが、ソースの添削を・・・・ >if (OpenDialog2.Execute) then >begin > MediaPlayer2.FileName :=OpenDialog2.FileName; >end; >としたほうが良いでしょう。 >(知ってたらごめんなさい) もちろん知りませんでした。 procedure TForm1.OpenDialog2SelectionChange(Sender: TObject); begin MediaPlayer2.FileName :=OpenDialog2.FileName; end; こういう使い方をしています。 これでも正常に動きます? 質問ばかりで申し訳ありませんが、 こういう疑問は一般にどういう本等を見れば、 対処がわかるのでしょうか? 質問ばかりで済みません。 よろしくお願いいたします。
- kenzo-2000
- ベストアンサー率40% (18/44)
少しきつい書き方かも知れませんがあしからず。 まず、「Timerコンポーネント」との関係はなんでしょうか? > コンパイル後に出るエラー 実行時エラーという解釈でよろしいでしょうか? どういったコードを記述しているか分かりませんが、例外エラーが発生した 個所の前後はどういう処理を行っているのでしょうか?
お礼
早速のお返事ありがとうございます。 質問の仕方さえわかってなくて済みません。 >少しきつい書き方かも知れませんがあしからず。 いえいえ、どんどんきつくご指摘ください。 勉強させてもらいます。 >>まず、「Timerコンポーネント」との関係はなんでしょうか? 済みません。間違えました。 正しくは、MediaPlayerコンポーネントです。 >> コンパイル後に出るエラー >実行時エラーという解釈でよろしいでしょうか? そういうことだと思います。 実行を押すと、FormやUnitの画面が消えて、ちゃんとした ソフトのような画面になってから出るエラーです。 >どういったコードを記述しているか分かりませんが、例外エラーが発生した >個所の前後はどういう処理を行っているのでしょうか? MediaPlayer2.FileName :=OpenDialog2.FileName; のようにファイルを指定しようとすると エラーが出ます。 もうひとつMediaPlayer1を使ってまして、 MediaPlayer1.FileName :=OpenDialog1.FileName; の方は大丈夫のようです。 両方とも同じプロパティー、同じメソッドにしているはずなのですが、、、。 こういうのは全ソースをここに書いたほうがいいのですかね? ご指導よろしくお願いいたします。
お礼
丁寧なご解答ありがとうございました。 結局、MediaPlayerは2つ使えないのかな? ということで、 SndPlaySound(PChar(OpenDialog1.FileName), SND_ASYNC); という関数を使うべしと書いてある本が あったので、書き換えて解決しました。 ありがとうございました。