Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];

Вниз

А кто мне скажет почему в Борланде такие плохие хелпописатели???   Найти похожие ветки 

 
Starkom   (2002-07-30 16:24) [0]

Извиняюсь за флейм, но накипело!!!!!!
Из хелпа к 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 16:27) [1]

Чему именно из этого не верить? :)


 
Starkom   (2002-07-30 16:34) [2]

Невзирая на то, что написано в хелпе TObjectList.Extract убивал объект хранящийся в нем, причем очень хитро - суя вместо него объект класса TComponentListNexus, не меняя никаких каунтов, ничего не двигая. Втроем искали ошибку НЕДЕЛЮ!!! Переписали заново пол-проекта, спали часа по 3-4. А решение - смена TComponentList на TList. Не пришлось менять ничего!!!


 
Виктор Щербаков   (2002-07-30 16:42) [3]

Чё то я не понимаю.
TObjectList вообще наследует этот метод у TList.
Как же он может "убивать" объект?
Будь любезен, покажи место в исходниках Borland где это происходит.


 
Digitman   (2002-07-30 16:53) [4]

Чего-чего ??? Какой еще TComponentListNexus ? Нет таких в VCL !
Где декларирован и реализован тот самый "фуфловый" TComponentList ? contnrs.pas ? Какая версия Делфи ? Где размер contnrs.pas ? Где - АРГУМЕНТЫ в виде исх.текста метода Extract () ????


 
Starkom   (2002-07-30 16:54) [5]

дело в том, что FreeNotify в TComponentList переопределен.


 
Starkom   (2002-07-30 16:57) [6]

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;


 
Извращенец   (2002-07-30 17:05) [7]


> А кто мне скажет почему в Борланде такие плохие хелпописатели???
>

А кто мне скажет, кому хочется етот хелп писать?


 
Digitman   (2002-07-30 17:07) [8]

TComponentList.FreeNotify() - нет такого метода.


 
Виктор Щербаков   (2002-07-30 17:12) [9]

to Starkom
Если нашел трабл, то поделись пожалуйста механизмом его "работы".
Мне, например, было бы очень интересно, т.к. может уберечь от ошибок или непонимания в будущем. Не очень хочется воспроизводить ситуацию и лазить отладчиком по кодам VCL.


 
Starkom   (2002-07-30 17:12) [10]

2 Digitman:
Блин, перепутал - просто Notify().
2 извращенец:
А за что им деньги платят? Я вот на лицензионно купленных Дельфях сижу.


 
Starkom   (2002-07-30 17:18) [11]

2 Виктор Щербаков - если честно, то я сам не понял, что там происходило. Иногда при Extract"е объекта из TComponentList, объект убивался, а точно на его место совался то ли некий объект класса TComponentListNexus, то ли вообще непонятно что (поэтому глюк найти не могли), по крайней мере обращение к ComponentList[i] проскакивало нормально.
Замена TComponentList на TList (наобум, вдруг повезет) привела к тому, что все заработало так, как и должно было работать. Поэтому особо разбираться не стал.


 
Извращенец   (2002-07-30 17:18) [12]


> Starkom

и ты еще уверен, что им деньги платят?! Может это директор писал, чтоб бесплатно


 
Толик   (2002-07-30 17:28) [13]

Да всё там нормально работает!!! Точно так, как и описано в хелпах и никто никого НЕ УНИЧТОЖАЕТ...

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;


 
Starkom   (2002-07-30 17:37) [14]

2 Толик, а я говорил, что это не должно работать на простом примере?


 
Внук   (2002-07-30 17:39) [15]

>>Толик © (30.07.02 17:28)
Ну вот, испортил триллер :))


 
ZZ   (2002-07-30 17:45) [16]

Starkom
Ну так ты дай пример, где это "работает"...


 
Толик   (2002-07-30 18:10) [17]

to Starkom (30.07.02 17:37)
А простые примеры тем и отличаются от сложных, что в них сразу видно что, где, как и почему происходит.
Да, в Borland"е тоже люди сидят, тоже баги допускают (ну куда же без них?), но не в этом случае.
Могу предположить одно из двух:
1. Либо этих несчастных компонентов убивает кто-то другой. (поставь в деструкторе break_point и посмотри, куда после деструктора код заведёт)
2. Либо кто-то капитально гадит в память, из-за чего и происходят подобные глюки.



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

Форум: "Основная";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.007 c
1-35337
Holodilnik
2002-07-30 12:09
2002.08.12
сортировка в TreeView


1-35305
ValeX
2002-07-29 16:04
2002.08.12
ReadFile :(((


6-35397
ОлегМ
2002-04-10 13:18
2002.08.12
WebSnap


3-35162
MsGuns
2002-07-22 11:01
2002.08.12
Функция Ditto в Delphi


4-35515
skiph
2002-06-06 05:39
2002.08.12
C и Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский