![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Экземпляр класса
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)