6 Stimmen

FMX: Handle von Steuerelementen

Ich arbeite mit DirectShow in Firemonkey und habe ein Problem mit der Ausgabe von Video.

iVideoWindow.Put_Owner(Panel1.Handle); 

Ich brauche den Handle von TPanel, um das Video darauf anzuzeigen. Aber FMX-Steuerlemente haben keinen Handle. Ich weiß, dass Firemonkey nicht auf traditionellen Windows basiert und FMX dies nicht bereitstellt, aber wie löse ich dieses Problem? Ich habe keine Ahnung, bitte hilf mir.

6 Stimmen

Ich würde sagen, du wirst kein Glück haben. Du könntest jedoch ein Formular als das Ziel des IVideoWindow.Owner verwenden, indem du das Handle des Formulars mit der Funktion FmxHandleToHWND umwandelst oder alternative Möglichkeiten zum Abspielen von Videodateien in Betracht ziehst, z.B. unter Wie man Videodateien in Firemonkey abspielt.

5voto

Another Prog Punkte 763

Wenn Sie ein Fensterhandle als Typ HWND (Win32 API) erhalten möchten, können Sie jetzt diese Funktion aufrufen:

WindowHandleToPlatform(form1.Handle).wnd

Fügen Sie dies in Ihre uses-Klausel ein:

uses
  FMX.Platform.Win;

Beachten Sie, dass das einfache Aufrufen von WindowHandleToPlatform(form1.Handle) nicht funktionieren wird, Sie müssen auf die .Wnd-Eigenschaft zugreifen, um das Win32-Handle zu erhalten.

Da dies eine Anwendung weniger portabel macht, ist es auch eine gute Idee, {$IFDEFMSWINDOWS} um den Code herum zu setzen, wenn Sie dies tun, und wenn Sie jemals auf MacOS portieren, müssen Sie separate Code für diese Plattform schreiben. Oder legen Sie diesen Code in eine separate Einheit, die sich nur mit MSWindows-bezogenen Dingen beschäftigt, und verwenden Sie IFDEF diese Einheit in Ihrem uses.

0 Stimmen

"Sie können diese Funktion jetzt aufrufen" - oder einfacher, die FormToHWND() Funktion.

0 Stimmen

Zusätzlich: Das wäre der Fenstergriff des Formulars, nicht des Panels, daher könnten Sie Probleme haben, die Videoausgabe dort zu positionieren, wo Sie es möchten.

2voto

Kromster Punkte 6953

FmxHandleToHWND ist jetzt als überholt markiert.

WindowHandleToPlatform wird den angegebenen FireMonkey-Handle in seinen plattformabhängigen Fenster-Handle umwandeln (in Ihrem Fall ein Windows-Handle).

0 Stimmen

Und noch einfacher gibt es die FormToHWND() Funktion speziell für Win32 HWNDs.

-1voto

kamel mohammed Punkte 1

Verwenden Sie das TImage-Steuerelement, dann können Sie Ihr Ergebnis Image1.Bitmap.Handle zuweisen. Es ist das einzige Komponente, das unter FMX ein Fenster-Handle bereitstellt.

0 Stimmen

FMX's TImage bietet kein HWND, nur TForm. Und das Bitmap.Handle ist kein HWND, noch stellt es etwas dar, was in ein HWND umgewandelt werden kann.

-2voto

Thabiso Molepo Punkte 1

Um den Griff eines Panels zu bekommen, versuchen Sie dies :

verwendet 
  FMX.Platform.Win;

var
  Handle : HWND;

begin

  Handle := TWinWindowHandle (Panel1).Wnd;

end;

0 Stimmen

Sie können ein TPanel-Objekt nicht in einen TWinWindowHandle umwandeln. Der einzige Weg, um einen gültigen TWinWindowHandle zu erhalten, besteht darin, den TForm.Handle an WindowHandleToPlatform() zu übergeben. Oder Sie können einfach FormToHWND() verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X