Hallo,
wenn ich von einen TThread TMediaPlayer.Play aufrufe passiert nix.
Wenn ich Play aber mit Synchronize aufrufe geht es!? Warum geht es nicht asynchron??
Danke für eure Hilfe
Gottes Segen
[edit]
Folgender Felher tritt auf:
"Der Befehl kann nicht auf ein selbstöffnendes Gerät angewandt werden. Warten Sie, bis das Gerät geschlossen wurde."
(Fehlercode 303)
AutoOpen ist allerdings auf False...
[/edit]
Source:
Main-Form:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
t: TM32Thread;
begin
MediaPlayer1.FileName := 'D:\TestProjects\IO\1.wav';
MediaPlayer1.Open;
t := TM32Thread.Create(@MediaPlayer1);
end;
Thread:
Delphi-Quellcode:
unit Unit4;
interface
uses
mplayer,
Windows, Messages, SysUtils, Classes, Forms, dialogs;
type
TM32Thread =
class(TThread)
private
FOwner: Pointer;
protected
procedure Execute;
override;
public
constructor Create(AOwner: Pointer);
destructor Destroy;
override;
end;
implementation
//TM32Thread
constructor TM32Thread.Create(AOwner: Pointer);
begin
FOwner := AOwner;
inherited Create(True);
Priority := tpTimeCritical;
Resume;
end;
destructor TM32Thread.Destroy;
begin
inherited Destroy;
end;
procedure TM32Thread.Execute;
var
played: Boolean;
begin
repeat
Sleep(1000);
if played
then begin
//Geht nur mit Synchronize()
Synchronize(TMediaPlayer(FOwner^).Stop);
played := False;
end else begin
//Geht nur mit Synchronize()
Synchronize(TMediaPlayer(FOwner^).Play);
played := True;
end;
until Terminated;
end;
end.