gpt4 book ai didi

delphi - 对齐设置为 alClient 的 TWebBrowser 在客户区域更改时不会调整大小

转载 作者:行者123 更新时间:2023-12-02 22:49:33 25 4
gpt4 key购买 nike

我有一个带有多个拆分器和面板的表单。中间是一个面板,最后设置了一个 TWebBrowser 以对齐 alClient。

过去这很有效。但是,在带有 Internet Explorer 8 的 Windows 7 上,浏览器大小无法正确调整。其他所有东西(即面板)的大小都是正确的,只是网络浏览器除外。有时,当您单击浏览器时,或者更常见的是,当您滚动时,浏览器会跳转到正确的大小。但这种情况并不是 100% 都会发生。

我正在尝试直接处理调整大小并强制控件更改大小。我似乎找不到有任何区别的方法(即 .Invalidate; .Repaint; .Update;)

TWebBrowser 是一个封装了 Internet Explorer 控件的 OLE 控件 (ActiveX)。关于如何调整大小有什么想法吗?

更新背景:

我将范围缩小到仅当我有一个子表单时才发生,我更改父表单以将其放置在另一个表单中。我的 TWebBrowser 控件位于子窗体上,每当我需要显示 HTML 文档时我都会使用它。

在我的父表单中,我有一个网格、一个拆分器和一个面板,其中网格设置为顶部对齐,面板设置为对齐客户端。我的子窗体(称为 THtmlViewer)将其父窗体设置为面板。 THtmlViewer 窗体设置为 alClient,子窗体上的 TWebBrowser 控件也设置为对齐客户端。

如果我在 THtmlViewer 表单的表单调整大小中执行任何操作,我就会遇到此问题。直接在 FormResize 中或间接使用对齐属性的任何内容。但是,如果我从父表单调用调整大小,则一切正常。

关键似乎是关闭 THtmlViewer 表单中的调整大小代码。如果我留下 OnResize 处理程序或对齐集,那么我在父级中做什么并不重要,调整大小也不会正确完成。

我仍然很困惑为什么需要这样做以及为什么我不能强制它以正确的调整大小(THtmlViewer)进行更新。

作为旁注,我还注意到 Windows 7 上的 Delphi 2007 与 IDE 中的“欢迎页面”存在完全相同的问题。

我已经解决了这个问题,方法是添加一个方法将子窗体的 OnResize 设置为 nil,然后从父窗体的 OnResize 处理程序调用我的内部 ForceResize。我仍然想从 THtmlViewer 表单中处理这一切,并接受一个让我避免这种黑客攻击的答案。

最佳答案

要在控件的容器大小发生变化时调整控件的大小,除了“仅”使用 Align 属性之外,您还有其他两个选项:

  • 使用 Anchors 属性而不使用 Align 属性,即将 Align 属性设置为 alCustom 或 alNone,然后根据需要设置 anchor 。由于“对齐”属性是设置 anchor 的简写,因此这取决于相同的对齐处理,因此可能不适用于您的情况。

  • 为 TWebBrowser 所在容器的 OnResize 事件提供处理程序,并手动将 TWebBrowser 的高度和宽度设置为容器的高度和宽度(可以选择根据您希望在容器内拥有的任何边距进行调整)。

也就是说,我没有 Windows7,所以我不能保证这不会需要更多的麻烦。

如果您的 TWebBrowser 在滚动或单击时跳转到正确的大小,则表明控件的大小正确,只是从未接收或处理消息来实际响应更改。

这可能是因为重新对齐控件试图防止不必要的重绘和递归,并且不知何故混淆了。使用 OnResize 方法可能会获得更好的结果,因为它“直接与 TWebBrowser 对话”。

Repaint“只是”Invalidate 和 Update 的简写,除非控件的 ControlStyle 中有 csOpaque,在这种情况下,绘制似乎更直接。因此,您可以尝试摆弄 TWebBrowser 和/或其所在容器的透明属性。

如果所有其他方法都失败,您可以尝试直接向 TWebBrowser 发送 WM_PAINT (或类似的)。例如,TWebBrowser 或其所在容器的 OnResize 事件中。 TWebBrowser 的 WM_Paint 处理程序调用 OleDraw,OleDraw 直接使用 ClientRect 与 ActiveX 对话,当从 OnResize 事件调用时,它应该具有正确的尺寸。

关于delphi - 对齐设置为 alClient 的 TWebBrowser 在客户区域更改时不会调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4742100/

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