Теперь собственно все понятно. Новозник другой вопрос.
Ниже приведен код который по идее должен при нажатии на буттон1 выдавать то что хранится в ParamList1.Items[0].p[0], но выдает белеберду, собственно причина условно понятна, я создаю в ходе процедур локальные переменные, память которых отдается обратно в кучу.Такой вопрос вот есть у меня динамический список, и мне в него нужно загнать еще 1 список который не удаляется, я так понимаю только гетмем остается?.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure CreateList();
procedure SelectList(ParamName: string;ListName: Tlist;IndNum: integer);
var
Form1: TForm1;
Tfile:Text;
ParamList1,ParamList2,ParamList3,ParamList4:Tlist;
implementation
uses unit2;
{$R *.dfm}
{------------------------------------------------------------------------------}
procedure CreateList();
var
StrBuf,Str: string;
ListNum: integer;
i:integer;
begin
ListNum:=0;
AssignFile(Tfile,'Enter.txt');
reset(Tfile);
While not EOF(Tfile) do
begin
Read(Tfile,StrBuf);
for i:=1 to length(StrBuf) do
begin
if StrBuf[i]='&' then
begin
case ListNum of
0:SelectList(Str,ParamList1,i);
1:SelectList(Str,ParamList2,i);
2:SelectList(Str,ParamList3,i);
3:SelectList(Str,ParamList4,i);
end;
Str:='';
ListNum:=ListNum+1;
end
else
begin
Str:=Str+StrBuf[i];
end;
end;
end;
CloseFile(Tfile);
end;
{------------------------------------------------------------------------------}
procedure SelectList(ParamName: string;ListName: Tlist;IndNum: integer);
var
i: integer;
Pda: ^TdynArray;
Pna: TdynArray;
begin
if ListName.Count=0 then
begin
Pna.Create(1);
Pna.p[0]:=ParamName;
Pna.Add('1');
ListName.Add(@Pna);
end
else begin
for i:=0 to ListName.Count-1 do
begin
pda:=ListName.Items[i];
if pda.p[1]=ParamName then
begin
pda.Add(IntToStr(IndNum));
break;
end;
end;
Pna.Create(1);
Pna.p[0]:=ParamName;
Pna.Add(IntToStr(IndNum));
ListName.Add(@Pna);
end;
end;
{------------------------------------------------------------------------------}
procedure TForm1.FormCreate(Sender: TObject);
begin
ParamList1:=Tlist.Create;
ParamList2:=Tlist.Create;
ParamList3:=Tlist.Create;
ParamList4:=Tlist.Create;
end;
{------------------------------------------------------------------------------}
procedure TForm1.Button1Click(Sender: TObject);
var
p: ^TDynArray;
begin
CreateList;
p:=ParamList1.Items[0];
Edit1.Text:=p.p[1];
end;
end.