Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

работа с указателями в TList   Найти похожие ветки 

 
ivanenko ©   (2004-03-22 17:25) [0]

Прошу помочь: проблема с указателямив TList:

Есть структура

type
 TListOfData = class(TPersistent)
 private
    FSeriesName : string[20];
    FSeries : TList;
 end;
 PListOfData = ^TListOfData;

Далее есть список:

 FListOfSeries : TList;

Процедура добавления TListOfData в список:

procedure TForm1.btnAddSeriesClick(Sender: TObject);
var iSeriesModalResult : Integer;
   ASeries : PListOfData;
begin
 vrSeriesEditor := TfrmSeriesEditor.Create(Application);
 try
   iSeriesModalResult := vrSeriesEditor.ShowModal;
   IF iSeriesModalResult=mrOK Then begin
      New(ASeries);
      ASeries^.FSeriesName := мкSeriesEditor.ledSeriesName.Text;
      FListOfSeries.Add(ASeries);
   end;
 finally
   vrSeriesEditor.Free;
 end;
end;

И, наконец, процедура чтения из списка:
procedure TForm1.ReadSeries;
var I : Integer;
   Title : string[20];
   ASeries : PListOfData;
begin
 lstSeries.Clear;
 IF FListOfSeries.Count>0 Then
    For I:=0 To FListOfSeries.Count-1 Do begin
       ASeries := FListOfSeries.Items[i];
       Title := ASeries^.FSeriesName;
       ShowMessage(Title);
    end;
end;
 
Вопрос: при чтении списка вместо Title сплошной мусор. Что я делаю не так?


 
Ega23 ©   (2004-03-22 17:36) [1]

Разницу между record и class знаешь? Рекомендую сначала книжки почитать.


 
Тимохов ©   (2004-03-22 17:39) [2]

варианта решения два
либо tlistofdata сделать record, либо не пользоватся new, а вызывать конструктор.

т.е. я говорю, то же самое, что 1.


 
Плохиш   (2004-03-22 17:40) [3]



> PListOfData = ^TListOfData;

Убрать

2.

>       New(ASeries);

Заменить на
ASeries := TListOfData.Create;

3. Все ^ убрать


 
Юрий Зотов ©   (2004-03-22 17:41) [4]

1. PListOfData - выбросьте. Объект - это УЖЕ и так указатель.
2. При записи объект надо создавать. Сам по себе он не возникнет.
3. При чтении надо просто привести тип.

Процедура добавления TListOfData в список:

procedure TForm1.btnAddSeriesClick(Sender: TObject);
var
 ASeries: TListOfData;
begin
with TfrmSeriesEditor.Create(nil) do
try
  if ShowModal = mrOK then
  begin
    ASeries := TListOfData.Create;
    ASeries.FSeriesName := ledSeriesName.Text;
    FListOfSeries.Add(ASeries)
  end
finally
  Free
end
end;

И, наконец, процедура чтения из списка:

procedure TForm1.ReadSeries;
var
 I: Integer;
begin
 for I := 0 to FListOfSeries.Count - 1 do
   ShowMessage(TListOfData(FListOfSeries[i]).FSeriesName)
end;


 
ivanenko ©   (2004-03-22 17:44) [5]

Я привел не весь код (чтобы не морочить всем голову). Так вот, перед вызовом btnAddSeriesClick у меня вызывается конструктор:
NewSeries := TListOfData.Create
Как я понимаю, процедура New выделяет память под указатель?


 
Плохиш   (2004-03-22 17:45) [6]

Короче вторая часть [1]


 
Тимохов ©   (2004-03-22 17:47) [7]


> ivanenko ©   (22.03.04 17:44) [5]

слушайте Юрия Зотова.
зачем делать что-то лишнее? :)))))
а, ну да, вторая часть 1 очень даже актуальна.


 
Digitman ©   (2004-03-22 17:50) [8]


> Как я понимаю, процедура New выделяет память под указатель?


видимо, неправильно понимаешь

процедура New() выделяет память под структуру того типа, который декларирован в описании переменной, являющейся факт.параметром процедуры New() .. результат успешной работы процедуры New() - запись адреса выделенного блока памяти в ту переменную, которая была указана как факт.параметр проц-ры


 
ivanenko ©   (2004-03-22 17:54) [9]

Всем спасибо.
>Юрий Зотов ©   (22.03.04 17:41) [4]
Отдельная благодарность.


 
Юрий Зотов ©   (2004-03-22 18:04) [10]

Кстати, рекомендую использовать не TList, а TObjectList. Проще будет. Подробности - в справке.



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
8-1071198758
Japan
2003-12-12 06:12
2004.04.11
Рисование на рабочем столе


1-1082457655
pvb87
2004-04-20 14:40
2004.04.11
Delphi 8


7-1079620750
Falendysh
2004-03-18 17:39
2004.04.11
OLE Container проблема


1-1080211799
YuRock
2004-03-25 13:49
2004.04.11
Командная разработка программ


14-1079443992
race1
2004-03-16 16:33
2004.04.11
best chess