Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.10;
Скачать: CL | DM;

Вниз

Это странное событие BGridEhSumListAfterRecalcAll   Найти похожие ветки 

 
kyn66 ©   (2007-04-05 11:05) [0]

Добрый день, мастера! Сталкнулся вот с таким казусом. В программе несколько гридов-Eh.  В одном из них задействовано событие САБЖ. Если его не вызывать, то все нормально. Стоит вызвать грид с этим событием, а после него любой другой, вылетает ошибка "List index out of bounds(6)". Т.е. превышение SumList.Collection и останавливается вот на этой строке в модуле DBGridEh

procedure TCustomDBGridEh.SumListAfterRecalcAll(Sender: TObject);
begin
 if Assigned(FOnSumListAfterRecalcAll) then
   FOnSumListAfterRecalcAll(SumList);


Получается что второй грид принудительно вызывает это событие, хотя за ним таковое отсутствует. В чем дело? Глюкс компонента?


 
ЮЮ ©   (2007-04-05 11:18) [1]

> Стоит вызвать грид с этим событием, а после него любой другой

Что значит "вызыать грид"


> Получается что второй грид принудительно вызывает это событие

А может это первый ещё "дорабатывает". Посмотреть Sender недосуг? И стек вызовов?


> "List index out of bounds(6)". Т.е. превышение SumList.Collection

Это опять твои домыслы. Это скорей ошибка в коде твоего обработчика.


 
kyn66 ©   (2007-04-05 11:37) [2]


> Что значит "вызыать грид"

В процессе работы каждый отдельный грид отображает данные своей таблицы


> А может это первый ещё "дорабатывает". Посмотреть Sender
> недосуг? И стек вызовов?

Проверено. Все нормально.

> Это опять твои домыслы. Это скорей ошибка в коде твоего
> обработчика.


В отладчике выставлено для проверки:

GridEh.SumList.SumCollection.Items[0].SumValue
GridEh.SumList.SumCollection.Items[1].SumValue
GridEh.SumList.SumCollection.Items[2].SumValue
GridEh.SumList.SumCollection.Items[3].SumValue
GridEh.SumList.SumCollection.Items[4].SumValue
GridEh.SumList.SumCollection.Items[5].SumValue
GridEh.SumList.SumCollection.Items[6].SumValue


Для первого грида все нормально. Для последующих -
GridEh.SumList.SumCollection.Items[6].SumValue остается с некоторым значением. Хотя у него в коллекции только 6 элементов. ? - осталось от предыдущего грида.


 
ЮЮ ©   (2007-04-05 11:59) [3]

> > Что значит "вызыать грид"
>
> В процессе работы каждый отдельный грид отображает данные
> своей таблицы


Никто не спорит. Но ты можешь каким-то образом то "вызывать" грид, то нет:
Стоит вызвать грид с этим событием, а после него любой другой


> Проверено. Все нормально.

Что нормально? Метод SumListAfterRecalcAll какого грида падает? У которого OnSumListAfterRecalcAll не назначен? Не верю.


> В отладчике выставлено для проверки:

Да уж. Отладка так отладка. В каком месте ты это смотришь "Для первого грида все нормально. Для последующих".
Это (GridEh.) касается только одного компонента - с именеи GridEh, что значит для последующих?

З.Ы. Код "зловредного" обработчика приведи, коль отладить нормально не можешь


 
kyn66 ©   (2007-04-05 13:20) [4]


> Что нормально? Метод SumListAfterRecalcAll какого грида
> падает? У которого OnSumListAfterRecalcAll не назначен?
> Не верю.


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


> Да уж. Отладка так отладка. В каком месте ты это смотришь
> "Для первого грида все нормально. Для последующих".Это (GridEh.
> ) касается только одного компонента - с именеи GridEh, что
> значит для последующих?З.Ы. Код "зловредного" обработчика
> приведи, коль отладить нормально не можешь

GridEh - образное имя, типа TDBGridEH. Получает нормальное имя -

 GridEh := TDBGridEh(FindComponent("Rep" + s + "DBGridEh"))


Код слишком большой и долго объяснятьнужно что откуда. А точку останова при отладке ставлю здесь, же писал:

procedure TCustomDBGridEh.SumListAfterRecalcAll(Sender: TObject);
begin
if Assigned(FOnSumListAfterRecalcAll) then  // <---
  FOnSumListAfterRecalcAll(SumList);


Если событие для грида не назначено, чего сюда лезет? Попробуй у себя смоделировать два грида с суммами в футоре с различным количеством элементов в SumCollection и попробуй сперва вызвать первый с большим кол-вом, затем второй. Естественно для первого должно присутствовать событие
OnSumListAfterRecalcAll , для второго - нет


 
ЮЮ ©   (2007-04-06 03:37) [5]

> Если событие для грида не назначено, чего сюда лезет?

Чтобы узнать назначено или нет :) А вот если назначено, т.е. Assigned(FOnSumListAfterRecalcAll), то обработчик и вызовется: FOnSumListAfterRecalcAll(SumList), а если нет, то данный метод (TCustomDBGridEh.SumListAfterRecalcAll) ничего и не будет делать.

Теперь об отладке:
1) Включаем опции проекта Uses Debug Dll"s и "Stop on Delphi Exception" среды. Делаем Build
2) "Нарвашись" на Exception смотрим > Debug Windows > Call Stack, где совершенно отчетливо видно в каком методе и в какой строке возникло исключение, откуда (из какой строки другого метода) и с какими параметрами этот метод вызван. Теперь можно ставить бряки, выполнять пошагово, анализировать значения локальных переменных, короче - остальное дело техники.

>GridEh := TDBGridEh(FindComponent("Rep" + s + "DBGridEh"))
если эта строка находится в обработчике, назначенном в качестве OnSumListAfterRecalcAll  грида (или любом другом обработчике грида), то
исправь лучше на GridEh := TDBGridEh(Sender)


 
kyn66 ©   (2007-04-14 10:18) [6]


> ) Включаем опции проекта Uses Debug Dll"s и "Stop on Delphi
> Exception" среды. Делаем Build


Не нашел где это включается


 
ЮЮ ©   (2007-04-16 04:04) [7]

Project > Options > Compiler > Uses Debug Dll"s
Tools > Debug Options > Language Exceptions > Stop on Delphi Exceptions



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

Текущий архив: 2007.06.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
1-1176448091
tytus
2007-04-13 11:08
2007.06.10
FastReport 4 - закрасить Memo через один.


15-1179138344
Knight
2007-05-14 14:25
2007.06.10
Откуда брать имена служб для OpenService?


15-1179007844
Real
2007-05-13 02:10
2007.06.10
Евровидение: Сердючка на втором месте


5-1155109571
Vaitek__
2006-08-09 11:46
2007.06.10
Прозрачный TCustomPanel


15-1179157027
makak
2007-05-14 19:37
2007.06.10
Метод Гаусса