![]() |
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 |
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
Genau das meine Ich! Wie hast du das gemacht, bei mir sind alle Versuche fehlgeschlagen. (Auch mit dem neuen AVS und der neuen DLL)
|
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
Zitat:
lass mir noch ein paar minuten zeit will da noch andere funktionen addieren. EDIT: Hier ist es. Beachte aber bitte das ist ein Sample keine 100% Anwendung. Soll nur die funktionsweise von BassVis kommentieren nix anderes. gruss |
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
Deine Demo funktioniert perfekt! Nur in meinem Programm hat es noch immer nicht geklappt, daraufhin habe ich alle Methoden des von mir erstellten TBassObjects, die irgendwas mit der Visualisierung zu tun hatten, gelöscht und neu erstellt. Und auf einmal gehen alle Vis-Funktionen! :-D (bis auf das sich das Programm bei Milkdrop-Visualisierungen aufhängt und bei Nullsoft Fullscreen abstürzt :wink: ) Vielen Dank für die Hilfe! @EWeiss: Die Demo war hervorragend! Ohne dieses Forum würde ich jetzt immernoch mit dem Problem kämpfen und wäre keinen Schritt weiter. :thumb: :thumb:
|
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
Zitat:
Nullsoft Fullscreen funktioniert du darfst nur nicht das erste Modul verwenden dieses hat nämlich einen BUG der aber nichts mit BassVis zu tun hat. Zitat:
und wird nur dort aktualisiert. Das Sample habe ich jetzt in der neuen Version integriert denke andere können es auch zum testen gebrauchen. Habe es hier entfernt. gruss |
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
Zitat:
:hello: |
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
Zitat:
Kleine Fehler sind noch drin vorallem was das warten auf die Threads angeht und das problem mit 3D Plugins muss mir noch überlegen wie ich diese vernünftig initialisiere damit sie mit w2 und w5 plugins richtig zusammen arbeiten. Hier die neue Testversion mit GenBitmap ![]() gruß |
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
Wie kann ich die Milkdrop-Visualisierung starten? Sie beschwert sich, dass kein Lied zur Zeit abgespielt wird...
|
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
Für Milkdrop:
Vor dem Aufruf von BASSVIS_ExecutePlugin einfach: BASSVIS_SetPlayState(@visparam,psPlay); einfügen :) |
Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
Zitat:
gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:03 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