-1
我想創建包含多個標籤的面板組件。我的代碼如下,並創建面板,但標籤沒有。錯誤消息是'訪問衝突地址0040452A ...讀取地址FFFFFFD0'。如何在運行時創建的面板創建組件?
rScan:=rScan+1;
// create panel
with TPanel.Create(self) do begin
Parent:=sxScan;
Name:='pnScanItem'+IntToStr(rScan);
Left:=0;
Top:=4+(rScan-1)*67;
Width:=983;
Height:=68;
Caption:='';
vHandle:=Handle;
end;
// create label
with TLabel.Create(self) do begin
Parent:=TWinControl(vHandle);
Name:='lbScanNam'+IntToStr(rScan);
Left:=11;
Top:=4;
Font.Size:=14;
Caption:='.....';
end;
作爲一個廣泛的規則,任何演員陣容都是可疑的,並且應該引起爭議。我猜你的編譯器反對原始類型不匹配的過程是將句柄強制轉換爲控件。不要這樣想。 –
我強烈懷疑,如果你沒有**使用**:你會聲明一個局部變量來引用你的新'TPanel',並且沒有問題設置你的新'TLabel'的'Parent' _correctly_。因此,幸災樂禍可以避免你的錯誤。雖然你的**並不是一個常見的**,但是事實依然存在:當**和**一起使用時,某些類型的錯誤太容易了。鑑於**和**之間存在一個乾淨而平凡的替代方案:風險遠大於收益。而且你完全可以不使用**和**。 –