Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.035 c
8-1072283969
Alexis
2003-12-24 19:39
2004.05.02
проигрывать звуковой файл при старте


14-1081419130
cs
2004-04-08 14:12
2004.05.02
Вопрос про карманный ПК


1-1082307275
DK
2004-04-18 20:54
2004.05.02
Нужно папку запоролить. Как моно сделать


4-1078573727
Igor5
2004-03-06 14:48
2004.05.02
Как получить список всех окон Windows (включая все дочерние)


1-1081937411
FireMan_Alexey
2004-04-14 14:10
2004.05.02
Как можно расчитать смещение от начала файла до записи константы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский