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

Вниз

Оператор is   Найти похожие ветки 

 
Nazareth   (2002-08-19 12:30) [0]

Всем привет.
Почему оператор is выдает вызывает "access violation" в следующем
фрагменте?
if Assign(FDataCources[t]) and (TComponent(FDataCources[t]) is TChartSeries) then ...
По идее, в худшем случае он должен вернуть false?


 
Nazareth   (2002-08-19 12:31) [1]

Конечно же Assigned :-)))


 
Digitman   (2002-08-19 12:35) [2]

AV, скорей всего, ты получаешь не из-за IS. До него дело не доходит. Исключение возбуждается, видимо, при попытке явного приведения типа TComponent(FDataCources[t]), где FDataCources[t] в этот момент вообще не является объектом - "мусор" в этом элементе массива/списка


 
Nazareth   (2002-08-19 12:37) [3]

Что же делать?


 
Anatoly Podgoretsky   (2002-08-19 12:42) [4]

А t допустиый?


 
Nazareth   (2002-08-19 12:43) [5]

Да, от 0 до Count - 1


 
Skier   (2002-08-19 12:49) [6]

>Nazareth
А зачем ты вообще приводишь FDataCources[t] к TComponent-у ?
Можно и так написать ... and (FDataCources[t] is TChartSeries)...если, конечно, FDataCources[t] - это объект.


 
Nazareth   (2002-08-19 12:50) [7]

FDataSources - TList


 
Digitman   (2002-08-19 12:50) [8]

>Nazareth

Что делать ?
Не допускай "мусора" в элементе массива/списка. Либо там должен быть nil (для прерывания в твоей строчке проверки сразу же на Assigned) либо - ссылка на реально существующий объект-наследник TComponent.
Уничтожение тем или иным образом в том или ином месте кода объекта, ссылка на который хранится в элементе проверяемого тобой в последствии списка/массива, должно немедленно сопровождаться либо уничтожением элемента данного списка/массива либо сбросом его в nil, дабы обеспечить корретность результата предварительной проверки на Assigned().


 
Skier   (2002-08-19 12:54) [9]

>Nazareth
Перепиши условие так :

if Assign(FDataCources[t]) and (FDataCources[t] is TChartSeries) then ...

И проверь стоит ли у тебя в опциях компилятора
"Сокращённое вычисление логических выражений"




 
Nazareth   (2002-08-19 12:55) [10]

Это не я а ребята, написавшие Teechart 5.02.
То есть элементы FDataSources, где-то уже были освобождены или в FDataSources вообще непонятно что?


 
Anatoly Podgoretsky   (2002-08-19 12:55) [11]

Nazareth (19.08.02 12:50)
Вопрос был не о FDataSources, а о FDataSources[t]
Теперь тебе осталось только действовать согласно приведенным рекомендациям и это включает отказ от приведения TComponent(FDataCources[t]) абсолютно чужеродный здесь механизм, чреватый оишибками времени исполнения.


 
Skier   (2002-08-19 12:59) [12]

>Nazareth
А что вообще заносится в список (FDataSources - TList) ?
Какие объекты и объекты ли это вообще ? Проверь...


 
Fiend   (2002-08-19 13:00) [13]

Лучче так:
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


 
Nazareth   (2002-08-19 14:10) [14]

В DataCources[t], насколько я понял, хранятся TComponent"ы. Попробовал убрать явное приведение типов - выдается ошибка "Operator not applicable to this operand type".


 
Skier   (2002-08-19 14:14) [15]

>Nazareth
А скажи-ка вот что : в каком методе (и в каком классе) ты делаешь
эту проверку ?


 
Nazareth   (2002-08-19 14:16) [16]

TChartSeries.RemoveAllLinkedSeries - модуль TeEngine.pas


 
Ученик   (2002-08-19 14:17) [17]

>Nazareth (19.08.02 12:30)
Что нужно сделать чтобы ошибка возникла с момента File-New-Application и помещения TChart на форму ?


 
Nazareth   (2002-08-19 14:21) [18]

Создать серию и задать для нее DataSource (DataSet).


 
Ученик   (2002-08-19 14:30) [19]

