Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Экземпляр класса


Страницы:   1 2 3

faiwer ©   (2009-09-24 11:48:00) 

[code]function TFotoViewer.Add(caption: string; id: smallint): boolean;
var im: TImageBox;
begin
im:=TImageBox.Create(self);
im.Parent:=panel;
im.Caption:=caption;
im.OnClick:=SetCurIndex;
im.OnDblClick:=self.OnDblClick;
im.Left:=panel.Width+1;
Items.Add(im);
if self.Showing then ItemIndex:=Items.Count-1;
end;[/code]

где Items это Items: TList<TImageBox>; а TImageBox это компонент на основе панели, рисунка и метки. собственно вопрос, а что происходит с Im после окончания процедуры Add? и вообще такой код нормальный с точки зрения распределения памяти? TList при Destroy-е сам удаляет все своим Items которые TImageBox, а вот что из себя представляет Im я не понимаю. Это указатель на размещение экземпляра на в ОЗУ? в общем такой код оптимален или мне надо его переделывать?

P.S.CodeGear 2009


Amoeba   (2009-09-25 15:05:00) [1]


> но не уверен что они съедобные

Если для японцев - то съедобные. А для прочих народов - не факт.


faiwer   (2009-09-25 11:11:00) [2]

Я тоже. но не уверен что они съедобные ) мало ли что с ними Японцы вытворяли ;)


Омлет   (2009-09-25 10:54:00) [3]

> http://pics.kz/s5/57/fa/fe/d4/57fafed4b55c70c6f0ec29fafb845980.jpg

О супер! Хочу квадратный арбуз! )))


Сергей М.   (2009-09-25 10:36:00) [4]


> туплю


И давно. И безнадежно.


faiwer   (2009-09-25 10:34:00) [5]

та я туплю, метода действительно нету но у TObjectList<> а не у TObjectList. В примере забыл <> указать ;)


MBo   (2009-09-25 10:20:00) [6]

>a.Exchange( <= ошибко компилятора
ты что-то путаешь. У TObjectList этот метод есть.


Сергей М.   (2009-09-25 10:20:00) [7]

Цитаты из исходников Д7:

classes.pas:

TList = class(TObject)
...
  public
...
   procedure Exchange(Index1, Index2: Integer);
...
end;


contnrs.pas:


TObjectList = class( TList)
..
end;


Внимательно смотри на выделенное жирным.
Найди соотв.декларации у себя в исх-ках Д2009 и сравни с приведенными.
Если они аналогичны - убей себя об стену.
Если иные - убей свой Д2009, а потом сам убейсо.


faiwer   (2009-09-25 10:05:00) [8]

По сабжу ;) Компонент закончил. Выглядит это примерно так: http://pics.kz/s5/57/fa/fe/d4/57fafed4b55c70c6f0ec29fafb845980.jpg

думаю тему можно закрывать ;) (пс весь текст рыба)


faiwer   (2009-09-25 10:02:00) [9]

var
a: TObjectList ;

begin
a.Exchange( <= ошибко компилятора... не знаю таких методов. вах вах, а шо такое? умные книжки по ООП и насоедование читать надо! даааа )

:D


Сергей М.   (2009-09-25 09:37:00) [10]


> такой метод есть только в обычном TList


А TObjectList, значит, не имеет ни малейшего отношения к TList ?

Иди-ка ты, писатель, книжки умные читать про ООП и наследование)


faiwer   (2009-09-25 09:26:00) [11]


> Прежде чем лепить код, справку надо читать. До просветления.
>  Или до посинения. Кому как)
> Там черным по-нерусски написано про метод Exchange.

такой метод есть только в обычном TList ;) так что мой еврейский метод сказал дальше жить


Сергей М.   (2009-09-25 08:35:00) [12]


> Если отключить OwnsObjects, то объект при переназначении
> \ удалении не уничтожается


Сказка про белого бычка.
Нафига, спрашивается, отключать OwnsObjects, если в этой функциональности и есть ключевой смысл использования TObjectList ?)


> есть идеи как это можно реализовать?


Прежде чем лепить код, справку надо читать. До просветления. Или до посинения. Кому как)
Там черным по-нерусски написано про метод Exchange.


faiwer   (2009-09-25 01:12:00) [13]

function TFotoViewer.Swap(item1: SmallInt; item2: SmallInt): boolean;
var
temp: TImageBox;
lnum: smallint;
begin
result:=false;
if (item1<0) or (item2<0) or (item1>items.Count-1) or (item2>items.Count-1)
 then Exit;

items.OwnsObjects:=false;
 if ItemIndex=item1 then FItemIndex:=item2 else
  if ItemIndex=item2 then FItemIndex:=item1;

 lnum:=Items[item1].Left;
 Items[item1].Left:=Items[item2].Left;
 Items[item2].Left:=lnum;

 temp:=Items[item1];
 Items[item1]:=Items[item2];
 Items[item2]:=temp;

items.OwnsObjects:=true;
result:=true;
end;


Всё оказалось проще. Если отключить OwnsObjects, то объект при переназначении \ удалении не уничтожается, что позволяет его нам перехватить ;)


Омлет   (2009-09-24 20:00:00) [14]

> есть идеи как это можно реализовать?

Не использовать дженерики.


faiwer   (2009-09-24 19:56:00) [15]

в общем решил остаться с TObjectList<>, хуже от этого не будет, займусь более полезными на данный момент вещами. по работе с этим компонентом осталось только сделать метод Swap(item1,item2: smallint);
вот только любые попытки сделать чтото вроде этого:
c:=Items[item1];
items[item1]:=items[item2];
items[item2]:=c;

да и вообще любая попытка items[x]:= убивает компонент, которые был в ней прописан...
есть идеи как это можно реализовать? )


Leonid Troyanovsky   (2009-09-24 19:28:00) [16]


> faiwer ©   (24.09.09 19:15) [34]

> опыт с канвой, передумал. она дико глючная, и может без
> причины перестать рисовать...

Cын ошибок трудных.

--
Regards, LVT.


Омлет   (2009-09-24 19:25:00) [17]

> faiwer ©   (24.09.09 19:15) [34]

А на чем TImage рисует по-твоему?


faiwer   (2009-09-24 19:15:00) [18]

Омлет дык я хотел просто на канве, но вспомнил свой предыдущий опыт с канвой, передумал. она дико глючная, и может без причины перестать рисовать...


Омлет   (2009-09-24 19:00:00) [19]

Похоже все так начинают - с кучи Image'ов.

> да и вообще где вы видели простой юзерский комп. который способен загрузить 32767 рисунка 100х100 из JPG за 1-2 секунды? о_О...

TImage в количестве 32767 - не дай бог такое приснится... А если каждый на отдельной панельке да еще и с лейблом, можно вообще не проснуться.


Сергей М.   (2009-09-24 16:55:00) [20]


> зато потом куда не ткни, что не нажми, вылазиет всё по стандарту


Угу.
"Стандарные" грабли - AV)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо