Delphi – 嵌入式应用程序滚动条不可见

Delphi – 嵌入式应用程序滚动条不可见,第1张

概述基于 Embedding window into another process问题,我在我的主应用程序中嵌入了一个在主窗体上只有一个TWebBrowser组件的应用程序.即使我将它嵌入到TScrollBox组件中,当主应用程序调整大小时,滚动条也不会出现.我对这个问题做了一些研究,但没有成功.如何启用滚动条的滚动条? LE:澄清问题:应用程序A是一个带有TWebBrowser组件的简单表单.应用 基于 Embedding window into another process问题,我在我的主应用程序中嵌入了一个在主窗体上只有一个TWebbrowser组件的应用程序.即使我将它嵌入到TScrollBox组件中,当主应用程序调整大小时,滚动条也不会出现.我对这个问题做了一些研究,但没有成功.如何启用滚动条的滚动条?

LE:澄清问题:应用程序A是一个带有TWebbrowser组件的简单表单.应用程序B是主应用程序,它将应用程序A嵌入到放置在表单上的TScrollBox上,并将Align设置为alClIEnt.将A嵌入B的代码

procedure ShowAppEmbedded(WindowHandle: THandle; Container: TWinControl);var  windowstyle : Integer;  FAppThreadID: Cardinal;begin  /// Set running app window styles.  windowstyle := getwindowlong(WindowHandle,GWL_STYLE);  windowstyle := windowstyle                 - WS_CAPTION                 - WS_border                 - WS_OVERLAPPED                 - WS_THICKFRAME;  SetwindowLong(WindowHandle,GWL_STYLE,windowstyle);  /// Attach container app input thread to the running app input thread,so that  ///  the running app receives user input.  FAppThreadID := GetwindowThreadProcessID(WindowHandle,nil);  AttachThreadinput(GetCurrentThreadID,FAppThreadID,True);  /// Changing parent of the running app to our provIDed container control  windows.SetParent(WindowHandle,Container.Handle);  SendMessage(Container.Handle,WM_UPDATEUISTATE,UIS_INITIAliZE,0);  UpdateWindow(WindowHandle);  /// This prevents the parent control to redraw on the area of its child windows (the running app)  SetwindowLong(Container.Handle,getwindowlong(Container.Handle,GWL_STYLE) or WS_CliPCHILDREN);  /// Make the running app to fill all the clIEnt area of the container  SetwindowPos(WindowHandle,Container.ClIEntWIDth,Container.ClIEntHeight,SWP_NOZORDER);  SetForegrounDWindow(WindowHandle);end;

调整主应用程序(B)的大小时,不会显示来自B的TScrollBox组件的滚动条,并且应用程序A停留在它上面是从请求设置的.

解决方案:根据Kobik的评论,应用程序A嵌入到与TScrollBox内的alClIEnt对齐的TPanel内的应用程序B中.在OnPanelResize事件上运行以下代码:

if IsWindow(App_B_WindowHandle) then    SetwindowPos(App_B_WindowHandle,Panel1.WIDth,Panel1.Height,SWP_ASYNCWINDOWPOS);
解决方法 将VCL容器(例如TPanel)放入TScrollBox中.并将客户端应用程序嵌入Panel中.这样TScrollBox就能正确处理Panel.您不能简单地将嵌入式应用程序与Delphi容器对齐.您可能希望处理TPanel.OnResize以调整嵌入式应用程序的新维度(如果需要).

无论如何,正如你所知,整个想法都是痛苦的世界.

总结

以上是内存溢出为你收集整理的Delphi – 嵌入式应用程序滚动条不可见全部内容,希望文章能够帮你解决Delphi – 嵌入式应用程序滚动条不可见所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1234163.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存