Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизДинамический массив в компоненте... Найти похожие ветки
← →
Knight © (2004-04-15 20:33) [0]Поясните такой момент... есть компонент, в него входит динамический массив (например, FItems) из записей (TItem=record...), есть свойство:
- property ItemIndex:Integer read FItemIndex write SetItemIndex;
который отображает и устанавливает номер текущего элемента массива.
Вопрос: как сделать свойство, которое дало доступ к полям текущей записи из массива без открытия всего массива:
- вместо FItems[N].A, просто Item.A
понимаю, что тут без поинтеров не обойтись... но как?
← →
VMcL © (2004-04-15 20:42) [1]>>Knight © (15.04.04 20:33)
property CurrentItem: TItem read GetCurrentItem;
fuinction Txx.GetCurrentItem: TItem;
begin
// тут проверки для FItemIndex
// ...
Result := FItems[FItemIndex];
end;
← →
Mim1 (2004-04-15 20:51) [2]Например TList для хранения ссылок на обьекты использует динамический массив.
protected
function Get(Index: Integer): Pointer;
procedure Put(Index: Integer; Item: Pointer);
...
public
property Items[Index: Integer]: Pointer read Get write Put; default;
...
---------------------
function TList.Get(Index: Integer): Pointer;
begin
if (Index < 0) or (Index >= FCount) then
Error(@SListIndexError, Index);
Result := FList^[Index];
end;
procedure TList.Put(Index: Integer; Item: Pointer);
var
Temp: Pointer;
begin
if (Index < 0) or (Index >= FCount) then
Error(@SListIndexError, Index);
if Item <> FList^[Index] then
begin
Temp := FList^[Index];
FList^[Index] := Item;
if Temp <> nil then
Notify(Temp, lnDeleted);
if Item <> nil then
Notify(Item, lnAdded);
end;
end;
← →
Knight © (2004-04-15 21:43) [3]Звиняйте, хлопцы... Немного не полностью написал... имелось в виду, свойство которое даёт доступ к любому полю текущей записи и на чтение, и на запись с внесением изменений в FItems[ItemIndex] через процедуру в write...
Наверно это не реально без создания серии свойств, каждое из которых отвечает за своё поле текущей записи.
← →
Knight © (2004-04-15 23:56) [4]Придётся переделать, заменив record на class... тогда должно пойти.
← →
Rouse_ © (2004-04-16 00:18) [5]> заменив record на class
тогда уж TCollection используй, а то понаворочаешь еще :)
← →
Knight © (2004-04-16 01:42) [6]
> [5] Rouse_ © (16.04.04 00:18)
> > заменив record на class
> тогда уж TCollection используй, а то понаворочаешь еще :)
Чего-чего, а понаворочать это мы могём :)
А про TCollection... надо посмотреть
← →
Rouse_ © (2004-04-16 09:27) [7]Вот тут про них хорошо описано:
http://www.delphikingdom.com/helloworld/tcollection.htm
← →
Knight © (2004-04-16 09:38) [8]
> Rouse_ © (16.04.04 09:27) [7]
Спасибо за ссылку... уже читаю %)
← →
Knight © (2004-04-16 10:31) [9]В принципе тоже самое, что и у меня, но только более развитое, да ещё и с редактором свойств в design-time :)
Надо подумать... то-ли пойти по более продолжительному пути доделки своего, но при этом разобраться в некоторых вопросах, то ли по более быстрому, где уже всё за меня реализовали и осталось только это использовать... вопрос, однако... знание или время :-?
← →
Mim1 (2004-04-16 14:45) [10]Я конечна колекшен уважаю :).
Но резуотат будет сравним с примведенным мной примером.
То есть
будет работать как с (myclass+record) так и с (collection+collectionitem)
myobj[10].name := "alpha";
myobj[10].id := 10;
Тем не менее у клекций симпатичный способ сохранения в dfm и много других вкуснойстей, которые могут и не пригадится, а може именно они вам и нужны.
PS сохранение в dfm можно реаизовать и у myclass если пронаследовать от tpersistent.
← →
Knight © (2004-04-16 23:37) [11]>> [10] Mim1 (16.04.04 14:45)
Мне главное было пропустить все изменения полей записи через свои процедуры без создания вороха свойств на каждое поле, для контроля и перирисовки соответствующего элемента в TPaintBox, который принадлежит компоненту на основе ТScrollBox. И коллекции мне очень даже понравились, тем более, что код у меня пошёл именно в этом направлении, даже функции аналогичные сделал, хотя design-time это излишне, но пусть будет... вдруг понадобится... а оно раз и есть :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.031 c