You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Delphi浏览器代码中“无法赋值给只读属性”错误?

Delphi动态创建TWebBrowser时"Cannot assign to a read-only property"错误解决

错误原因

触发错误的代码行wb2.Parent := NewSheet,核心原因是TWebBrowser继承自TOleControl,而TOleControl的Parent属性为只读属性,不允许直接赋值。

解决方案

提供两种可行的修复方式:

方式一:使用Win32 API的SetParent函数

直接调用系统API设置控件的父窗口,替换原有的Parent赋值行:

SetParent(wb2.Handle, NewSheet.Handle);

注:代码已引入Windows单元,无需额外添加。

方式二:创建时指定正确的Owner并利用Align属性关联

创建TWebBrowser时将NewSheet作为Owner传入,随后设置Align属性为alClient,控件会自动依附到父容器上,无需手动赋值Parent:

wb2 := TWebBrowser.Create(NewSheet);
wb2.Align := alClient;

完整修正代码

以下是采用方式二的完整可运行代码,同时移除了全局变量与局部变量重名的问题:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, ComCtrls, StdCtrls, ExtCtrls, Menus;

type
  TForm1 = class(TForm)
    pgc1: TPageControl;
    ts1: TTabSheet;
    wb1: TWebBrowser;
    btn5: TButton;
    procedure btn5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.btn5Click(Sender: TObject);
var
  NewSheet: TTabSheet;
  wb2: TWebBrowser;
begin
  NewSheet := TTabSheet.Create(pgc1);
  NewSheet.PageControl := pgc1;
  NewSheet.Caption := 'New tab';

  wb2 := TWebBrowser.Create(NewSheet);
  wb2.Align := alClient;
  wb2.Navigate('http://www.google.com');
end;

end.

内容的提问来源于stack exchange,提问作者AdiXaK Youtube

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:02:31