Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Form verliert focus (dspack) (https://www.delphipraxis.net/76226-form-verliert-focus-dspack.html)

heinz_braun 31. Aug 2006 16:24


Form verliert focus (dspack)
 
Hi

ich nutze delphi 7 und habe 2 forms.
die 2. form soll mit hilfe von dspack videos abspielen. das erste viedeo wird ordentlich abgespielt, aber beim nächsten verliert die form den focus bei
Delphi-Quellcode:
form2.FilterGraph1.RenderFile(Moviefile);
der focus ist auch nicht bei der form1. wo ist der focus???


Delphi-Quellcode:
    form2.FilterGraph.Active := True;
    form2.VideoWindow.FilterGraph := form2.FilterGraph;
    form2.FilterGraph.ClearGraph;
    form2.FilterGraph.RenderFile(Moviefile);
    form2.FilterGraph.Play;
habe es schon mit Form2.setfocus probiert, hat aber nicht funktioniert.

Daniel 31. Aug 2006 16:33

Re: Form verliert focus (dspack)
 
Ich hatte einen ähnlichen Effekt. Kann es sein, dass Du über das DSPack mit DivX arbeitest und rechts unten in der Symbol-Leiste ein kleines DivX-Icon erscheint? In meinem Fall ist der Fokus dorthin gewandert.

heinz_braun 31. Aug 2006 16:43

Re: Form verliert focus (dspack)
 
ja genau
das ist mir garnicht aufgefallen, das da ein neues symbol im tray ist.
Wie hast du das gelöst???

Zacherl 31. Aug 2006 16:45

Re: Form verliert focus (dspack)
 
Guck dir mal das an:
Delphi-Quellcode:
function ForceForegroundWindow(hwnd: THandle; Delay : Integer): Boolean;
const
  SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
  SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
  ForegroundThreadID: DWORD;
  ThisThreadID: DWORD;
  timeout: DWORD;
begin
  if delay <> 0 then
    sleep(delay);

  if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE);

  if GetForegroundWindow = hwnd then Result := True
  else
  begin
    if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4)) or
      ((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
      ((Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and
      (Win32MinorVersion > 0)))) then
    begin
      Result      := False;
      ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil);
      ThisThreadID := GetWindowThreadPRocessId(hwnd, nil);
      if AttachThreadInput(ThisThreadID, ForegroundThreadID, True) then
      begin
        BringWindowToTop(hwnd);
        SetForegroundWindow(hwnd);
        AttachThreadInput(ThisThreadID, ForegroundThreadID, False);
        Result := (GetForegroundWindow = hwnd);
      end;
      if not Result then
      begin
        SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0);
        SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0),
          SPIF_SENDCHANGE);
        BringWindowToTop(hwnd);
        SetForegroundWindow(hWnd);
        SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0,
          TObject(timeout), SPIF_SENDCHANGE);
      end;
    end
    else
    begin
      BringWindowToTop(hwnd);
      SetForegroundWindow(hwnd);
    end;
    Result := (GetForegroundWindow = hwnd);
  end;
end;
Florian

heinz_braun 31. Aug 2006 17:09

Re: Form verliert focus (dspack)
 
gibt es keine einfachere möglichkeit ???
ich bin nicht so gut wie du in delphi und habe probleme den code zu verstehen.

Mazel 31. Aug 2006 17:41

Re: Form verliert focus (dspack)
 
Hi heinz_braun,

wir werden uns wohl noch des öffteren über DSPack unterhalten ;), das selbe Problem hatte ich auch, habe zwar nicht mehr 2 Formulare aber probier doch mal das, nachdem du mit RenderFile den Film abspielst:

Delphi-Quellcode:
uses
 Unit2; //der Name der Unit
...

form2.FilterGraph1.RenderFile(Moviefile);
Form2.SetFocus;
Gibt der Form den Fokus zurück.

Ist deine Form garnicht mehr zu sehen? Wenn ja dann versuch mal:

Delphi-Quellcode:
form2.FilterGraph1.RenderFile(Moviefile);
Form2.BringToFront;
Gruß
Mazel

Zacherl 31. Aug 2006 18:17

Re: Form verliert focus (dspack)
 
Also die Funktion tut nichts anderes, als ein Fenster in den Vordergrund zu zwingen. Die Funktion bindest du ganz einfach im Implementation Teil deiner Unit1.pas ein.

Um Form2 den Fokus zu geben:
Delphi-Quellcode:
ForceForegroundWindow(Form2.Handle, 0);
@Mezel:
Zitat:

habe es schon mit Form2.setfocus probiert, hat aber nicht funktioniert.
SetFocus geht also schonmal nicht es könnte sein, dass BringToFront auch nicht geht ... dann eben einfach "meine" Funktion benutzen ...

Florian

Mazel 31. Aug 2006 18:27

Re: Form verliert focus (dspack)
 
Hi,

verstehe ich nicht warum das nicht geht, bei mir gings mit dem SetFokus, habe aber später einiges an meinem Player geändert, so dass ich das nciht mehr brauchte.

Gruß
Mazel

heinz_braun 31. Aug 2006 19:10

Re: Form verliert focus (dspack)
 
danke für die vielen antworten.

das mit form2.setfocus funktioniert bei mir nicht.

die funktion von Florian Bernd funktioniert nur beim 1. mal. das heisst, das ich das fenster(form2) öffne und 2 filme abspielen lasse. danach wird das fenster invisible gesetzt und später wieder visibile und jetzt verliert die form2 wieder den focus.

grrrr

Daniel 31. Aug 2006 19:20

Re: Form verliert focus (dspack)
 
Zitat:

Zitat von heinz_braun
Wie hast du das gelöst???

Eigentlich noch gar nicht. ;-) Ich hatte noch an anderen Stellen zutun und war vorerst froh, die Video-Ausgabe prinzipiell gelöst zu haben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz