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 – 嵌入式应用程序滚动条不可见所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)