Обнуление переменной

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
OTiger
Новичок
Сообщения: 8
Зарегистрирован: 10 Январь 2009, 15:49

Обнуление переменной

Сообщение OTiger »

Странное поведение локальной переменной в форме.
Clarion 6.3, Template Clarion. Нарвался на глюк. Форма довольно сложная, много закладок, несколько броузеров и форма редактирования. Завел локальную переменную LONG. Под кнопкой присвоил ей InsertRecord, нажимаю другую кнопку переменная равна 0. Больше она нигде не встречается, только в этих двух местах. Пробовал другую локальную, эффект тот же. Глобальная работает все ок. Понимаю что где то накосячил очяпятку в тексте. Может у кого было подобное? Хоть в какую сторону вообще копать?
kreator
✯ Ветеран ✯
Сообщения: 5159
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Обнуление переменной

Сообщение kreator »

В одном окне такой эффект? Не может быть, текст в студию.
We are hard at work… for you. :)
OTiger
Новичок
Сообщения: 8
Зарегистрирован: 10 Январь 2009, 15:49

Re: Обнуление переменной

Сообщение OTiger »

ну весь текст врядли получится))

да в одном окне!

вот завел новую переменную локальную
Loc:MessAction long

?Button1
CASE EVENT()
OF EVENT:Accepted
GET(messupd,0)
CLEAR(MSU:Record,0)
MSU:id_oto = seta:NumOTO
MSU:typemsg = 'from'
Loc:MessAction = 1 !InsertRecord
!select(?TabNewMsg)
select(?MSU:title)
END


?Button2
CASE EVENT()
OF EVENT:Accepted
message(Loc:MessAction) ! Результат 0
END

Сам сижу и удивляюсь!
Прогнал поиском по сырцу, переменная встречается два раза в тексте, ни в какую группу она не входит.
OTiger
Новичок
Сообщения: 8
Зарегистрирован: 10 Январь 2009, 15:49

Re: Обнуление переменной

Сообщение OTiger »

Короче. Пошел старым дедовским способом. Стал коментить блоками текст. Вышел на такую ерунду.
В этой процедуре есть объявление второго окна. И я его открываю в тексте. Само открытие ни н что не влияет, но как только я хочу обработать его события и вставляю accept - получаю вышеописанный эффект!
Упаковал в routine, все работает!
kreator
✯ Ветеран ✯
Сообщения: 5159
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Обнуление переменной

Сообщение kreator »

Вообще, интересно. При открытом окне Вы пытаетесь открыть другое, не обращая внимания на Accept. Наверно, в этом проблема. Строго говоря, после открытия окна должен следовать цикл Accept, а при закрытии окна нужен break. А почему второе окно не вызывать отдельной процедурой?
We are hard at work… for you. :)
OTiger
Новичок
Сообщения: 8
Зарегистрирован: 10 Январь 2009, 15:49

Re: Обнуление переменной

Сообщение OTiger »

Ну в принципе не ожидал, что для Клариона это проблема. Я не ожидал что в одной процедуре может быть только один accept, видимо он как то перекрывает основной accept. При этом достаточно было вынести открытие второго окна и его же accept в отдельную routine и проблема ушла. Но сам факт интересен, любопытная реакция получилась.
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Re: Обнуление переменной

Сообщение Shur »

У Клариона, как известно, нет проблем. Есть проблема его недопонимания.
Иметь несколько окон в одной процедуре не запрещается, но как бы вам не запутаться в циклах accept, которых вы, собственно, можете иметь тоже сколько угодно.
В этой связи мне хотелось бы понять, когда вы нажимаете кнопку ?Button1, ваше второе окно уже открыто? Нельзя ли в этом случае вставить message(Loc:MessAction) после присвоения, которое бы утвердительно сказало, что кнопка точно была нажата, а код отработан?
OTiger
Новичок
Сообщения: 8
Зарегистрирован: 10 Январь 2009, 15:49

Re: Обнуление переменной

Сообщение OTiger »

Основное окно открыто, естественно ставил stop() и выдавало значение 1. При нажатии на другую кнопку получал 0 этой же переменной. С accept-ами не путался, при нажатии на третью кнопку открывалось окно начала обработки некого процессика(небольшого), там текста на 20 строчек было. Соответственно все закрывал красиво по break и т.д. Но Самое любопытное что я это второе окно даже не октрывал, то есть просто этот текст присутствовал в коде. При входе в программу сразу шел к той переменной и получал этот прикол. Второе окно не задействовал еще.
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: Обнуление переменной

Сообщение Admin »

OTiger писал(а):Ну в принципе не ожидал, что для Клариона это проблема. Я не ожидал что в одной процедуре может быть только один accept, видимо он как то перекрывает основной accept. При этом достаточно было вынести открытие второго окна и его же accept в отдельную routine и проблема ушла. Но сам факт интересен, любопытная реакция получилась.
На счет одного окна - ерунда...

Код: Выделить всё

        program
        map
        end

Window1 WINDOW('Window 1'),AT(,,395,224),FONT('MS Sans Serif',8,,FONT:regular),GRAY,DOUBLE
       BUTTON('Window 2'),AT(151,91,103,25),USE(?Button1),DEFAULT
     END

Window2 WINDOW('Window 1'),AT(,,395,224),FONT('MS Sans Serif',8,,FONT:regular),GRAY,DOUBLE
       BUTTON('Window 2'),AT(151,91,103,25),USE(?Button2),DEFAULT
     END

Window3 WINDOW('Window 1'),AT(,,395,224),FONT('MS Sans Serif',8,,FONT:regular),GRAY,DOUBLE
       BUTTON('Window 2'),AT(151,91,103,25),USE(?Button3),DEFAULT
     END

  CODE

  OPEN(Window1)
  ACCEPT
    CASE ACCEPTED()
    OF ?Button1
      OPEN(Window2)
      ACCEPT
        CASE ACCEPTED()
        OF ?Button2
           OPEN(Window3)
           ACCEPT
           END
           CLOSE(Window3)
        END
      END
      CLOSE(Window2)
    END
  END
  CLOSE(Window1)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: Обнуление переменной

Сообщение Admin »

И вообще... Для разбора "полетов", проще всего вам сделать небольшой пример повторяющий данный "глюк"
Типа моего кода а не APP на несколько метров кода.
Сразу все решим!
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Ответить