>Nazareth (19.08.02 14:21)
Создал TBarSeries, Источник данных Table1, Labels - имя текстового поля, Bar-Имя вещественного поля, после запуска приложения и его закрытия ошибки нет.


 
Nazareth   (2002-08-19 14:45) [20]

Teechart 5.02?


 
Ученик   (2002-08-19 14:47) [21]

>Nazareth (19.08.02 14:45)
5.01


 
Nazareth   (2002-08-19 14:54) [22]

Не подилишься? А то долго разбираться, а времени в обрез.


 
Ученик   (2002-08-19 14:58) [23]

>Nazareth (19.08.02 14:45)
C 5.02 тоже все нормально, попробовал


 
Nazareth   (2002-08-19 15:00) [24]

Delphi 6? Interbase 6.0?


 
Ученик   (2002-08-19 15:01) [25]

Delphi 6.0

Table1-DBF


 
Ученик   (2002-08-19 15:10) [26]

C Interbase Express тоже все нормально, пробуешь на пустом проекте или в своем ?


 
Nazareth   (2002-08-19 15:16) [27]

Создал простенький запрос к той же базе - вроде работает. Где копать?


 
Ученик   (2002-08-19 15:21) [28]

Чем простенький отличается от нерабочего ? может DataSource в других формах, после Application.Run в файле проекта попробуй принудительно "убить" форму с TDBChart


 
Nazareth   (2002-08-19 15:34) [29]

Сделал точно такой же запрос, правда в другом проекте, - работает. И запрос - статический.


 
Nazareth   (2002-08-19 16:17) [30]

> Ученик
Работает пока одна серия. Пробовал, если больше?
Если не тяжело, вышли мне 5.01 на abc2003@tut.by.


 
Ученик   (2002-08-19 16:34) [31]

>Nazareth (19.08.02 16:17)
Напиши какой вариант не работает.

P.S.Проверь почту


 
Nazareth   (2002-08-19 16:50) [32]

Если серии имеют случайный источник данных, то серий могу добавлять сколько угодно. Но если источник - бд, то одна серия - все нормально. Как только ставлю DataSet для любой
второй серии - Access violation.


 
Nazareth   (2002-08-19 17:52) [33]

>Ученик
Спасибо за 5.01
Но как его поставить? Требует vcl60.


 
Ученик   (2002-08-19 17:54) [34]

На какой версии Delphi ? Какая библиотека ?


 
Nazareth   (2002-08-19 17:58) [35]

Delphi 6. Пытаюсь откомпилировать te56.dpk - пишет, что vcl60 not found


 
Ученик   (2002-08-19 18:03) [36]

Странно, исправь на vcl


 
Nazareth   (2002-08-19 18:23) [37]

vcl поменял - нормально. Затык на vclbde.dcu


 
Ученик   (2002-08-19 18:35) [38]

Что то как то сложно идет, наверно, этого делать не надо, с 5.02
все работает, сколько угодно DataSet-ов, проблема в чем то другом, на простом примере после добавления двух TBarSeries, что делаешь, какие свойства устанавливаешь ?


 
Nazareth   (2002-08-19 19:03) [39]

Просто цепляю к dataset"у запрос, устанавливаю поля по осям и все. Свойства использую стандартные (их там столько, что и не перечислишь). Вообще на Teechart 4.04 все работало отлично. Но мне нужно было выровнять лэйбы на левой оси по правому краю. А в 4.04 свойства AlignLabels нет.


 
Ученик   (2002-08-19 19:10) [40]

>Nazareth (19.08.02 19:03)
Так на простом примере никак не смоделировать ? (сложно указать причину ошибки, которую не видишь)



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

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

Наверх





Память: 0.53 MB
Время: 0.006 c
1-95803
Елена
2002-08-20 07:06
2002.08.29
Помощники в работе на Delphi


6-95921
Nikollay
2002-06-20 18:59
2002.08.29
Как уменьшить размер пакета протокола FTP?


1-95762
Юрий Федоров
2002-08-19 14:31
2002.08.29
TMyForm = class(TForm, IMyForm)


1-95820
Yaro
2002-08-16 17:00
2002.08.29
непонятки с TNotifyEvent


3-95645
perov
2002-08-07 14:19
2002.08.29
Блокировка





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