gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:34:43 24 4
gpt4 key购买 nike

基于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, GWL_STYLE, GetWindowLong(Container.Handle,GWL_STYLE) or WS_CLIPCHILDREN);
/// Make the running app to fill all the client area of the container
SetWindowPos(WindowHandle,0,0,0,Container.ClientWidth,Container.ClientHeight,SWP_NOZORDER);

SetForegroundWindow(WindowHandle);
end;

当调整主应用程序(B)的大小时,B 中的 TScrollBox 组件的滚动条不会显示,并且应用程序 A 停留在最初设置的位置。

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

  if IsWindow(App_B_WindowHandle) then
SetWindowPos(App_B_WindowHandle, 0, 0, 0, Panel1.Width, Panel1.Height, SWP_ASYNCWINDOWPOS);

最佳答案

将 VCL 容器(例如 TPanel)放入 TScrollbox 中。并将客户端应用程序嵌入面板内。这样,TScrollbox 将能够正确处理面板。您不能简单地对齐 Delphi 容器内的嵌入式应用程序。您可能需要处理TPanel.OnResize来调整嵌入式应用程序的新尺寸(如果需要)。

无论如何,正如您所知,整个想法都是一个痛苦的世界。

关于Delphi - 嵌入式应用程序滚动条不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33627383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com