Einzelnen Beitrag anzeigen

Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

TMediaPlayer.Play von einen TThread ausführen - geht nicht

  Alt 24. Feb 2005, 15:19
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.
  Mit Zitat antworten Zitat