![]() |
Re: Probleme mit Bass_Vis
Zitat:
Dann bitte welche Plugins hast du gewählt ? Winamp5 funktioniert nicht. grüße |
Re: Probleme mit Bass_Vis
Zitat:
Zitat:
Zitat:
|
Re: Probleme mit Bass_Vis
Zitat:
Das laden der Plugins von Winamp5 funktioniert nicht. Daran werde ich arbeiten sobald die anderen Funktionen eingebaut sind die für 2.9 Plugins benötigt werden. Davon abgesehen! Benenne den Plugin Ordner in Winamp um nach Plugin_ erstelle einen neuen Order mit den Namen Plugins. Lade ein paar 2.9 Plugins und installiere sie. Dann kannst du den Ordner Plugins auswählen und das laden der Plugins funktioniert. Hab jetzt über 1 Stunde AVS am laufen ohne Probleme Grüße |
Re: Probleme mit Bass_Vis
So hab die neue Funktion eingebaut!
Delphi-Quellcode:
wird übergeben VB.
procedure BASS_WINAMPVIS_Playstate(State: Integer); stdcall;
begin if DummyWinampHandle > 0 then case (State) of 0: State := WINAMP_BUTTON4; //Stop 1: State := WINAMP_BUTTON2; //Play 3: State := WINAMP_BUTTON3; //Pause end; // Sende Ergebnis zu WinampVisWndProc // DummyWinampHandle; WindowHandle des Dummy Winamp Fenster SendMessage(DummyWinampHandle, WM_COMMAND, State, 0); end;
Code:
Und das rennt..
Private Sub cmdPlay_Click()
hwndWinamp = FindWindow("Winamp v1.x", vbNullString) If hwndWinamp <> 0 Then BASS_WINAMPVIS_PlayState 1 lblStatus.Caption = "Playing" End If End Sub Private Sub cmdStop_Click() hwndWinamp = FindWindow("Winamp v1.x", vbNullString) If hwndWinamp <> 0 Then BASS_WINAMPVIS_PlayState 0 lblStatus.Caption = "Stop" End If End Sub Kann jetzt auch aus den Winamp Plugins heraus die Visualisierung ausschalten. Grüße |
Re: Probleme mit Bass_Vis
was ist der Unterschied zw. den Plugins der 2.9 und der 5 (ich hab keine 2.9er mehr)?
|
Re: Probleme mit Bass_Vis
Zitat:
Denke da gibt es ein problem mit der Erkennung von 'winampVisGetHeader' Scheinen nicht alle hundertpro importiert zu sein. Grüße |
Re: Probleme mit Bass_Vis
Habe mal ne Frage?
Ich benutze die BassVis ja in meinen projekt. Wenn die DLL startet wird ein Winamp Dummy Fenster erstellt. Plugins welche eine Dock funktion benutzen setzen sich dann sofort an das nicht sichtbare Fenster was aber nicht das Fenster meiner Anwendung ist. Deshalb hole ich über Findwindow das Handle des Dummy Window und positioniere das Dummy Window mit SetWindowPos in verbindung mit SetParent in mein Hauptfenster ein. Jetzt kommt das Problem! Wenn ich die alte Routine aufrufe vom BassVis habe ich festgestellt das beim start das Plugin nicht schnell genug an mein Hauptfenster andocken kann weil ich das Dummy Window erst identifizieren kann sobald das Plugin gestartet ist! Gut soweit. Habe nun eine Routine hinzugefügt welche es ermöglicht unabhängig vom Plugin das Dummy Window zu erstellen.
Delphi-Quellcode:
Dort wird das Window generiert.
function WinampDummyWin(VisInfo: PWinampVisInfo): HWND;
var WinAtom : TAtom; wClass : TWNDCLASSEX; Msg : TMsg; const AppClass = 'Winamp v1.x'; // Übergebe den ClassenNamen AppTitle = 'Winamp 5.2'; // Übergebe den Window Titel (Caption) begin if DummyWinampHandle <> 0 then // Erstelle das Fake Winamp Fenster begin windows.UnRegisterClass(AppClass, hInst); hInst := 0; DummyWinampHandle := 0; VisInfo^.WinHandle := 0; end; hInst := GetModuleHandle(nil); // Hole die Apllikations Instanz with wClass do // Erstelle die Classe begin cbSize := sizeof(wClass); Style := CS_PARENTDC or CS_VREDRAW; lpfnWndProc := @WinampVisWndProc; cbClsExtra := 0; cbWndExtra := 0; hInstance := hInst; hIcon := 0; hCursor := LoadCursor(0, IDC_ARROW); hbrBackground := COLOR_BTNFACE + 1; lpszMenuName := nil; lpszClassName := AppClass; hIconSm := 0; end; // Erst wenn die Classe registriert ist kann das Window erstellt werden WinAtom := windows.RegisterClassEx(wClass); if WinAtom <> 0 then result := CreateWindowEx(0, AppClass, AppTitle, WS_POPUP, // Kein Frame, Unsichtbar 0, 0, 275, 116, // x, y, width, height {parent} 0, 0, hInst, nil) else result := 0; DummyWinampHandle := result; VisInfo^.WinHandle := DummyWinampHandle; // Erst der AppClass das ParentWindow zuweisen // Dann über ParentWindow das HWND des Plugin ermitteln PluginHandle := GetWindow(DummyWinampHandle,GW_HWNDPREV); WinProcLoad := False; // Überprüfe ob aus der Anwendung IsPlaying eingeschaltet wurde. // Erst dann wird die Visualisierung freigeschaltet. if IsPlaying > 0 then VisInfo^.Init2 := True else VisInfo^.Init2 := False; sleep(150); peekmessage(Msg, 0, 0, 0, 0); end; Um die Function abzuschließen muss ich auf die Rückgabe der Message warten.
Delphi-Quellcode:
Hier hängt sich das Plugin aber auf!
GetMessage(Msg, 0, 0, 0)
Habe es nu so gelößt.
Delphi-Quellcode:
Nun warte ich 150 msec und hole mir dann die Infos über PeekMessage
sleep(150);
peekmessage(Msg, 0, 0, 0, 0); Nun die Frage .. hihihihihhiihihih Geht das anders ? Komfortabler ? Denke es ist kein guter Ansatz über die Sleep Methode Anders habe ich den Kuchen aber nicht gebacken bekommen. Ich darf aber auf keinen Fall in dieser Funktion hängen bleiben bzw.. die abfrage der Message muss beendet werden. Die Funktion selbst wird nur einmal beim start der BassVis ausgeführt. Für die Plugins gibt es nochmal eine ähnlich Funktion. grüße EDIT: Soviel Text für ein so kleines Problem ... |
Re: Probleme mit Bass_Vis
Nein, das erstellen des Fensters ist schon gut so.
Was fehlt ist die Weiterverarbeitung der Messages von GetMessage(Msg, 0, 0, 0).
Delphi-Quellcode:
Du musst halt noch in der WndProc festlegen wann das Fenster geschlossen wird bzw. werden soll.
while GetMessage(msg, 0, 0, 0) do
begin TranslateMessage(msg); // Tastatureingaben veratbeiten DispatchMessage(msg); // Messages veratbeiten end; |
Re: Probleme mit Bass_Vis
Zitat:
Ich versuchs nochmal zu erklären. Stell dir das Fenster meiner Anwendung als Koffer vor dort wird nun das hier erzeugt reingesteckt und darf nicht wieder entnommen(terminiert werden). Wenn ich nun hier eine GetMessage ansetze arbeitet diese wie ein schloss was erst geöffnet werden kann wenn ich den schlüssel habe '(WM_QUIT) sende.' Unabhängig davon muss ich mich aber weiter bewegen können. Und das geht mit GetMessage nicht. Also kurz gesagt. Das Fenster darf nicht terminiert werden aber die Plugins müssen trotzdem Messagen empfangen und versenden können Grüße |
Re: Probleme mit Bass_Vis
Ich glaube das problem ist schwieriger als gedacht
Das funktioniert deshalb nicht weil beide routinen auf die gleiche winproc ansprechen. Deshalb kann die getMessage nicht verarbeitet werden. Was ich erreichen möchte. 1. Das einmal erstellte Dummy Window für Winamp-Plugins darf nicht terminiert werden Es soll beim starten von BassVis das HWND vom Dummy an die Anwendung schicken aber ohne das ein Plugin vorher ausgeführt wurde. Benötigt wird diese Funktion für Plugins welche Andock möglichkeiten zur verfügung stellen. 2. Die Plugins ausführen aber so das diese das DummyWindow nicht terminieren. Würde bedeuten das ich dafür eine separate Winproc benötige. Bin mir nur noch nicht klar welche messagen diese verarbeiten soll. Wenn das ohne extra Winproc läuft um so besser. 3. Übergabe der Laufzeit TimeDisplay Muss von der Anwendung übergeben und von jeden Plugin erkannt werden 4. Übergabe des aktuellen Titels Muss von der Anwendung übergeben und von jeden Plugin erkannt werden 5: Next, Prev ... dürfte keien problem sein. Muss von der Anwendung übergeben und von jeden Plugin erkannt und gesteuert werden können. Bisher läuft es stabiel solange wie kein Winamp5 Plugin verwendet wird und die Plugins selbst keine Fehler haben. Alle Grafik (Skins) funktionieren. Alle Konfigurationen können ohne das Plugin zu starten aufgerufen werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:16 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