Einzelnen Beitrag anzeigen

hadschi92

Registriert seit: 25. Okt 2006
83 Beiträge
 
Delphi XE3 Professional
 
#1

Verwendung von Events

  Alt 8. Apr 2013, 23:10
Ich erstelle zur Laufzeit Komponenten in einer eigenen Klasse und möchte auf Events dieser Komponenten reagieren, jedoch bekomme ich nicht heraus, wie ich den Events eine bestimmte Prozedur zuweiße. Dabei möchte ich zwei Varianten realisieren:

Auf das Event der Komponente soll in meiner erstellten Klasse reagiert werden. Ich habe das Event "onDone" und möchte darauf mit einer Ausführung meines Codes reagieren:
Delphi-Quellcode:
procedure TAudioControl.StartSavingThreadAsWave(AOwner: TComponent; SaveDirectory: String);
var
  InputStream: TStreamIn;
begin
  if 1 <= (TrackList.High + 1) then begin
    FWaveOut := TWaveOut.Create(AOwner);
    InputStream := TStreamIn.Create(AOwner);
    FWaveOut.Input := InputStream;

    InputStream.InChannels := TrackList.FNumberOfChannels;
    InputStream.InBitsPerSample := TrackList.FBitsPerSample;
    InputStream.InSampleRate := TrackList.SampleRate;
    InputStream.Stream := TFileStream.Create(TrackList[0].StreamPath, fmOpenRead);

    FWaveOut.FileName := SaveDirectory + '1.wav';
    FWaveOut.OnDone := ProcessSavingThreadAsWave(AOwner, SaveDirectory, 2);
    FWaveOut.Run;
  end else begin
    FWaveOut.Free;
  end;
end;

procedure TAudioControl.ProcessSavingThreadAsWave(AOwner: TComponent; SaveDirectory: String; TrackNumber: Integer);
begin
if TrackNumber <= (TrackList.High + 1) then begin
    FWaveOut.FileName := SaveDirectory + '/' + IntToStr(TrackNumber) + '.wav';
    Inc(TrackNumber);
    FWaveOut.OnDone := ProcessSavingThreadAsWave(AOwner, SaveDirectory, TrackNumber);
    FWaveOut.Run;
  end else begin
    FWaveOut.Free;
  end;
end;

end.
Sobald ich die Zuweisung von FWaveOut.OnDone := ProcessSavingThreadAsWave(...) mache wirft er mir folgenden Error:
Code:
[dcc32 Error] AudioControl.pas(227): E2010 Incompatible types: 'TOutputDoneEvent' and 'procedure, untyped pointer or untyped parameter'
Als Information ist der Code der WaveOut Komponente sicher noch nützlich:
Delphi-Quellcode:
TOutputDoneEvent = procedure(Sender : TComponent) of object;
FOnDone : TOutputDoneEvent;
property OnDone : TOutputDoneEvent read FOnDone write FOndone;
Das zweite Problem ist, dass meine selbst erstellte Klasse solch ein Event weitergeben soll, dazu kann ich nach dieser Anleitung ein Event erstellen, wie ich ich jedoch das Ursprungsevent mit meinem eigenen Event verknüpfe habe ich nicht herausgefunden.

Als Querverweis hier mein Projekt, in dem der ganze Code meiner selbst erstellten Klasse steht.

Geändert von hadschi92 ( 8. Apr 2013 um 23:12 Uhr)
  Mit Zitat antworten Zitat