Einzelnen Beitrag anzeigen

Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#6

Re: Callback innerhalb einer Klasse aufrufen...

  Alt 7. Apr 2005, 18:25
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}
  Mit Zitat antworten Zitat