![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
А кто мне скажет почему в Борланде такие плохие хелпописатели???
Starkom © (2002-07-30 16:24:00)Извиняюсь за флейм, но накипело!!!!!!
Из хелпа к TComponentList - TObjectList.Extract:
Removes a specified object from the list without freeing the object.
Description
Call Extract to remove an object from the list without freeing the object itself. After an object is removed, all the objects that follow it are moved up in index position and Count is decremented.
Фуфло это все, скажу я вам, не верьте! Обидно, конечно, раньше я хелпам доверял. Теперь придется по каждой мелочи в исходниках копаться.
Толик (2002-07-30 18:10:00) [1]to Starkom (30.07.02 17:37)
А простые примеры тем и отличаются от сложных, что в них сразу видно что, где, как и почему происходит.
Да, в Borland"е тоже люди сидят, тоже баги допускают (ну куда же без них?), но не в этом случае.
Могу предположить одно из двух:
1. Либо этих несчастных компонентов убивает кто-то другой. (поставь в деструкторе break_point и посмотри, куда после деструктора код заведёт)
2. Либо кто-то капитально гадит в память, из-за чего и происходят подобные глюки.
ZZ (2002-07-30 17:45:00) [2]Starkom
Ну так ты дай пример, где это "работает"...
Внук (2002-07-30 17:39:00) [3]>>Толик © (30.07.02 17:28)
Ну вот, испортил триллер :))
Starkom (2002-07-30 17:37:00) [4]2 Толик, а я говорил, что это не должно работать на простом примере?
Толик (2002-07-30 17:28:00) [5]Да всё там нормально работает!!! Точно так, как и описано в хелпах и никто никого НЕ УНИЧТОЖАЕТ...
type
TTestClass = class(TComponent)
public
destructor Destroy(); override;
end;
destructor TTestClass.Destroy();
begin
ShowMessage("Free");
end;
procedure TForm1.Button31Click(Sender: TObject);
var
CL: TComponentList;
Test: TTestClass;
begin
CL := TComponentlist.Create();
Test := TTestClass.Create(nil);
CL.Add(Test);
CL.Extract(Test); //Ну не вызывается здесь деструктор!!!
CL.Free();
end;
Извращенец (2002-07-30 17:18:00) [6]
> Starkom
и ты еще уверен, что им деньги платят?! Может это директор писал, чтоб бесплатно
Starkom (2002-07-30 17:18:00) [7]2 Виктор Щербаков - если честно, то я сам не понял, что там происходило. Иногда при Extract"е объекта из TComponentList, объект убивался, а точно на его место совался то ли некий объект класса TComponentListNexus, то ли вообще непонятно что (поэтому глюк найти не могли), по крайней мере обращение к ComponentList[i] проскакивало нормально.
Замена TComponentList на TList (наобум, вдруг повезет) привела к тому, что все заработало так, как и должно было работать. Поэтому особо разбираться не стал.
Виктор Щербаков (2002-07-30 17:12:00) [8]to Starkom
Если нашел трабл, то поделись пожалуйста механизмом его "работы".
Мне, например, было бы очень интересно, т.к. может уберечь от ошибок или непонимания в будущем. Не очень хочется воспроизводить ситуацию и лазить отладчиком по кодам VCL.
Starkom (2002-07-30 17:12:00) [9]2 Digitman:
Блин, перепутал - просто Notify().
2 извращенец:
А за что им деньги платят? Я вот на лицензионно купленных Дельфях сижу.
Digitman (2002-07-30 17:07:00) [10]TComponentList.FreeNotify() - нет такого метода.
Извращенец (2002-07-30 17:05:00) [11]
> А кто мне скажет почему в Борланде такие плохие хелпописатели???
>
А кто мне скажет, кому хочется етот хелп писать?
Starkom (2002-07-30 16:57:00) [12]contnrs.pas - строка 202
type
TComponentListNexusEvent = procedure(Sender: TObject; AComponent: TComponent) of object;
TComponentListNexus = class(TComponent)
private
FOnFreeNotify: TComponentListNexusEvent;
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
public
property OnFreeNotify: TComponentListNexusEvent read FOnFreeNotify write FOnFreeNotify;
end;
Starkom (2002-07-30 16:54:00) [13]дело в том, что FreeNotify в TComponentList переопределен.
Digitman (2002-07-30 16:53:00) [14]Чего-чего ??? Какой еще TComponentListNexus ? Нет таких в VCL !
Где декларирован и реализован тот самый "фуфловый" TComponentList ? contnrs.pas ? Какая версия Делфи ? Где размер contnrs.pas ? Где - АРГУМЕНТЫ в виде исх.текста метода Extract () ????
Виктор Щербаков (2002-07-30 16:42:00) [15]Чё то я не понимаю.
TObjectList вообще наследует этот метод у TList.
Как же он может "убивать" объект?
Будь любезен, покажи место в исходниках Borland где это происходит.
Starkom (2002-07-30 16:34:00) [16]Невзирая на то, что написано в хелпе TObjectList.Extract убивал объект хранящийся в нем, причем очень хитро - суя вместо него объект класса TComponentListNexus, не меняя никаких каунтов, ничего не двигая. Втроем искали ошибку НЕДЕЛЮ!!! Переписали заново пол-проекта, спали часа по 3-4. А решение - смена TComponentList на TList. Не пришлось менять ничего!!!
Внук (2002-07-30 16:27:00) [17]Чему именно из этого не верить? :)