【发布时间】:2015-02-01 11:38:45
【问题描述】:
我发现 Delphi 5 和 Delphi XE6 之间存在another 回归。
我有一个TPanel,其内容本身设置为AutoSize(面板为绿色):
当TPanel 包含任何其他控件时,例如TListView,面板将自动调整大小为包含的列表视图的大小:
但是当包含的控件是TWebBrowser(或替换TEmbeddedWB)时,面板不会自动调整大小:
一定是 TWebBrowser 的错
TWebBrowser VCL 包装器出错时,必须有一些自动调整大小的 VCL 管道。我需要知道 XE6 中的问题及其修复方法。
User user1611655 had a good workaround:
我遇到了类似的问题。
通过在
TWebBrowser“下方”放置一个TPanel并将网络浏览器与alClient对齐来解决此问题。
我对解决方法不太感兴趣,作为一个修复 - 我可以将它添加到我们的其他 VCL 源修复堆中。实际上,由于我使用了大大改进的TEmbeddedWB 控件,因此可以将修复程序放在那里;离开 TWebBrowser 破碎。
复制步骤
Form1.pas:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.ExtCtrls, Vcl.OleCtrls, SHDocVw;
type
TForm1 = class(TForm)
Panel1: TPanel;
WebBrowser1: TWebBrowser;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.
Form1.dfm:
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 248
ClientWidth = 373
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Panel1: TPanel
Left = 32
Top = 32
Width = 209
Height = 97
AutoSize = True
BevelOuter = bvNone
Color = clLime
ParentBackground = False
TabOrder = 0
object WebBrowser1: TWebBrowser
Left = 0
Top = 0
Width = 190
Height = 161
ParentShowHint = False
ShowHint = False
TabOrder = 0
ControlData = {
4C00000023260000E40500000000000000000000000000000000000000000000
000000004C000000000000000000000001000000E0D057007335CF11AE690800
2B2E126208000000000000004C0000000114020000000000C000000000000046
8000000000000000000000000000000000000000000000000000000000000000
00000000000000000100000000000000000000000000000000000000}
end
end
end
【问题讨论】:
-
必须与您在放置 Web 浏览器时绘制框的方式相同,无论您制作的框尺寸如何,它仍然可以按照自己的意愿缩放。
-
这与面板计算 Web 浏览器控件大小的方式有关。如果您将 TWebBrowser 放在面板上,然后使用键盘增加其尺寸,然后在对象检查器中关闭并重新打开面板的 AutoSize 属性,面板将自行调整到适当的大小。
-
我认为它必须由
TWebBrowser的创建驱动。具体来说,覆盖默认值并重置自身。一旦它在那里似乎就不会发生,除了我仍然看到奇怪的行为。我认为控件会自动加载两次,第二次忽略您第一次可能指示它的任何内容(例如,位置/大小属性)。如果我在那里的某个地方找到像Application.ProcessMessages;这样的东西,我不会感到惊讶...... :-) -
再一次,转发Windows消息可能只是简单的失败......
-
通常我会设置
WebBrowser1.Align := alClient。我改为更新Panel1的大小。
标签: delphi delphi-xe6 twebbrowser