Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.02.04;
Скачать: CL | DM;

Вниз

Gde vziat self??? Vopros skoree po Object Pascal.   Найти похожие ветки 

 
yaJohn ©   (2002-01-17 11:50) [0]

Pishetsia komponent soderjashiy TList.

TOnCompareEvent = procedure(Item1, Item2: Pointer; var Res: Integer) of object;

TMyComp = class (TComponent)
private
FOnCompare: TOnCompareEvent;
List: TList;
public
constructor Create
procedure Sort;
published
OnCompare: TOnCompareEvent read FOnCompare write FOnCompare;
...
end;

....


TMyComp.Create
begin
List:=TList.Create;
end;

A teper hotim List otsortirovat. Logichno usat" List.Sort. No ey nujna TListSortCompare = function (Item1, Item2: Pointer): Integer; prichem ona doljna bit globalnoy. A iz nee nujno vizivat OnCompare. No OnCompare priviazana k ekzempliaru TMyComp, o kotorom v globalnoy procedure i slichat ne slichali (i eto pravilno :).
Variant hranenia ssilki na TMyComp v kajdom iteme iz List ne prohodit (itemi v obshem sluchae chujie, naprimer standartnie komponenti).
I kak bit"? Gde vziat Self v globalnoy procedure???


 
Johnny Smith   (2002-01-17 13:43) [1]

Очень просто: где-нибудь в Item объявить ссылку на Self


 
yaJohn ©   (2002-01-17 14:49) [2]

2 Johnny Smith
Eshe raz: Variant hranenia ssilki na TMyComp v kajdom iteme iz List ne prohodit. Itemi sozdautsia i dobavliautsia ne mnoy.


 
vuk ©   (2002-01-17 14:56) [3]

Постройте своего наследника от TList, напишите в нем сортировку такую, как Вам нужно и не мучайтесь. Делов-то на 5 минут. :o)


 
Набережных С.   (2002-01-17 17:35) [4]

В секции implementation объявить
threadvar MyComp: TMyComp;
а List.Sort вызывать так:
procedure Sort
begin
MyComp:=self;
List.Sort(SortFunction);
end;
И еще: в TOnCompareEvent не помешает добавить Sender: TObject или типа того.


 
yaJohn ©   (2002-01-17 18:19) [5]

2 Набережных С
Vek jivi vek uchis"..... Ne znal pro threadvar. A ved" kakraz to chto nujno!!! Spasibo!


 
vuk ©   (2002-01-17 18:31) [6]

>A ved" kakraz to chto nujno!!! Spasibo!
Не совсем то (imho). Как это будет вести себя если у Вас будет несколько экземпляров? Да и мало ли что выполняется в SortFunctio...
Написание своего метода сортировки надежнее хотя бы потому, что не нужно помнить о различных переменных вне класса. Опять же imho.



 
Набережных С.   (2002-01-17 20:49) [7]

Сбой будет только в одном случае: если в обработчике OnCompare будет вызван метод Sort другого экземпляра данного класса. Вероятность невелика, но и не нулевая. Приемлимость зависит от назначения компонента - для конкретной задачи или для широких масс, но более безопасного способа получить Self в глобальной процедуре предопределенного типа(а это и спрашивалось) не существует. А переписать TList.Sort действительно не сложно,
или вообще отказаться от него, реализовав сортировку в методе
самого компонента.


 
vuk ©   (2002-01-17 21:21) [8]

>Сбой будет только в одном случае: если в обработчике OnCompare
>будет вызван метод Sort другого экземпляра данного класса
Я именно этот случай и имел в виду.

>Приемлимость зависит от назначения компонента - для конкретной
>задачи или для широких масс,
То есть себе любимому не возбраняется и свинью подложить? :o)



Страницы: 1 вся ветка

Текущий архив: 2002.02.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
3-8754
KonuhovSegey
2001-12-30 11:21
2002.02.04
Ограничения на транзакцию


4-9034
KIR
2001-12-04 00:51
2002.02.04
Как зарегистрировать свой тип файлов


1-8809
Alexsum
2002-01-17 09:59
2002.02.04
Ошибка при открытии формы.


1-8946
programmer1
2002-01-18 13:11
2002.02.04
Взаимодействие с OLE-сервером MSWORD через интерфейс сервера


1-8954
Лана Розанова
2002-01-18 12:10
2002.02.04
Программа и память.