Показать сообщение отдельно
  #9  
Старый 01.06.2008, 22:22
Tovarisch Tovarisch вне форума
Прохожий
 
Регистрация: 18.03.2008
Сообщения: 33
Репутация: 10
По умолчанию

Теперь собственно все понятно. Новозник другой вопрос.
Ниже приведен код который по идее должен при нажатии на буттон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.
Ответить с цитированием