![]() |
Re: Probleme mit Threads und deren übergabe (wartezeit)
Moin BassFan,
woher stammt denn VisPlgHandle in
Delphi-Quellcode:
?
function BASS_WINAMPVIS_GetAmpHwnd: DWORD; stdcall;
begin //repeat Result := VisPlgHandle; //until VisPlgHandle <> 0 end; Ist das eine Funktion, wenn ja, was macht die genau? Ist das eine Variable, wenn ja, wie wird die gefüllt? Zitat:
Delphi-Quellcode:
type
TMyType = class(TObject) private function GetIrgendeineEingenschaft: TBeispiel; procedure SetIrgendeineEigenschaft(const Value: TBeispiel); public property IrgendEineEigenschaft : TBeispiel read GetIrgendeineEingenschaft write SetIrgendeineEigenschaft; end; |
Re: Probleme mit Threads und deren übergabe (wartezeit)
Auch Moin :-D
Zitat:
Delphi-Quellcode:
?
function BASS_WINAMPVIS_GetAmpHwnd: DWORD; stdcall;
begin //repeat Result := VisPlgHandle; //until VisPlgHandle <> 0 end; Zitat:
Bitte hier ist nochmal die ganze Routine welche das API-Fenster erstellt.
Delphi-Quellcode:
Habe es kommentiert damit man etwas besseren durchblick hat.
function WinampVisWin(VisInfo: PWinampVisInfo): HWND;
var WinAtom: TAtom; wClass: TWNDCLASSEX; Msg: TMsg; AppREC: Trect; const AppClass = 'Winamp v1.x'; // Übergebe den ClassenNamen AppTitle = 'Winamp 5.2'; // Übergebe den Window Titel (Caption) begin if VisPlgHandle <> 0 then // Erstelle das VisDummy Fenster begin try UnRegisterClass(AppClass, hInst); hInst := 0; VisInfo^.Init2 := False; VisPlgHandle := 0; except Messagebox(0,'Winamp Emulations Fenster konnte nicht erstellt werden', 'Fatal Error!!', MB_ICONERROR); end; end; hInst := GetModuleHandle(nil); // Hole die Apllikations Instanz with wClass do 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; // Classe registrieren. Bei erfolg das Window erstellen 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; // Hwnd von der ausführenden Anwendung if AppParentHandle <> 0 then begin AmpHandle := 0; VisPlgHandle := Result; repeat AmpHandle := BASS_WINAMPVIS_GetAmpHwnd; until amphandle <> 0; // Den WindowRecord der Hauptanwendung in erfahrung bringen GetWindowRect(AppParentHandle, AppREC); // Das API-Fenster AppClass Winamp v1.x den Ausmaßen anpassen // wird verwendet wenn Plugin's eine Docking funktion anbieten. MoveWindow(VisPlgHandle, 0, 0, AppREC.Right - AppREC.Left, AppREC.Bottom - AppREC.Top, True); end else VisPlgHandle := Result; VisInfo^.WinHandle := VisPlgHandle; WinampVisExecute(Filename, Vismod, VismodCounter, VisPlgHandle); // ParentWindow den Plugins zuweisen VisInfo^.VisModule^.hwndParent := VisPlgHandle; // Plugin Initialisieren und ausführen VisInfo^.VisModule^.Init(VisInfo^.VisModule); // Das API-Fenster AppClass Winamp v1.x als ParentFenster in // die Hauptanwendung (AppParentHandle) verschieben SetParent(VisPlgHandle, AppParentHandle); // Das FensterHandle HWND des Plugins der Hauptanwendung // für weitere, dort ausgeführte funktionen übermitteln. Repeat PluginHandle := GetWindow(VisInfo^.VisModule^.hwndParent, GW_HWNDPREV); until PluginHandle <> 0; IsPlaying := 1; if IsPlaying > 0 then VisInfo^.Init2 := True else VisInfo^.Init2 := False; while (GetMessage(Msg, 0, 0, 0)) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; VisInfo^.Init2 := False; UnregisterClass(AppClass, 0); W_RemoveHandle(DWORD(VisInfo)); VisInfo^.VisModule^.Quit(VisInfo^.VisModule); DestroyWindow(VisInfo^.WinHandle); if (VisInfo^.Title <> nil) then StrDispose(VisInfo^.Title); FreeLibrary(VisInfo^.DllInstance); FreeMem(VisInfo); VisInfo^.WinHandle := 0; Result := 0; end; Gruß |
Re: Probleme mit Threads und deren übergabe (wartezeit)
Habe es mal so gemacht!
Delphi-Quellcode:
TAmpHwnd = class(TObject)
private function GetAmpHwnd: DWORD; stdcall; procedure SetAmpHwnd(const Value: DWORD); public property BASS_WINAMPVIS_GetAmpHwnd : DWORD read GetAmpHwnd write SetAmpHwnd; end;
Delphi-Quellcode:
Allerdings steht noch nichts in der Function und der Procedure da ich nicht sicher bin ob sie so richtig angewendet wurden.
function TAmpHwnd.GetAmpHwnd: DWORD; stdcall;
begin end; procedure TAmpHwnd.SetAmpHwnd(const Value: DWORD); begin end; Ein paar Fragen hätte ich noch. 1.Ist das Objekt TAmpHwnd in einer DLL funktionel oder gehört dieses nicht zu einer Unit ? Sorry falls die Frage dumm sein sollte. 2.Was mache ich nun mit der Public 'property BASS_WINAMPVIS_GetAmpHwnd : DWORD read GetAmpHwnd write SetAmpHwnd;' 3.Meine ausgabe funktion zur Anwendung war 'BASS_WINAMPVIS_GetAmpHwnd' Wie biege ich das nun so hin das sie wieder verwendbar ist ? 4. mit dem 'stdcall' bin ich mir auch nicht sicher! Kann es sein das diese an der Public function angehängt werden muss? macht ja bei Privat eigentlich keinen sinn da sie von dort aus nicht exportiert wird. Nachtrag: property wird doch nur abgearbeitet oder? Müßte das in meinen Fall nicht eine Function sein da sie ja einen Rückgabe wert enthalten muss zur Hauptanwendung. Gruß |
Re: Probleme mit Threads und deren übergabe (wartezeit)
Zitat:
Zitat:
Wobei dein Name der Property BASS_WINAMPVIS_GetAmpHwnd äusserst schlecht gewählt ist... Ich würd eher einfach BASS_WINAMPVIS definieren, mit den entsprechenden Getter und Setter Methoden GetBASS_WINAMPVIS und SetBASS_WINAMPVIS. Zitat:
Zitat:
|
Re: Probleme mit Threads und deren übergabe (wartezeit)
Zitat:
Delphi-Quellcode:
Nach deiner beschreibung müßte ja der von mir hinzugefügte 'stdcall' dann richtig sein.
TAmpHwnd = class(TObject)
private function GetBASS_WINAMPVIS: DWORD; stdcall; procedure SetBASS_WINAMPVIS(const Value: DWORD); public property BASS_WINAMPVIS : DWORD read GetBASS_WINAMPVIS write SetBASS_WINAMPVIS; end; function TAmpHwnd.GetBASS_WINAMPVIS: DWORD; stdcall; begin end; procedure TAmpHwnd.SetBASS_WINAMPVIS(const Value: DWORD); begin end; Könnte mir jemand mit dieser Type ein kleines Beispiel zeigen ? Abhängig von 'AmpHandle := BASS_WINAMPVIS_GetAmpHwnd;' was ja nun nicht mehr gültig ist. Noch eine Frage wie muss dann der Export aussehen ? War bisher BASS_WINAMPVIS_GetAmpHwnd Wenn ich es einmal gesehen habe weiß ich in zukunft wie das mit GET/SET in Delphi funktioniert. :wink: gruß |
Re: Probleme mit Threads und deren übergabe (wartezeit)
Solange deine Getter- und Settermethode leer sind, wird da auch nix Prikelndes passieren, weder beim Auslesen von BASS_WINAMPVIS, noch beim Schreiben.
Wenn Du die Property allerdings wirklich nur zum Lesen und Schreiben eines Wertes nutzen willst, so kannst du auch gleich auf die Getter und Setter verzichten, und stattdessen auf ein privates Feld verweisen, etwas so:
Delphi-Quellcode:
oder, weil ja eigentlich nix Spannendes passiert, einfach nur ein Feld im Public Teil deklarieren, und gut ist
type
TAmpHwnd = class(TObject) private FBASS_WINAMPVIS: dword; public property BASS_WINAMPVIS : dword read FBASS_WINAMPVIS write FBASS_WINAMPVIS ; end ;
Delphi-Quellcode:
type
TAmpHwnd = class(TObject) public BASS_WINAMPVIS : dword ; end ; |
Re: Probleme mit Threads und deren übergabe (wartezeit)
Zitat:
Bekomme wiedermal die Mitteilung trotz properties der linken seite kann nix zugewiesen werden. :( Habe FGetBASS_WINAMPVIS Privat als TAmpHwnd definiert.
Delphi-Quellcode:
wollte es so übergeben.
FGetBASS_WINAMPVIS : TAmpHwnd;
Delphi-Quellcode:
aber irgendwie kommt nichts richtig an. SCHÄM...
FGetBASS_WINAMPVIS.SetBASS_WINAMPVIS(VisPlgHandle);
Und die Privaten Propertys kann ich nicht exportieren. Das muss ich aber da ich mich in einer DLL befinde. gruß Edit: In VB ist das so einfach. Da gibt es nix mit read/write innerhalb einer Property Bnötigt keine Type oder sonst was, das ist alles.
Code:
Public Property Get FontSize() As Double
FontSize = Songlist.Font.Size End Property Public Property Let FontSize(ByVal fsize As Double) Songlist.Font.Size = fsize Set Font = Songlist.Font End Property |
Re: Probleme mit Threads und deren übergabe (wartezeit)
Zitat:
Also da sind aber nun etliche Fehler drin, in der Hinsicht warst Du jetzt sehr erfinderisch :-D
Wenn deine Property BASS_WINAMPVIS heisst, dann greif doch von aussen auch nur auf diese Propertty zu. Du hast doch ein Objekt von deiner Klasse instanziert, z.B.
Delphi-Quellcode:
Willst Du von aussen was in die Property BASS_WINAMPVIS schreiben, so ruft du halt einfach:
winamp := TAmpHwnd.create ;
Delphi-Quellcode:
oder lesen, halt mit
winamp.BASS_WINAMPVIS := 123 ;
Delphi-Quellcode:
Dadurch wird intern die SetBASS_WINAMPVIS bzw. GetBASS_WINAMPVIS aufgerufen, falls denn definiert.
showmessage (inttostr(winamp.BASS_WINAMPVIS)) ;
Und nochmal, Du wirst keine einzelnen Methoden oder Properties in einer DLL exportieren können, sondern nur global definierte Funktionen und Prozeduren, also alles Dinge die ausserhalb deiner Klasse definiert werden müssen. Lies Dir wirklich mal ein Handbuch zu diesen ganzen Klassensachen durch, denn ich hab das Gefühl, da fehlt das Basisverständnis, was überhaupt im Hintergrund passiert. |
Re: Probleme mit Threads und deren übergabe (wartezeit)
Zitat:
Kann auch nicht in einer Woche das wissen aneignen wo andere Jahre für gebraucht haben. Schreibe im normalfall ja auch mit Vb. Ich habe auch nichts erstellt wie winamp.create. Woher solle ich das auch wissen mit fast 0 Erfahrung unter Delphi Deshalb bin ich hier :wink: Die Hilfe in Delphi ist nicht gerade der beste wegbegleiter. Gut danke für deine Hilfe werd mich da irgendwie durchbeißen, letztendlich ist es nur die DLL die ich fertigstellen möchte. gruß PS: Könnte es ja mit Copie/Past versuchen denke aber dies ist nicht der richtige weg. |
Re: Probleme mit Threads und deren übergabe (wartezeit)
Hab jetzt alles versucht.
Das will nicht funktionieren. Das Handle wird einfach nicht übergeben dann wenn ich es brauche. Auch die Propertys ändern nichts da dran. Seltsames verhalten :( was soll's So kann ich den Quelltext nicht veröffentlichen. Trotzdem Danke. gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:15 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