Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Получить указатель на record, находящийся в generic TList


Empleado ©   (27.06.17 15:03

Добрый день.

(Среда обитания: Delphi 10.2)
Дан тип:

 PTEST_Rec = ^TTEST_Rec;
 TTEST_Rec = packed record
   ID: Integer;
   Size: Int64;
   Buffer: Pointer;
   constructor Create(AID: Integer; ASize: Int64 = 0);
   procedure Clear;
 end;

 TTEST_Class = class(TList<TTEST_Rec>)
 private
   function GetTEST_Rec(RecID: Integer): PTEST_Rec;
 public
   property TEST_Rec[RecID: Integer]: PTEST_Rec read GetTEST_Rec;
 end;

function TTEST_Class.GetTEST_Rec(RecID: Integer): PTEST_Rec;
var i: Integer;
begin
 for i := 0 to Count - 1 do
     if RecID = Items[i].ID then begin
        Result := ...
        Break
     end
end;

Возможно ли, и каким образом получить в Result адрес структуры TTEST_Rec, находящейся в некотором Item[i] (а не копию всей записи).
Впоследствии, этот указатель будет использоваться за пределами этого класса, из программы, для прямого обращения к полям записи TTEST_Rec.

Спасибо.


Empleado ©   (27.06.17 18:08[1]

Вроде нашел.
Наряду с Items, там есть еще и свойство List, которое напрямую ссылается на FItems: arrayofT.
Через него все работает.
Спасибо.


А если так:   (01.07.17 12:26[2]

function TTEST_Class.GetTEST_Rec(RecID: Integer): PTEST_Rec;
var i: Integer;
begin
 Result := nil;
 for i := 0 to Count - 1 do
   if RecID = Items[i].ID then
     Exit(PTEST_Rec(Addr(Items[i])))
end;


Теоретически так-то   (01.07.17 18:50[3]


> А если так:   (01.07.17 12:26) [2]

оно и дожно было бы быть.
Практически пробовал?


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо