Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Оператор is [D6, Win2k]


Страницы:   1 2

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 :-)))


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо