Hallo,
Zitat von
BenTech:
...
Delphi-Quellcode:
procedure Tbassfader.SetFadeSync(strX : HSTREAM);
var max_laenge : float;
fade_start : QWord;
procedure CallbackSync(SyncHandle: HSYNC; Channel, data, user: DWORD); stdcall;
begin
PlayFadeFile(AutoFadeFile,AutoFadeTime);
end;
begin
max_laenge := BASS_ChannelBytes2Seconds(strX,BASS_StreamGetLength(strX));
fade_start := BASS_ChannelSeconds2Bytes(strX, max_laenge - (AutoFadeTime/1000));
BASS_ChannelSetSync(strX,BASS_SYNC_POS,fade_start,@CallbackSync,Dword(self));
end;
hätte das da einer korrekt eingerückt, wie ich es jetzt getan hab, dann wäre klar, das es eine
nestet-procedure ist, dh. eine unter-procedure in einer methode. Bass braucht aber eine richtige callback-handler-procdure (ausserhalb von klassen und methoden). Das ist auch der grund warum du noch auf felder der klasse greifen konntest. Also eher so:
Delphi-Quellcode:
procedure CallbackSync(SyncHandle: HSYNC; Channel, data, user: DWORD); stdcall;
begin
Tbassfader(user).PlayFadeFile(AutoFadeFile,AutoFadeTime); // user rulez!
end;
procedure Tbassfader.SetFadeSync(strX : HSTREAM);
var max_laenge : float;
fade_start : QWord;
begin
max_laenge := BASS_ChannelBytes2Seconds(strX,BASS_StreamGetLength(strX));
fade_start := BASS_ChannelSeconds2Bytes(strX, max_laenge - (AutoFadeTime/1000));
BASS_ChannelSetSync(strX,BASS_SYNC_POS,fade_start,@CallbackSync,Dword(self));
end;
sonst führst du code in einer klasse aus, ohne die klasse und das objekt zu kennen. Hoffe meine annahmen sind richtig?
mâxîmôv.
{KDT}