Главная страница
    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.004 c
9-1180170280
@!!ex
2007-05-26 13:04
2009.05.31
Косяк с освещением.


15-1238445004
Юрий
2009-03-31 00:30
2009.05.31
С днем рождения ! 31 марта 2009 вторник


2-1240272203
truefalse
2009-04-21 04:03
2009.05.31
Прога пропала из Taskbar, но в дисп. заданий есть->куда смотреть?


2-1239890927
@!!ex
2009-04-16 18:08
2009.05.31
Является ли путь относительным?


8-1194546980
NaRuTo
2007-11-08 21:36
2009.05.31
Как нарисовать кривую в TCanvas





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