AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi BassVis: WinAmpDummyWindow als Child in Form setzen?
Thema durchsuchen
Ansicht
Themen-Optionen

BassVis: WinAmpDummyWindow als Child in Form setzen?

Ein Thema von E307 · begonnen am 27. Jan 2007 · letzter Beitrag vom 6. Aug 2007
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?

  Alt 27. Jan 2007, 18:47
Zitat von E307:
Die WinAmp_ Visualisierung startet und funktioniert auch super! Das Problem ist aber, dass sie in einem extra- fenster geöffnet wird, über das der Rest des Players keine Kontrolle hat. (Kein änderbares Design, keine Speziellen Einstellungen des Players). Deshalb setze ich das Fenster mit SetParent() in ein Delphi-Formular. Dort wird die Visualisierung dann aber nicht angezeigt! Das ist das Problem.
Logisch!
1. Man nehme Winamp5 Plugins und keine Winamp2x
2. Man nehme die neue Bass_Vis 2.3.0.3
Die Version die du benutzt hat einen fehler bei Bass_Free welcher gefixt wurde.

Habe mir dein Sample mal angeschaut
und auf die schnelle abgeändert Bass_Vis 2.3.0.2 die du benutzt.
Setze hier mal nen Breakpoint
if hWndGen <> 0 then und prüfe ob mehr als 0

Delphi-Quellcode:
procedure TBassObject.StartWinVis(ListID: Integer; FrmHandle: THandle);
Var
  ISPlaying: DWORD;
  wndChild: Hwnd;
begin

  // check if we have something selected on the list
   if (ListID >= 0) then
  begin
    VisTimer.Enabled := False;
    InfoTimer.Enabled := False;

    if hWndWinAMP <> 0 then
    begin
       // free, in case there was one loaded before
       BASS_WINAMPVIS_Free(vischan);

       // Wait a little to VisFree
       Sleep(200);
    end;
    // create our new plugin
    vischan := BASS_WINAMPVIS_CreateVis(PChar(vislist.Strings[ListID]), StrToInt(modlist.Strings[ListID]), 0, FrmHandle, true);

    if vischan <> 0 then
    Begin
    // Get HWND from Winamp Dummy Window
    repeat
       hWndWinAMP := BASS_WINAMPVIS_GetAmpHwnd;
    Until hWndWinAMP <> 0;

    //Give D3D Plugin time for Render
    repeat
    Sleep(200);

    hWndGen := BASS_WINAMPVIS_GetGenHwnd;
    inc(RCounter);
    //lblCounter.Caption := IntToStr(RCounter);
    until (hWndGen <> 0) OR (RCounter = 32000); //ms

    if hWndGen <> 0 then
     begin
       wndChild:=GetWindow(hWndGen ,GW_CHILD);
       Windows.SetParent(wndChild, FrmHandle);
       Windows.MoveWindow(wndChild,0,0,240,320,True);

       // SendMessage Playing Status
       SendMessage(hWndWinAMP, WM_COMMAND, WINAMP_BUTTON2, 0);

       // Check IsPlaying
       ISPlaying := SendMessage(hWndWinAMP, WM_WA_IPC, 0, IPC_ISPLAYING);
       Sleep(150);
       // Result 1 RenderTimer activate
       if ISPlaying = 1 then
        begin

        InfoTimer.Enabled := True;
        VisTimer.Enabled := True;
        end;
      end;
    end;
  end;
end;
allerdings hängt sich dein prog bei mir hier auf
AmpMagnet:= TJvFormMagnet.Create(TComponent(Bass.WinAmpHandle)); da mußt du selbst mal schaun ...

gruß
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz