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

Вниз

Как запретить автоудаление подчиненных объектов?   Найти похожие ветки 

 
Kolan ©   (2009-04-14 14:56) [0]

Здравствуйте!

Есть некая обертка над обычным TChart"ом,
которая управляет сериями. Точнее не сериями, а обертками над сериями.

При её создании делается примерно следующее:
function TGraphManager.CreateGraph: TMeasurmentGraph;
begin
 Result := TMeasurmentGraph.Create(FChart, GetNextColor);
 Result.OnClick := MeasurmentGraphClick;
 Result.RealPart.SetVisible(IsShowReal);
 Result.ImaginativePart.SetVisible(IsShowImaginative);
 Result.Module.SetVisible(IsShowModule);
end;


где TMeasurmentGraph.Create в итоге приводит
к созданию серии и добавлению её на чарт:
constructor TSerieGraph.Create(Chart: TChart; Color: TColor);
begin
 inherited;
 FChart := Chart;
 FSerie := CreateSerie(FChart);
 FSerie.SeriesColor := Color;
 FChart.AddSeries(FSerie);
end;


При закрытии программы все удаляется.

При удалении этой обертки разрушается и список хранящий обертки над
сериями.

При удалении вызывается унаследованный деструктор:
destructor TList.Destroy;
begin
 Clear;
end;


И перекрытый Clear;

procedure TMeasurmentGraphList.Clear;
var
 I: Integer;
begin
 for I := 0 to Count - 1 do
   Items[I].Clear;
 inherited;
end;


Строка Items[I].Clear; в конечном итоге очищает серию:
procedure TSerieGraph.Clear;
begin
 inherited;
 FSerie.Clear;
end;


При закрытии программы это приводит к AV. Я думаю, дело в том,
что серия уже разрушена компонентом-владельцем.

Если я прав, то можно ли запретить автоудаление,
работающее в недрах VCL, и как это сделать?


Если я не прав, то откуда тогда AV и что делать :) ?


 
Игорь Шевченко ©   (2009-04-14 14:59) [1]


> При закрытии программы это приводит к AV. Я думаю, дело
> в том,
> что серия уже разрушена компонентом-владельцем.


Это обнаруживается отладчиком.


> Если я прав, то можно ли запретить автоудаление,
> работающее в недрах VCL, и как это сделать?


Нельзя.


>  FSerie.Clear;


Убрать строчку не пробовал ?


 
Kolan ©   (2009-04-14 15:06) [2]


> Это обнаруживается отладчиком.

Я не могу отлидчиком, у меня нет кода TeeChart"а, а как без кода — не знаю.

>Убрать строчку не пробовал ?

Пробовал, помогает. Однако это не решение, потому что метод
Clear может вызываться не только во время закрытия программы, но и во время работы. Для очисти серий...


 
Игорь Шевченко ©   (2009-04-14 15:37) [3]


>  а как без кода — не знаю.


View|Debug Windows|CPU


> Clear может вызываться не только во время закрытия программы,
>  но и во время работы. Для очисти серий...


Переопредели класс списка, чтобы можно было для очистки серий вызвать не перекрытый у TList метод, а специальный метод который кроме очистки серий ничего не делает.


 
Kolan ©   (2009-04-14 16:27) [4]

Нет, про существование ЦПУ окна я знаю, а вот что там делать — нет.

Да, убрал перекрытие — АВ пропала. Интересно, к чему это приведет в других частях программы.


 
Игорь Шевченко ©   (2009-04-14 16:55) [5]


> Интересно, к чему это приведет в других частях программы


к другому AV


 
имя   (2009-04-15 00:35) [6]

Удалено модератором



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

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

Наверх





Память: 0.46 MB
Время: 0.005 c
15-1238352596
Б
2009-03-29 22:49
2009.05.31
Скачивать в ждущем режиме 2.


2-1240165745
daxter
2009-04-19 22:29
2009.05.31
Помогите с indy 9


15-1237785548
Б
2009-03-23 08:19
2009.05.31
Ищу 2 книжки по DirectX в Delphi.


15-1237863379
KilkennyCat
2009-03-24 05:56
2009.05.31
Агония продолжается.


15-1238413691
Галинка
2009-03-30 15:48
2009.05.31
База данных для MySQL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский