-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;
広範なルールとして、キャストは疑わしいものですが、原因となるはずです。私は、元の型の不一致に反対するコンパイラがハンドルをコントロールにキャストすることになっていたときのプロセスを推測します。そんなことは考えないでください。 –
私は、あなたが** with **を使っていないことを強く疑っています:新しい 'TPanel'を参照するローカル変数を宣言し、新しい' TLabel'_correctly_の 'Parent'を設定するのに問題はないでしょう。したがって、幸せな事故であなたの過ちを完全に回避することができました。あなたが**間違ったミスをしているのはあなたのものではありませんが、**の**を**と使用すると、ある種の間違いが簡単すぎます。 **と**のクリーンで些細な代替策があることを考えると、リスクは利益をはるかに上回ります。そして**を**と一緒に使用しないことはうまくいくでしょう。 –