Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

работа с указателями в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.057 c
3-1078892257
garry79
2004-03-10 07:17
2004.04.11
Почему IBExpert не может показать некоторые данные в базе?


8-1071933751
Ianus
2003-12-20 18:22
2004.04.11
сравнение звуков


14-1081937022
Style
2004-04-14 14:03
2004.04.11
Как посвящают в программисты? :)


8-1071208499
fzn
2003-12-12 08:54
2004.04.11
DrawIconEx - проблемы


11-1059679855
Dimaxx
2003-07-31 23:30
2004.04.11
Владимиру Кладову...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский