![]() |
| ||
|
|
Новости |
Поиск |
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
faiwer (2009-09-24 16:53:00) [21]
> Не переписывать столько кода нужно, а не нужно столько кода
> писать.
o_O дык я итак по минимальному пишу ;) всё равно много получается. когда хочешь сделать так чтобы пользователю было удобнее, появляется много дополнительных функций, обработчиков и прочего. зато потом куда не ткни, что не нажми, вылазиет всё по стандарту :D
Anatoly Podgoretsky (2009-09-24 16:51:00) [22]> faiwer (24.09.2009 16:49:28) [28]
Не переписывать столько кода нужно, а не нужно столько кода писать.
Сергей М. (2009-09-24 16:50:00) [23]
> стока кода переписывать
А кому сейчас легко ?)
faiwer (2009-09-24 16:49:00) [24]
Тогда все эти выкрутасы с листами и обжектлистами будут попросту нафих не нужны - все твои имиджбоксы и так уже являются элементами списка Components объекта-панели. Ну и , соотв-но, панель будет ответсвенна за автоматическое разрушение своих имиджбоксов при своем разрушении.
хм, а это идея, спс... правда стока кода переписывать... :)
Anatoly Podgoretsky (2009-09-24 16:49:00) [25]> faiwer (24.09.2009 16:35:21) [21]
> мне просто жалко 2 лишних байта
Ибудешь проклят в аду.
Сергей М. (2009-09-24 16:48:00) [26]
> faiwer
Компонент - он отродясь мужского рода)
Сергей М. (2009-09-24 16:46:00) [27]Коль уж их родителем делаешь панель, так уж сделай ее и владельцем)
Тогда все эти выкрутасы с листами и обжектлистами будут попросту нафих не нужны - все твои имиджбоксы и так уже являются элементами списка Components объекта-панели. Ну и , соотв-но, панель будет ответсвенна за автоматическое разрушение своих имиджбоксов при своем разрушении.
faiwer (2009-09-24 16:45:00) [28]Сергей М.
всё проще, когда я пишу self. мне делфи список полей и методов предлагает, а я уже там выбираю или ищу что-нибудь подходящее ;) обычно я тут же убираю self, но иногда забываю... чистить компоненту я буду когда её допишу ;)
Сергей М. (2009-09-24 16:42:00) [29]Ты зачем self-то указал в конструкторе TImageBox'а ?
На всякий случай что ли, "щоб було" ?)
Сергей М. (2009-09-24 16:40:00) [30]
> проще писать код
Ты бы лучше озаботился изучением возможностей встроенного отладчика, чем какой-то там сомнительной "простотой")
А то ведь получается, что код ты настрогал, а как он работает - нишиша не понимаешь)
Да еще и демагогию про ОЗУ, указатели и лишние байты тут разводишь)
faiwer (2009-09-24 16:35:00) [31]
Это я у тебя хотел спросить, за каким тебе понадобились дженерики в данном случае)
1 раз я таки проставил это багованое чюдо, надо потестить новые вкусности в нём )
2 проще писать код ;)
Потому что стрельба из пушки по воробьям)
спору нет ;) но хуже же всё равно не будет
Leonid Troyanovsky, так чем же плох SmallInt если он взаимодействует с Integer-ом? ) может мне просто жалко 2 лишних байта ;)
Сергей М. (2009-09-24 16:32:00) [32]
> в чём преимущества данного кода перед TObjectList<..>?
Это я у тебяхотел спросить, за каким тебе понадобились дженерики в данномслучае)
> почему он вам всем так не понравился?
Потому что стрельба из пушки по воробьям)
Leonid Troyanovsky (2009-09-24 16:32:00) [33]
> faiwer © (24.09.09 16:27) [16]
> Image1,Image2,...,Image20? нафига? мне что с ними в списке
> указателей как в 7 классе по паскалю работать? боюсь тогда
> баги я буду отлавливать до конца века...
Integer.
Integer forever.
--
Regards, LVT.
faiwer (2009-09-24 16:30:00) [34]Сергей М., хм, действительно не пахнет, а в чём преимущества данного кода перед TObjectList<..>? и почему он вам всем так не понравился? :D
Leonid Troyanovsky (2009-09-24 16:30:00) [35]
> Сергей М. © (24.09.09 16:18) [15]
> function Add(caption: string; id: smallint):
Во.. Опять smallint :)
А чего не Constructor/Destructor?
Или оное уже не модно?
--
Regards, LVT.
faiwer (2009-09-24 16:27:00) [36]
> А зачем тогда T/Object/List? И делал бы Image1..Image3
> Если уж впряг TList, то будь любезен Integer.
Image1,Image2,...,Image20? нафига? мне что с ними в списке указателей как в 7 классе по паскалю работать? боюсь тогда баги я буду отлавливать до конца века... да и вообще где вы видели простой юзерский комп. который способен загрузить 32767 рисунка 100х100 из JPG за 1-2 секунды? о_О...
[quote]Вот этой панели и достаточно, другие - пустая трата ресурсов.[/quote]
вот тут согласен. но пока для меня энто слишком сложно, там много мелочей, в том числе и дизайнерских :D
Сергей М. (2009-09-24 16:18:00) [37]
> не люблю списки из указателей
Какие нафих указатели ?)
Ими и близко даже не пахнет, ни с дженериками ни без оных.
TFotoViewer = class(..)
private
..
FItems: TObjectList;
..
protected
..
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
..
public
..
function Add(caption: string; id: smallint): boolean;
..
end;
..
procedure TFotoViewer.AfterConstruction;
begin
inherited;
FItems := TObjectList.Create;
end;
procedure TFotoViewer.BeforeDestruction;
begin
FItems.Free;
inherited;
end;
function TFotoViewer.Add(caption: string; id: smallint): boolean;
var
obj: TImageBox;
begin
obj := TImageBox.Create(nil);
with obj do
begin
..
FItems.Add(obj);
..
end;
end;
procedure TFotoViewer.SetCurIndex(Sender: TObject);
begin
..
ItemIndex:=FItems.IndexOf(Sender);
..
end;
Leonid Troyanovsky (2009-09-24 16:17:00) [38]
> faiwer © (24.09.09 15:55) [13]
> штук 30-40 не более, обычно штуки 2-3. режил на всякий пожарный
> аж smallint поставить. зачем мне integer? или я чтото не
> понимаю?
А зачем тогда T/Object/List? И делал бы Image1..Image3
Если уж впряг TList, то будь любезен Integer.
> Главный компонент это TScrollBox, на нём 1 Panel,
Вот этой панели и достаточно, другие - пустая трата ресурсов.
--
Regards, LVT.
faiwer (2009-09-24 15:55:00) [39][quote]> i: smallint;
За такое руки укорачивают.[/quote]
why? умня максимальное количество этих экземпляров будет штук 30-40 не более, обычно штуки 2-3. режил на всякий пожарный аж smallint поставить. зачем мне integer? или я чтото не понимаю?
[quote]На зачем там панель? Картинка и текст не требуют окна.
Даже TImageList хватит.[/quote]
Главный компонент это TScrollBox, на нём 1 Panel, на ней куча TImageBox (панелька на которой имейдж, и под которым лейбл - название рисунка), с равнением "слева", у скроллбокса запретен вертикальный скролл, активен только горизонтальный. Панели задаётся суммарный размер всех входящих в неё имейджбоксов, и так как она перестаёт влазить в скроллбар, на нём появляется скролл. Очень специфичный компонент, но чтобы понять зачем мне нужен именно такой компонент надо видеть ту прогу для которой я его пишу :D.
Над ним ещё работать и работать, выглядит он пока так:
http://pics.kz/s2/ae/2a/dd/e9/ae2adde99fc3149676a01f7d0c8aba93.jpg
Leonid Troyanovsky (2009-09-24 15:44:00) [40]
> faiwer © (24.09.09 14:48) [11]
> этой мой первый компонент
> i: smallint;
За такое руки укорачивают.
> TImageBox
На зачем там панель? Картинка и текст не требуют окна.
Даже TImageList хватит.
--
Regards, LVT.