1
私は検索して検索しましたが、例は見つかりませんでした。 PageControl
インスタンスを動的に作成し、それぞれ独自のセットオフTTabsheets
を設定したいとします。しかし私は私が得るか、DelphiのIDEからの苦情を取得していない:アドレス00000000動的にTpagecontrolインスタンスを作成する
のモジュールFormApplication.exe書き込みで
アクセス違反は、私が行方不明です何かはありますか?
procedure TForm1.FormCreate(Sender: TObject); type ABC_Status_Object = record ABC_PageControl_instance: TPageControl; quickStat_instance: TTabsheet; detailStat_instance: TTabsheet; abc_light: TShape; end; var ABC_Status: array of ABC_Status_Object; I: Integer; Frac, Icnt: Extended; begin inifile := TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini')); loadGlobalConfig; Frac := 100/NUM/100; for I := 0 to NUM do begin {// Create the Tabs: } ABC_Status[I].ABC_PageControl_instance := TPageControl.Create(self); ABC_Status[I].ABC_PageControl_instance.Parent := self; ABC_Status[I].quickStat_instance := TTabsheet.Create(ABC_Status[I].ABC_PageControl_instance); ABC_Status[I].detailStat_instance := TTabsheet.Create(ABC_Status[I].ABC_PageControl_instance); ABC_Status[I].quickStat_instance.PageControl := ABC_Status[I].ABC_PageControl_instance; ABC_Status[I].detailStat_instance.PageControl := ABC_Status[I].ABC_PageControl_instance; {// Set the attributes of each instance of PageControl, including the tabs: } ABC_Status[I].ABC_PageControl_instance.Visible := TRUE; ABC_Status[I].ABC_PageControl_instance.Top := 0; if(NUM = 1) then ABC_Status[I].ABC_PageControl_instance.Width := ClientWidth; if(NUM > 1) AND (NUM < 4) then begin Icnt := 100/(I+1)/100; ABC_Status[I].ABC_PageControl_instance.Width := Trunc(ClientWidth*Frac); ABC_Status[I].ABC_PageControl_instance.Left := 30; end; ABC_Status[I].quickStat_instance.Caption := 'Quick Status'; ABC_Status[I].quickStat_instance.Visible := TRUE; ABC_Status[I].detailStat_instance.Caption := 'Details'; ABC_Status[I].detailStat_instance.Visible := TRUE; end; end;
恐ろしい!私はそれが配列の長さを割り当てるのを逃すよりもよく分かっていたはずの何かであると思った。また、私は100/NUM/100に同意します。 –
デバッガは配列にアクセスしたコードの最初の行を特定しませんでしたか? –