![]() |
AW: Syntax SendMCICommand
Delphi-Quellcode:
Hast du dir mal die Variable autoplay angeschaut?
procedure SoundAbspielen1;
begin myMCIPlayer := TMCIPlayer.Create(ExtractFilePath(Paramstr(0)) + 'Sounds\Sound1.wav', 'waveaudio', False); myMCIPlayer.play; end; Wenn ja warum verwendest du sie dann nicht und entfernst das
Delphi-Quellcode:
myMCIPlayer.play;
Dann benötigst du nur Create und Destroy.. Alternativ könntest du auch noch eine neue procedure einbauen in der du close verwendest und die Funktionen aus Destroy dort einfügst. gruss |
AW: Syntax SendMCICommand
Das mit dem Autoplay ist schon mal super, hätte ich auch drauf kommen können...
Delphi-Quellcode:
myMCIPlayer := TMCIPlayer.Create(ExtractFilePath(Paramstr(0)) + 'Sounds\Sound1.wav', 'waveaudio', True);
Delphi-Quellcode:
Ja, das ist gut, nur das Problem ist für mich das Destroy...
Dann benötigst du nur Create und Destroy..
Delphi-Quellcode:
Also eine Prozedur, die das selbe macht wie Destroy, nur nicht als destructor läuft?
Alternativ könntest du auch noch eine neue procedure einbauen
in der du close verwendest und die Funktionen aus Destroy dort einfügst. Aber warum, was bringt das? Ich habe ja immernoch das Problem, dass ich nicht weiß wo/wann ich den Player zerstöre... Hast du (oder jemand anders) dafür ne Idee? |
AW: Syntax SendMCICommand
Delphi-Quellcode:
Wäre eine möglichkeit.
procedure SoundAbspielen1;
begin if assigned(myMCIPlayer) then myMCIPlayer.Destroy; myMCIPlayer := TMCIPlayer.Create(ExtractFilePath(Paramstr(0)) + 'Sounds\Sound1.wav', 'waveaudio', true); end; procedure SoundAbspielen2; begin myMCIPlayer.Destroy; myMCIPlayer := TMCIPlayer.Create(ExtractFilePath(Paramstr(0)) + 'Sounds\Sound1.wav', 'waveaudio', true); end; Nicht getestet. oder halt nen Schalter zwichenschalten zwischen SoundAbspielen1 und SoundAbspielen2
Delphi-Quellcode:
Isplaying := not IsPlaying
if IsPlaying and assigned(myMCIPlayer) then myMCIPlayer.Destroy else myMCIPlayer := TMCIPlayer.Create(ExtractFilePath(Paramstr(0)) + 'Sounds\Sound1.wav', 'waveaudio', true); gruss |
AW: Syntax SendMCICommand
Mit dem assigned kann man was anfangen
Delphi-Quellcode:
Damit lässt es sich dann auch lösen. Danke!
if assigned(myMCIPlayer) then
myMCIPlayer.Destroy; Kann man auch zwei MCIPlayer gleichzeitig erstellen? myMCIPlayer1 und myMCIPlayer2 oder so? |
AW: Syntax SendMCICommand
Zitat:
Zitat:
myMCIPlayer1 alias = 'mciplayer1' myMCIPlayer2 alias = 'mciplayer2' Du kannst keine zwei Instanzen mit dem selben alias erstellen. gruss |
AW: Syntax SendMCICommand
Zitat:
Zitat:
|
AW: Syntax SendMCICommand
Zitat:
Wie man diesen benennt ist eigentlich egal er muss nur für jede instanz gleich sein.
Delphi-Quellcode:
In unserem Fall ist der alias mciplayer
// We want to play a File.
command := PWideChar('open "' + fileName + '" type ' + dtype + ' alias mciplayer wait'); lResult := mciSendString(command, return, resultSize, 0); 'alias mciplayer wait' In allen Functionen muss also bei einer neuen Instanz ein anderer Alias angegeben werden.
Delphi-Quellcode:
constructor TMCIPlayer.Create(fileName: string; dtype: string; alias: string; autoplay: Bool);
Und ersetze alle !mciplayer! mit dieser Variable also
Delphi-Quellcode:
bsp.. für Play
// We want to play a File.
command := PWideChar('open "' + fileName + '" type ' + dtype + ' alias ' + alias + ' wait'); lResult := mciSendString(command, return, resultSize, 0);
Delphi-Quellcode:
procedure TMCIPlayer.play(alias: string);
begin command := ('play ' + alias + ' notify'); mciSendString(command, return, resultSize, 0); end;
Delphi-Quellcode:
myMCIPlayer1 := TMCIPlayer.Create(ExtractFilePath(Paramstr(0)) + 'Sounds\Sound1.wav', 'waveaudio', 'mciplayer1', true);
myMCIPlayer2 := TMCIPlayer.Create(ExtractFilePath(Paramstr(0)) + 'Sounds\Sound2.wav', 'waveaudio', 'mciplayer2', true); gruss |
AW: Syntax SendMCICommand
Erstmal Danke für die verständliche Erklärung.
Delphi-Quellcode:
Auch bei Destroy?
Und ersetze alle !mciplayer! mit dieser Variable
Delphi-Quellcode:
Es kommt der Fehler: "Deklaration von 'Destroy' unterscheidet sich von vorheriger Deklaration."
public
{ public-Deklarationen } //... destructor Destroy(alias: string); override; end; //... destructor TMCIPlayer.Destroy(alias: string); begin command := ('close '+ alias +' wait'); mciSendString(command, return, resultSize, 0); end; |
AW: Syntax SendMCICommand
Zitat:
Ansonsten ja auch bei Destroy.. Hmm override;? gruss |
AW: Syntax SendMCICommand
Zitat:
EDIT: Hab dein Edit nicht gesehen, sorry ;) Das ist die MCIPlayer unit...
Delphi-Quellcode:
unit MCIPlayer;
interface uses Windows, Messages, mmsystem, StrUtils, SysUtils, Dialogs; type TMCIPlayer = class private { private-Deklarationen } command: PWideChar; return: array [0..255] of Widechar; resultSize: Integer; protected { protected-Deklarationen } public { public-Deklarationen } duration: Integer; paused: Bool; function getPosition(alias: string): Integer; procedure play(alias: string); procedure pausePlay(alias: string); procedure stop(alias: string); constructor Create(fileName: string; dtype: string; alias: string; autoplay: Bool); destructor Destroy(alias: string); override; {<<<<<<<<<<<} end; implementation constructor TMCIPlayer.Create(fileName: string; dtype: string; alias: string; autoplay: Bool); var lResult: cardinal; begin //Variablen initiieren paused := FALSE; resultSize := 255; // We want to play a File. command := PWideChar('open "' + fileName + '" type ' + dtype + ' alias ' + alias + ' wait'); lResult := mciSendString(command, return, resultSize, 0); if lResult <> 0 then begin mciGetErrorString(lResult, return, 255); ShowMessage('MCI error:' + return); duration := 0; end; // Calculate duration command := ('set mciplayer time format milliseconds wait'); mciSendString(command, return, resultSize, 0); command := ('status mciplayer length wait'); mciSendString(command, return, resultSize, 0); if (StrLen(return) > 0) then duration := StrToInt(return) else duration := 0; if autoplay then play; end; destructor TMCIPlayer.Destroy(alias: string); begin command := ('close '+ alias +' wait'); mciSendString(command, return, resultSize, 0); end; function TMCIPlayer.getPosition(alias: string): Integer; begin command := ('status '+ alias +' position wait'); mciSendString(command, return, resultSize, 0); if (StrLen(return) > 0) then result := StrToInt(return) else result := 0; end; procedure TMCIPlayer.pausePlay(alias: string); begin paused := not paused; if paused then begin command := ('pause '+ alias +' notify'); mciSendString(command, return, resultSize, 0); end else begin command := ('resume '+ alias +' notify'); mciSendString(command, return, resultSize, 0); end; end; procedure TMCIPlayer.play(alias: string); begin command := ('play ' + alias + ' notify'); mciSendString(command, return, resultSize, 0); end; procedure TMCIPlayer.stop(alias: string); begin command := ('stop '+ alias +' notify'); mciSendString(command, return, resultSize, 0); end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz