AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Probleme mit Threads und deren übergabe (wartezeit)
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Threads und deren übergabe (wartezeit)

Ein Thema von BassFan · begonnen am 20. Jul 2006 · letzter Beitrag vom 21. Jul 2006
 
BassFan
(Gast)

n/a Beiträge
 
#12

Re: Probleme mit Threads und deren übergabe (wartezeit)

  Alt 20. Jul 2006, 20:51
Auch Moin

Zitat:
woher stammt denn

VisPlgHandle

in
Delphi-Quellcode:
function BASS_WINAMPVIS_GetAmpHwnd: DWORD; stdcall;

begin
    //repeat
    Result := VisPlgHandle;
    //until VisPlgHandle <> 0
end;
?

Zitat:
Ist das eine Funktion, wenn ja, was macht die genau?
Ist das eine Variable, wenn ja, wie wird die gefüllt?
VisPlgHandle ist das HWND der APPClass 'Winamp v1.x'

Bitte hier ist nochmal die ganze Routine welche das API-Fenster erstellt.

Delphi-Quellcode:
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;
Habe es kommentiert damit man etwas besseren durchblick hat.

Gruß
  Mit Zitat antworten Zitat
 


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 04:35 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