Nagy nehezen egy elfogadható megoldást találtam, így kiegészítve ezt a függvényt:
procedure TForm1.j1bgbeallit(Sender: TObject);
var kiiras: array [0..1] of string;
begin
szovegmezo:=TEdit.Create(self);
szovegmezo.Parent:=self;
kiiras[0]:='Nyomj le egy gombot!';
kiiras[1]:='Press a key!';
szovegmezo.Text:=kiiras[nyelv];
szovegmezo.Left:=urh1panel.Left+urh1panel.Width+10;
szovegmezo.Top:=urh1panel.Top;
szovegmezo.Width:=urh1panel.width;
szovegmezo.OnKeyDown:=@szovmezgombbeker;
szovegmezo.SetFocus;
end;
A
szovmezgombbeker függvényben pedig kezelem a gombnyomást, plusz a legvégén van egy boolean változó (
szovmeztorles:=true;), amivel a pályafrissítés ciklusban törlöm a szövegmezőt (
FreeAndNil(szovegmezo);).
Egy a bajom: ha a TForm1.FormKeyDown-ban törlöm
FreeAndNil(urh1panel) utasítással az egész panelt, akkor valami SIGSEGV hibát okozok, ezért csak inaktívvá tenni tudom ezt:
urh1panel.visible:=false;
urh1panel.enabled:=false;
És nem tudom, hogy hogyan törölhetném inkább, mert az lenne nekem a jobbik megoldás. Ahogy az 1. hozzászólásban látható, az
urh1panel szülője a
form1, a TBitBtn-ok szülője meg az
urh1panel. Azoknak van OnClick eseményük, ami létrehozza a szövegmezőt. Ez ugye törlődik a boolean változóval a pályafrissítésben. Tehát azt nem tudom, hogy ebben a láncolatban mi hibádzik, ami miatt a hibát kapom a
FreeAndNil(urh1panel)-re?