如何修复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
相关产品推荐
相关产品推荐

