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

Re: Обнуление переменной
ну весь текст врядли получится))
да в одном окне!
вот завел новую переменную локальную
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
Сам сижу и удивляюсь!
Прогнал поиском по сырцу, переменная встречается два раза в тексте, ни в какую группу она не входит.
да в одном окне!
вот завел новую переменную локальную
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
Сам сижу и удивляюсь!
Прогнал поиском по сырцу, переменная встречается два раза в тексте, ни в какую группу она не входит.
Re: Обнуление переменной
Короче. Пошел старым дедовским способом. Стал коментить блоками текст. Вышел на такую ерунду.
В этой процедуре есть объявление второго окна. И я его открываю в тексте. Само открытие ни н что не влияет, но как только я хочу обработать его события и вставляю accept - получаю вышеописанный эффект!
Упаковал в routine, все работает!
В этой процедуре есть объявление второго окна. И я его открываю в тексте. Само открытие ни н что не влияет, но как только я хочу обработать его события и вставляю accept - получаю вышеописанный эффект!
Упаковал в routine, все работает!
-
- ✯ Ветеран ✯
- Сообщения: 5159
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Обнуление переменной
Вообще, интересно. При открытом окне Вы пытаетесь открыть другое, не обращая внимания на Accept. Наверно, в этом проблема. Строго говоря, после открытия окна должен следовать цикл Accept, а при закрытии окна нужен break. А почему второе окно не вызывать отдельной процедурой?
We are hard at work… for you. 

Re: Обнуление переменной
Ну в принципе не ожидал, что для Клариона это проблема. Я не ожидал что в одной процедуре может быть только один accept, видимо он как то перекрывает основной accept. При этом достаточно было вынести открытие второго окна и его же accept в отдельную routine и проблема ушла. Но сам факт интересен, любопытная реакция получилась.
Re: Обнуление переменной
У Клариона, как известно, нет проблем. Есть проблема его недопонимания.
Иметь несколько окон в одной процедуре не запрещается, но как бы вам не запутаться в циклах accept, которых вы, собственно, можете иметь тоже сколько угодно.
В этой связи мне хотелось бы понять, когда вы нажимаете кнопку ?Button1, ваше второе окно уже открыто? Нельзя ли в этом случае вставить message(Loc:MessAction) после присвоения, которое бы утвердительно сказало, что кнопка точно была нажата, а код отработан?
Иметь несколько окон в одной процедуре не запрещается, но как бы вам не запутаться в циклах accept, которых вы, собственно, можете иметь тоже сколько угодно.
В этой связи мне хотелось бы понять, когда вы нажимаете кнопку ?Button1, ваше второе окно уже открыто? Нельзя ли в этом случае вставить message(Loc:MessAction) после присвоения, которое бы утвердительно сказало, что кнопка точно была нажата, а код отработан?
Re: Обнуление переменной
Основное окно открыто, естественно ставил stop() и выдавало значение 1. При нажатии на другую кнопку получал 0 этой же переменной. С accept-ами не путался, при нажатии на третью кнопку открывалось окно начала обработки некого процессика(небольшого), там текста на 20 строчек было. Соответственно все закрывал красиво по break и т.д. Но Самое любопытное что я это второе окно даже не октрывал, то есть просто этот текст присутствовал в коде. При входе в программу сразу шел к той переменной и получал этот прикол. Второе окно не задействовал еще.
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: Обнуление переменной
На счет одного окна - ерунда...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: Обнуление переменной
И вообще... Для разбора "полетов", проще всего вам сделать небольшой пример повторяющий данный "глюк"
Типа моего кода а не APP на несколько метров кода.
Сразу все решим!
Типа моего кода а не APP на несколько метров кода.
Сразу все решим!
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса