![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Оператор is [D6, Win2k]
Nazareth © (2002-08-19 12:30:00)Всем привет.
Почему оператор is выдает вызывает "access violation" в следующем
фрагменте?
if Assign(FDataCources[t]) and (TComponent(FDataCources[t]) is TChartSeries) then ...
По идее, в худшем случае он должен вернуть false?
Nazareth (2002-08-19 14:45:00) [21]Teechart 5.02?
Ученик (2002-08-19 14:30:00) [22]>Nazareth (19.08.02 14:21)
Создал TBarSeries, Источник данных Table1, Labels - имя текстового поля, Bar-Имя вещественного поля, после запуска приложения и его закрытия ошибки нет.
Nazareth (2002-08-19 14:21:00) [23]Создать серию и задать для нее DataSource (DataSet).
Ученик (2002-08-19 14:17:00) [24]>Nazareth (19.08.02 12:30)
Что нужно сделать чтобы ошибка возникла с момента File-New-Application и помещения TChart на форму ?
Nazareth (2002-08-19 14:16:00) [25]TChartSeries.RemoveAllLinkedSeries - модуль TeEngine.pas
Skier (2002-08-19 14:14:00) [26]>Nazareth
А скажи-ка вот что : в каком методе (и в каком классе) ты делаешь
эту проверку ?
Nazareth (2002-08-19 14:10:00) [27]В DataCources[t], насколько я понял, хранятся TComponent"ы. Попробовал убрать явное приведение типов - выдается ошибка "Operator not applicable to this operand type".
Fiend (2002-08-19 13:00:00) [28]Лучче так:
if (FDataCources[t]<>nil)and(TObject(FDataCources[t]) is TChartSeries) then
Я так понимаю FDataCources[t] - pointer, поэтому проверяем сначала, указывает ли он куда-то.
А ваще, смысла большого не вижу проверять на nil или Assigned.
По идее если это что то от TChart, то при удалении серии, элемента уже не должно быть в списке. Поэтому я бы просто привел к TObject и проверил его тип.
if TObject(FDataCources[t]) is TChartSeries then
Skier (2002-08-19 12:59:00) [29]>Nazareth
А что вообще заносится в список (FDataSources - TList) ?
Какие объекты и объекты ли это вообще ? Проверь...
Anatoly Podgoretsky (2002-08-19 12:55:00) [30]Nazareth (19.08.02 12:50)
Вопрос был не о FDataSources, а о FDataSources[t]
Теперь тебе осталось только действовать согласно приведенным рекомендациям и это включает отказ от приведения TComponent(FDataCources[t]) абсолютно чужеродный здесь механизм, чреватый оишибками времени исполнения.
Nazareth (2002-08-19 12:55:00) [31]Это не я а ребята, написавшие Teechart 5.02.
То есть элементы FDataSources, где-то уже были освобождены или в FDataSources вообще непонятно что?
Skier (2002-08-19 12:54:00) [32]>Nazareth
Перепиши условие так :
if Assign(FDataCources[t]) and (FDataCources[t] is TChartSeries) then ...
И проверь стоит ли у тебя в опциях компилятора
"Сокращённое вычисление логических выражений"
Digitman (2002-08-19 12:50:00) [33]>Nazareth
Что делать ?
Не допускай "мусора" в элементе массива/списка. Либо там должен быть nil (для прерывания в твоей строчке проверки сразу же на Assigned) либо - ссылка на реально существующий объект-наследник TComponent.
Уничтожение тем или иным образом в том или ином месте кода объекта, ссылка на который хранится в элементе проверяемого тобой в последствии списка/массива, должно немедленно сопровождаться либо уничтожением элемента данного списка/массива либо сбросом его в nil, дабы обеспечить корретность результата предварительной проверки на Assigned().
Nazareth (2002-08-19 12:50:00) [34]FDataSources - TList
Skier (2002-08-19 12:49:00) [35]>Nazareth
А зачем ты вообще приводишь FDataCources[t] к TComponent-у ?
Можно и так написать ... and (FDataCources[t] is TChartSeries)...если, конечно, FDataCources[t] - это объект.
Nazareth (2002-08-19 12:43:00) [36]Да, от 0 до Count - 1
Anatoly Podgoretsky (2002-08-19 12:42:00) [37]А t допустиый?
Nazareth (2002-08-19 12:37:00) [38]Что же делать?
Digitman (2002-08-19 12:35:00) [39]AV, скорей всего, ты получаешь не из-за IS. До него дело не доходит. Исключение возбуждается, видимо, при попытке явного приведения типа TComponent(FDataCources[t]), где FDataCources[t] в этот момент вообще не является объектом - "мусор" в этом элементе массива/списка
Nazareth (2002-08-19 12:31:00) [40]Конечно же Assigned :-)))