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.