![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Баг в коде DBGrids? [D7, WinXP]
Aleksandr © (2003-02-10 12:38:00)У меня при горизонтальном скроллинге RXDBGrid"a периодически вылетало сообщение Integer Overflow. Стал копать и накопал в модуле BDGrids в методе WriteText вот энтот код:
else { taCenter }
Left := ARect.Left + (ARect.Right - ARect.Left) shr 1
- (ACanvas.TextWidth(Text) shr 1);
end;
заменил его на вот так:
else { taCenter }
Left := ARect.Left + (ARect.Right - ARect.Left) div 2
- (ACanvas.TextWidth(Text) div 2);
end;
и ошибка исчезла. И только одного я не могу понять - shr 1 и div 2 - это идентичные выражения, так почему один из них может давать ошибку?
Aleksandr (2003-02-10 14:33:00) [1]Ну, реальной природы возникновения ошибки я не очень понял. Понял только, что она происходит при отрисовке колонтитула. У меня очень большая RXDBGrid c большим количеством колонок, создание в ней колонок и отрисовка ее производится вручную (методы перекрыты). В определенный момент горизонтальной прокрутки по нажатиям клавиш "влево" "вправо" (по скроллингу мышью все в порядке) ошибка и выскакивала. Метод с ошибкой обнаружил по остановке на ошибках Делфи, остальное просто шестым чуйством угадал.
Dmitry Filippov (2003-02-10 14:03:00) [2]Это интересно.
А скажи пожалуйста при каких обстоятельствах возникала эта ошибка