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
Seite 1 von 2  1 2      
E307

Registriert seit: 23. Feb 2006
134 Beiträge
 
Delphi 2005 Personal
 
#1

BassVis: WinAmpDummyWindow als Child in Form setzen?

  Alt 27. Jan 2007, 16:10
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
--------------------
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?

  Alt 27. Jan 2007, 16:18
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.
  Mit Zitat antworten Zitat
E307

Registriert seit: 23. Feb 2006
134 Beiträge
 
Delphi 2005 Personal
 
#3

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?

  Alt 27. Jan 2007, 16:51
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.
  Mit Zitat antworten Zitat
E307

Registriert seit: 23. Feb 2006
134 Beiträge
 
Delphi 2005 Personal
 
#4

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?

  Alt 27. Jan 2007, 17:21
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?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?

  Alt 27. Jan 2007, 17:51
Zitat von E307:
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
  Mit Zitat antworten Zitat
E307

Registriert seit: 23. Feb 2006
134 Beiträge
 
Delphi 2005 Personal
 
#6

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?

  Alt 27. Jan 2007, 18:22
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.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

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
E307

Registriert seit: 23. Feb 2006
134 Beiträge
 
Delphi 2005 Personal
 
#8

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?

  Alt 27. Jan 2007, 19:31
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?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?

  Alt 28. Jan 2007, 08:37
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

Re: BassVis: WinAmpDummyWindow als Child in Form setzen?

  Alt 28. Jan 2007, 10:38
Also bei mir funktioniert das ohne probleme

gruss
Miniaturansicht angehängter Grafiken
work_194.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz