Главная страница
    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.034 c
9-1069057084
knstantun
2003-11-17 11:18
2004.05.02
-как работать с dfx в delphi?


14-1081878366
Ig
2004-04-13 21:46
2004.05.02
Создание компонент в Delphi !?


3-1081260725
Alexey
2004-04-06 18:12
2004.05.02
Identity в базе SQLServer


3-1080886281
Blick
2004-04-02 10:11
2004.05.02
Проблемы кодировки в БД


9-1069533365
MrAngel
2003-11-22 23:36
2004.05.02
Ги - опять glVertexPointerEXT ;-)





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