-
С под отладчика в PaintBox.onPaint вылетает AV. Обвернул код в try except чтобы при ручном запуске exe - шника посмотреть в Memo все массивы из которых идет перерисовка в PaintBox. Но она не появляется, а с под отладчика вылетает))).
Сама среда может быть причиной?
-
Ошибка в коде.
> Обвернул код в try except
забудь про эту конструкцию, как минимум, на несколько лет, либо до внимательного прочтения пары умных книжек по программированию.
> Сама среда может быть причиной?
нет.
-
Поставь заглушку и не парься.))
-
> Сама среда может быть причиной?
Может. Но не причиной ошибки. Ошибка как сказал Eraser ©, в вашем коде. Но среда aka IDE Delphi может быть причиной тому, что эта ваша ошибка привела к возникновению сообщения о Access Violation. И это вам повезло, что вам сообщили об ошибке в вашем коде!
-
> kashey © (20.01.18 22:02)
Есть такая особенность.
try
... // Здесь возникает исключение
except
... // А здесь оно гасится (потому что мы с ним ничего не делаем)
end;
При запуске без дебаггера исключение будет погашено и мы его не увидим. А при запуске под дебаггером - увидим, хотя оно и погашено.
Приведите Ваш код между try и except.
-
> PaintBox.onPaint вылетает AV
Ну шутки шутками, но это узкое место и словить там ошибку проще простого.
Вот ты там модифицируешь свои массивы (скажем тыкаешь точки мышкой или рисуешь линии), заносишь эти координаты в массивы из которых в onPaint и делаешь перерисовку. Чтобы увидеть изменения ты пишешь:
PaintBox.Repaint и картинка меняется.
Но все дело в том что перерисовка может быть вызвана чем угодно и она произойдет в не подходящий момент (поменял в ScrollBar.Position и тд, ну куча разных вариантов). Вот примерно так скорее всего и у тебя.
Я как то давно в одной программе решил проблему следующим образом:
PaintLock : Boolean;
procedure PaintBoxPaint(Sender: TObject);
begin
if PaintLock then begin
//код
end
end;
Но вариант конечно ничего не гарантирует.
Мнения остальныхх по этому вопросу тоже будут интересны.
-
> procedure PaintBoxPaint(Sender: TObject);
> begin
> if PaintLock then begin
> //код
> end
> end;
procedure PaintBoxPaint(Sender: TObject);
begin
if not PaintLock then begin
//код
end
end;
-
> .. чтобы при ручном запуске exe - шника посмотреть в Memo все массивы из которых ..
Логирование? Не, не слышали?
> С под отладчика в PaintBox.onPaint вылетает AV.
Подробности AV? На какой строке? Где код?
-
-
>
> Подробности AV? На какой строке? Где код?
Там тогда код всего приложения нужно будет выкладывать. Копаться думаю там никому интересно не будет.
Нужно было ставить галочку в настройках Range check error. Не ругайте, я как начинающих и не знал, что она там есть.
> Логирование? Не, не слышали?
Не, не слышали.
В ручную писать.?
try
except
-> всех подозреваемых в файл
end;
или есть стандартные методы???
-