![]() |
BassVis: WinAmpDummyWindow als Child in Form setzen?
Hallo! Seit einiger Zeit beschäftige ich mich mit dem BassVis AddOn der Bass.dll. Eigentlich funktioniert alles, nur hätte ich das WinAmp Dummy- Window, das die Bass_Vis.dll erzeugt gerne in mein Formular eingebunden. Alle Versuche schlugen bisher fehl. (
![]() -------------------- Kleines Demoprojekt: ![]() -------------------- |
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
|
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
Das Problem daran ist, dass das WinAmpDummyWindow zwar ein Fenster ist (IsWindow(Handle)=true), aber ich eben nur das Handle dieses Fensters kenne, da es von einer DLL erzeugt wird.
|
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
:coder2: :bounce1: Heureka!
Delphi-Quellcode:
Damit wird die Visualisierung Child von WinVisForm. So. Jetzt das Problem: Die Visualisierung (WinAmpDummyWindow) verschwindet komplett(im WinVisForm). Wie kann ich sie im WinVisForm anzeigen lassen?
wnd:=GetWindow(Form1.Bass.WinAmpHandle,GW_HWNDPREV);
Windows.SetParent(wnd, WinVisForm.Handle); WinVisForm.Show; |
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
Zitat:
Ich habe extra für verschiedene sprachen samples geschrieben. Schau dir dafür mal die frmMain im Vb Sample im Texteditor an. Ist einfach das zu übersetzen. Du mußt auf jedenfall (Thread) bedingt .. die abfrage des hwnd in einer schleife ermitteln. edit: Zitat:
AppHandle ist das handle deiner Picpox , frame oder was auch immer du als Container(muss über ein Hwnd verfügen) verwendest. Zusätzlich hast du noch die API MoveWindow vergessen die kommt nach setparent. MoveWindow(wnd,0,0,formweite,formhöhe,true) gruss |
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
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.
|
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
Zitat:
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
Delphi-Quellcode:
und prüfe ob mehr als 0
if hWndGen <> 0 then
Delphi-Quellcode:
allerdings hängt sich dein prog bei mir hier auf
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;
Delphi-Quellcode:
da mußt du selbst mal schaun ...
AmpMagnet:= TJvFormMagnet.Create(TComponent(Bass.WinAmpHandle));
gruß |
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
Mit der neuen DLL sieht das Ganze schon viel besser aus! Aber das Vis-Fenster in ein Form meiner Anwendung zu integrieren klappt immernochnicht! Woran kann die Zugriffsverletzung bei der Umwandlung in TWincontrol liegen?
|
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
Zitat:
Nur nochmal zur info. Nur Winamp5/Sonique Plugins lassen sich in eigene Container verschieben/visualisieren. In deinen Sample ist AVS ein Winamp2x Plugin das funktioniert nicht, wird also nur in seinen eigenen Fenster angezeigt. Schau dir doch nochmal das Sample WinampTest von Delphi an. Da ist alles drin bis auf die Visualisierung im eigenen Fenster. Werde das die Tage mal anpassen damit auch das funktioniert. gruss |
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
Liste der Anhänge anzeigen (Anzahl: 1)
Also bei mir funktioniert das ohne probleme
gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:10 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