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

Вниз

Это странное событие 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.044 c
2-1179749038
leonidus
2007-05-21 16:03
2007.06.10
Как переконвертировать Color в Hex ?


9-1152687836
Blondin
2006-07-12 11:03
2007.06.10
DirectDraw - есть ли ограничения на размер и к-во поверхностей ?


15-1179046742
SergeR
2007-05-13 12:59
2007.06.10
Bas2Pas конвертер


2-1179706835
delphino
2007-05-21 04:20
2007.06.10
Как отфильтровать по численному полю?


15-1178253943
Torry
2007-05-04 08:45
2007.06.10
Интервью в Мире ПК





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