Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi BassVis: WinAmpDummyWindow als Child in Form setzen? (https://www.delphipraxis.net/85222-bassvis-winampdummywindow-als-child-form-setzen.html)

E307 27. Jan 2007 16:10


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. (Dieses Thema) Hat jemand eine Idee, wie ich das Fenster doch noch als Child in ein Form meines Projektes einbinden kann?

--------------------
Kleines Demoprojekt:
Download
--------------------

Die Muhkuh 27. Jan 2007 16:18

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
 
Wenn ich das richtige verstehe, willst Du eine Form (WinAmpDummyWindow) in Deine Hauptform reinpflanzen?

Wenn ja, wäre Hier im Forum suchenMDI, Delphi-Referenz durchsuchenMDI ein Stichwort.

E307 27. Jan 2007 16:51

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
 
Zitat:

Zitat von Die Muhkuh
Wenn ich das richtige verstehe, willst Du eine Form (WinAmpDummyWindow) in Deine Hauptform reinpflanzen?

Wenn ja, wäre Hier im Forum suchenMDI, Delphi-Referenz durchsuchenMDI ein Stichwort.

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.

E307 27. Jan 2007 17:21

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
 
:coder2: :bounce1: Heureka!
Delphi-Quellcode:
wnd:=GetWindow(Form1.Bass.WinAmpHandle,GW_HWNDPREV);
Windows.SetParent(wnd, WinVisForm.Handle);
WinVisForm.Show;
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?

EWeiss 27. Jan 2007 17:51

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
 
Zitat:

Zitat von E307
:coder2: :bounce1: Heureka!
Delphi-Quellcode:
wnd:=GetWindow(Form1.Bass.WinAmpHandle,GW_HWNDPREV);
Windows.SetParent(wnd, WinVisForm.Handle);
WinVisForm.Show;
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?

weiss nicht was du für ein problem hast. ?
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:

HVIS BASS_WINAMPVIS_CreateVis(
char *f
DWORD module
DWORD flags
DWORD AppHandle
BOOL AppHDC
int VisCounter
);
AppHDC muss auf jedenfall beim starten des Winamp5-plugin auf true gesetzt werden
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

E307 27. Jan 2007 18:22

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.

EWeiss 27. Jan 2007 18:47

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
 
Zitat:

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
Delphi-Quellcode:
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
Delphi-Quellcode:
AmpMagnet:= TJvFormMagnet.Create(TComponent(Bass.WinAmpHandle));
da mußt du selbst mal schaun ...

gruß

E307 27. Jan 2007 19:31

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?

EWeiss 28. Jan 2007 08:37

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
 
Zitat:

Zitat von E307
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?

KA..
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

EWeiss 28. Jan 2007 10:38

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also bei mir funktioniert das ohne probleme

gruss

E307 28. Jan 2007 12:30

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)

EWeiss 28. Jan 2007 14:08

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
 
Zitat:

Zitat von E307
Genau das meine Ich! Wie hast du das gemacht, bei mir sind alle Versuche fehlgeschlagen. (Auch mit dem neuen AVS und der neuen DLL)

Ich hänge gleich in diesen Thread das Sample als Archiv an...
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

E307 28. Jan 2007 17:31

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:

EWeiss 28. Jan 2007 19:00

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
 
Zitat:

Zitat von E307
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! :thumb:

Naja bei Milkdrop muss ich in BassVis-Source nochmal schaun wenn ich bock dazu habe.
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:

@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:
Naja hätte dir auch im Bass-Forum geholfen schließlich ist meine ;) BassVis dort zum Download ausgestellt
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

E307 30. Jan 2007 18:27

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
 
Zitat:

Zitat von EWeiss
Naja bei Milkdrop muss ich in BassVis-Source nochmal schaun wenn ich bock dazu habe.
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.

Naja hätte dir auch im Bass-Forum geholfen schließlich ist meine ;) BassVis dort zum Download ausgestellt
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

Achso! Das habe ich gar nicht gewusst! :lol: Die bass_vis.dll ist wirklich super!
:hello:

EWeiss 30. Jan 2007 18:35

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
 
Zitat:

Zitat von E307
Zitat:

Zitat von EWeiss
Naja bei Milkdrop muss ich in BassVis-Source nochmal schaun wenn ich bock dazu habe.
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.

Naja hätte dir auch im Bass-Forum geholfen schließlich ist meine ;) BassVis dort zum Download ausgestellt
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

Achso! Das habe ich gar nicht gewusst! :lol: Die bass_vis.dll ist wirklich super!
:hello:

Jo Danke! hat mir auch viel stress bereitet da ich normalerweise in VB programmiere.
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

http://www.delphipraxis.net/download.php?id=24619

gruß

Der_Ventilator 5. Aug 2007 16:57

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...

Ghostwalker 6. Aug 2007 13:18

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
 
Für Milkdrop:

Vor dem Aufruf von BASSVIS_ExecutePlugin einfach:

BASSVIS_SetPlayState(@visparam,psPlay);

einfügen :)

EWeiss 6. Aug 2007 17:06

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?
 
Zitat:

Zitat von Ghostwalker
Für Milkdrop:

Vor dem Aufruf von BASSVIS_ExecutePlugin einfach:

BASSVIS_SetPlayState(@visparam,psPlay);

einfügen :)

Bist sicher das er die neue Version verwendet ?

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