我在firemonkey中使用DirectShow,输出视频时遇到问题。
iVideoWindow.Put_Owner(Panel1.Handle);
我需要一个TPanel的句柄,来显示视频。但是FMX控件没有句柄。我知道,Firemonkey不是基于传统的windows,FMX也没有提供这个,但是如何解决这个问题呢?我不知道,请帮帮我。
kb5ga3dv1#
如果要获取HWND(Win32 API)类型的窗口句柄,现在可以调用此函数:
HWND
WindowHandleToPlatform(form1.Handle).wnd
将以下内容放入uses子句中:
uses
uses FMX.Platform.Win;
请注意,只呼叫WindowHandleToPlatform(form1.Handle)是无法运作的,您必须存取其.Wnd属性以取得Win32控制代码。由于这会降低应用程序的可移植性,因此在代码中添加{$IFDEF MSWINDOWS}也是一个好主意,如果你移植到MacOS,你就必须为该平台编写单独的代码。或者,将这些代码放到一个单独的单元中,只处理与MSWindows相关的内容,然后将IFDEF放到你的uses中。
WindowHandleToPlatform(form1.Handle)
.Wnd
{$IFDEF MSWINDOWS}
IFDEF
des4xlb02#
FmxHandleToHWND现在标记为已过时。WindowHandleToPlatform会将给定的FireMonkey句柄转换为与平台相关的窗口句柄(在您的情况下为Windows句柄)。
FmxHandleToHWND
WindowHandleToPlatform
9lowa7mx3#
使用Timage控件,然后您可以将输出分配给Image1.Bitmap.Handle。它是FMX下唯一提供窗口句柄的组件
yqyhoc1h4#
要获取面板的句柄,请尝试以下操作:
uses FMX.Platform.Win; var Handle : HWND; begin Handle := TWinWindowHandle (Panel1).Wnd; end;
4条答案
按热度按时间kb5ga3dv1#
如果要获取
HWND
(Win32 API)类型的窗口句柄,现在可以调用此函数:将以下内容放入
uses
子句中:请注意,只呼叫
WindowHandleToPlatform(form1.Handle)
是无法运作的,您必须存取其.Wnd
属性以取得Win32控制代码。由于这会降低应用程序的可移植性,因此在代码中添加
{$IFDEF MSWINDOWS}
也是一个好主意,如果你移植到MacOS,你就必须为该平台编写单独的代码。或者,将这些代码放到一个单独的单元中,只处理与MSWindows相关的内容,然后将IFDEF
放到你的uses
中。des4xlb02#
FmxHandleToHWND
现在标记为已过时。WindowHandleToPlatform
会将给定的FireMonkey句柄转换为与平台相关的窗口句柄(在您的情况下为Windows句柄)。9lowa7mx3#
使用Timage控件,然后您可以将输出分配给Image1.Bitmap.Handle。它是FMX下唯一提供窗口句柄的组件
yqyhoc1h4#
要获取面板的句柄,请尝试以下操作: