Ich möchte Panel-Komponenten einschließlich mehrerer Etiketten erstellen. Mein Code ist wie folgt, und das Panel ist erstellt, aber Etiketten nicht. Die Fehlermeldung lautet 'Zugriffsverletzung bei Adresse 0040452A ... Lesen der Adresse FFFFFFD0'.Wie erstellt man eine Komponente im Runtime Created Panel?
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;
Als eine allgemeine Regel, jede Besetzung ist verdächtig und sollte dafür verantwortlich sein. Ich vermute, dass Ihr Prozess, wenn der Compiler gegen den ursprünglichen Typkonflikt verstoßen hat, das Handle als Steuerelement darstellt. Denke nicht so. –
Ich vermute stark, dass du, wenn du nicht ** mit ** benutzt hättest: du hättest eine lokale Variable deklariert, um auf dein neues 'TPanel' zu verweisen und hättest kein Problem damit, das 'Eltern' deines neuen' TLabel' _correctly_ zu setzen. Und so hätte durch glücklichen Zufall Ihr Fehler ganz vermieden werden können. Während Ihres ist kein gewöhnlicher ** mit ** - Fehler, die Tatsache bleibt: Bestimmte Arten von Fehlern sind viel zu einfach, wenn Sie ** mit ** verwenden. Da gibt es eine saubere, triviale Alternative zu ** mit **: Die Risiken überwiegen bei weitem die Vorteile. Und du würdest gut tun, um ** mit ** überhaupt nicht zu verwenden. –