function TAudioSessionNotification.OnSessionCreated(const NewSession: IAudioSessionControl): HResult;
Habe hier noch gar keine Fehler bezüglich des Pointers feststellen(debuggen) können weil das Event nie ausgelöst wird.
Zitat:
Die Überlegung mit den PostMessage, um asynchron zu arbeiten und reagieren zu können ist problemlos für ordinale Typen (Byte, Integer, Cardinal...) umsetzbar, aber mit Interface-Instanzen kommst du in Teufelsküche.
Werde dem Nachgehen sobald ich eine Lösung dafür gefunden habe das dieses Event auch ausgelöst wird.
Wie ich schon sagte trotz Registrierung, Initialisierung funktioniert es nicht.
Zitat:
Diese Zeilen bedürfen einen Überarbeitung:
Jo ein
Delphi-Quellcode:
if not Assigned(MasterImg) then
begin
MasterImg := TImage.Create(FMGroupBox);
MasterImg.AutoSize := true;
MasterImg.Parent := FMGroupBox;
FillChar(WinDir, sizeof(WinDir), 0);
GetWindowsDirectory(WinDir, MAX_PATH);
MasterImg.Picture.Icon := SetSysItemIcon(PWideChar(WinDir + '\System32\SndVol.exe'));
if Assigned(MasterImg.Picture.Icon) then
begin
MasterImg.Left := (ClientWidth - Icon.Width) div 2;
MasterImg.Top := 5;
MasterImg.Show;
end else
FreeAndNil(MasterImg);
end;
sollte reichen.
Zitat:
Das vorige wird aber nie freigegeben -> Speicherleck.
im Destroy.
Delphi-Quellcode:
if Assigned(MasterImg) then
FreeAndNil(MasterImg);
Zitat:
Zumindest tut es das bei mir, wenn man einen Eventhandler anmeldet und auf die NewSession-Instanz zugreifen will:
procedure TForm1.AudioVolume1SessionCreated(NewSession: IAudioSessionControl);
Sorry das muss knallen.
1. SessionCreated wird nie aufgerufen daran kann es also nicht liegen.
2. Du erstellst ein Event für eine Session was eigentlich nichts mit den\der Session zu tun hat.
AudioVolume1 ist das HauptVolumen (Lautsprecher) und hat nix mit den Session zu tun. Aber du weist ihm ein SessionCreated zu
Deine Zuweisung ist korrekt ein Denkfehler meinerseits.
gruss