• kashey © (20.01.18 22:02) [0]
    С под отладчика в PaintBox.onPaint вылетает AV. Обвернул код в try except чтобы при ручном запуске exe - шника посмотреть в Memo все массивы из которых идет перерисовка в PaintBox. Но она не появляется, а с под отладчика вылетает))).
    Сама среда может быть причиной?
  • Eraser © (21.01.18 00:36) [1]
    Ошибка в коде.

    > Обвернул код в try except

    забудь про эту конструкцию, как минимум, на несколько лет, либо до внимательного прочтения пары умных книжек по программированию.


    > Сама среда может быть причиной?

    нет.
  • aka © (21.01.18 00:36) [2]
    Поставь заглушку и не парься.))
  • Германн © (21.01.18 02:25) [3]

    > Сама среда может быть причиной?

    Может. Но не причиной ошибки. Ошибка как сказал Eraser ©, в вашем коде. Но среда aka IDE Delphi может быть причиной тому, что эта ваша ошибка привела к возникновению сообщения о Access Violation. И это вам повезло, что вам сообщили об ошибке в вашем коде!
  • Юрий Зотов © (21.01.18 09:46) [4]
    > kashey ©   (20.01.18 22:02)

    Есть такая особенность.

    try
      ... // Здесь возникает исключение
    except
      ... // А здесь оно гасится (потому что мы с ним ничего не делаем)
    end;


    При запуске без дебаггера исключение будет погашено и мы его не увидим. А при запуске под дебаггером - увидим, хотя оно и погашено.

    Приведите Ваш код между try и except.
  • aka © (21.01.18 10:01) [5]

    > PaintBox.onPaint вылетает AV


    Ну шутки шутками, но это узкое место и словить там ошибку проще простого.
    Вот ты там модифицируешь свои массивы (скажем тыкаешь точки мышкой или рисуешь линии), заносишь эти координаты в массивы из которых в onPaint и делаешь перерисовку. Чтобы увидеть изменения ты пишешь:
    PaintBox.Repaint и картинка меняется.
    Но все дело в том что перерисовка может быть вызвана чем угодно и она произойдет в не подходящий момент (поменял в ScrollBar.Position и тд, ну куча разных вариантов). Вот примерно так скорее всего и у тебя.

    Я как то давно в одной программе решил проблему следующим образом:
    PaintLock : Boolean;
    procedure PaintBoxPaint(Sender: TObject);
    begin
     if PaintLock then begin
      //код
     end
    end;

    Но вариант конечно ничего не гарантирует.
    Мнения остальныхх по этому вопросу тоже будут интересны.
  • aka © (21.01.18 10:16) [6]

    > procedure PaintBoxPaint(Sender: TObject);
    > begin
    >  if PaintLock then begin
    >   //код
    >  end
    > end;

    procedure PaintBoxPaint(Sender: TObject);
    begin
     if not PaintLock then begin
      //код
     end
    end;
  • Z (21.01.18 22:39) [7]
    > .. чтобы при ручном запуске exe - шника посмотреть в Memo все массивы из которых ..

    Логирование? Не, не слышали?

    > С под отладчика в PaintBox.onPaint вылетает AV.

    Подробности AV? На какой строке? Где код?
  • Германн © (22.01.18 01:00) [8]
    Ну вот тут http://www.gunsmoker.ru/2009/05/access-violation.html статья, которая может помочь понять всю суть данной ошибки.
  • kashey © (22.01.18 10:50) [9]

    >
    > Подробности AV? На какой строке? Где код?

    Там тогда код всего приложения нужно будет выкладывать. Копаться думаю там никому интересно не будет.

    Нужно было ставить галочку в настройках Range check error. Не ругайте, я как начинающих и не знал, что она там есть.


    > Логирование? Не, не слышали?

    Не, не слышали.

    В ручную писать.?
    try

    except
     -> всех подозреваемых в файл
    end;

    или есть стандартные методы???
  • Германн © (23.01.18 01:50) [10]
Есть новые Нет новых   [134427   +34][b:0][p:0]