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


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.


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

Наверх

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