Запрет повторного запуска процедуры из фрейма.
Clarion, Clarion 7
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- ✯ Ветеран ✯
- Сообщения: 5181
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Запрет повторного запуска процедуры из фрейма.
Нужно запретить повторный запуск некоторых процедур из меню фрейма (на тулбаре их нет, но вдруг), ключевое здесь слово - фрейм. Естественно, окно MDI, запуск start'ом. Есть в Кларионе такая возможность? Может шаблон? Не проблема руками контролировать глобальную переменную, в которую помещается значение треда. Но если есть уже правильный путь...
We are hard at work… for you. 

kreator
- Игорь Столяров
- Ветеран движения
- Сообщения: 8077
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 98 раз
Запрет повторного запуска процедуры из фрейма.
Так вот же ископаемые терки на эту тему: http://forum.clarionlife.net/phpbb/view ... %B0#p11254
Здесь возможны вариации на тему, что делать если MDI окно открыто:
1. Можно задизайблить Items для его повторного открытия (самое простое);
2. Можно при повторном вызове послать в ранее открытое окно событие, развернуть и сделать его активным (мой случай).
Здесь возможны вариации на тему, что делать если MDI окно открыто:
1. Можно задизайблить Items для его повторного открытия (самое простое);
2. Можно при повторном вызове послать в ранее открытое окно событие, развернуть и сделать его активным (мой случай).
Make Clarion Great Again ! 
Игорь Столяров
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
RaFaeL
- Дед Пахом
- Старичок
- Сообщения: 3301
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 51 раз
- Контактная информация:
Запрет повторного запуска процедуры из фрейма.
Мы как отцы учили - глобальные переменные 

С уважением, ДП
Дед Пахом
Запрет повторного запуска процедуры из фрейма.
В комплекте FreeABC есть подходящий шаблон (ThreadLimit, файл vsa_thrx.tpw), рекомендуется
Если не подходит - внутри вызываемой процедуры (mdi-окна) заводится переменная
Procname_thread Long(0), Static
Сразу после запуска проверяется
А перед выходом
Если не подходит - внутри вызываемой процедуры (mdi-окна) заводится переменная
Procname_thread Long(0), Static
Сразу после запуска проверяется
Код: Выделить всё
If Procname_thread <> 0 ! Если есть уже запущенная
! Можно вытащить окно уже запущенной задачи вперёд
SetTarget(, Procname_thread)
0{Prop:Active} = True
SetTarget
Post(Event:GainFocus,,Procname_Thread)
! И завершимся
Return Level:fatal ! Это в ABC
else
Procname_thread = Thread()
end
Код: Выделить всё
If ProcName_Thread = Thread()
ProcName_Thread = 0
End
Yufil
-
- ✯ Ветеран ✯
- Сообщения: 5181
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Запрет повторного запуска процедуры из фрейма.
Искал же. Наверно, не по тем словам.Игорь Столяров писал(а):Так вот же ископаемые терки на эту тему: viewtopic.php?f=1&t=2340&p=11254&hilit=%D0%B7%D0%B0%D0%BF%D1%80%D0%B5%D1%82+%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D0%B0#p11254
Как отцы учили не пойду. Потому что естьДед Пахом писал(а):Мы как отцы учили - глобальные переменные
Спасибо, Юрий. Красиво реализовано.Yufil писал(а):В комплекте FreeABC есть подходящий шаблон (ThreadLimit, файл vsa_thrx.tpw), рекомендуется
We are hard at work… for you. 

kreator
- Дед Пахом
- Старичок
- Сообщения: 3301
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 51 раз
- Контактная информация:
Запрет повторного запуска процедуры из фрейма.
Ну, это те же яйца на самом деле.
PS.
Вопрос, на самом деле, в другом - кто должен решать, можно ли запускать вторую копию? Если решает фрейм, то что-то вроде "if something_good then start(proc) end" где-то в коде фрейма, если же решает сама процедура, то "if something_bad then return level:notify" в коде WindowManager.Init().
PS.
Вопрос, на самом деле, в другом - кто должен решать, можно ли запускать вторую копию? Если решает фрейм, то что-то вроде "if something_good then start(proc) end" где-то в коде фрейма, если же решает сама процедура, то "if something_bad then return level:notify" в коде WindowManager.Init().
С уважением, ДП
Дед Пахом
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Запрет повторного запуска процедуры из фрейма.
Вы еще учитывайте что к примеру:
Можно запускать только одну копию BrowseGoods но давать возможность запустить ее же с GlobalRequest = SelectRecord
Можно запускать только одну копию BrowseGoods но давать возможность запустить ее же с GlobalRequest = SelectRecord
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Admin
-
- ✯ Ветеран ✯
- Сообщения: 5181
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Запрет повторного запуска процедуры из фрейма.
Сделано всё по уму в этом шаблоне. GlobalRequest = SelectRecord учитывается. Мне понравилось, что шаблон только для одной процедуры (данный шаблон), и свой текст лепит в процедуру, не затрагивая фрейм, глобальные переменные, dll... И потом. Поскольку такой запрет нужен для специфических процедур, то, в общем-то логично, что запрет полный, и это решает процедура. У меня так - процедуры не должны вызываться два раза ниоткуда. Проверка на GlobalRespect, в принципе, лишняя даже.Admin писал(а):Можно запускать только одну копию BrowseGoods но давать возможность запустить ее же с GlobalRequest = SelectRecord
We are hard at work… for you. 

kreator
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5307
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
Запрет повторного запуска процедуры из фрейма.
Плюсану, делаю аналогично. Для справочников и журналов документов. Отчеты (окна с расчетом каких-либо сводных итогов) не ограничиваются. Отслеживается по глобальной очереди открытых окон/потоков. Есть еще близкая по смысловой нагрузке тема - переключение в поток открытого документа при попытке его повторного открытия.Игорь Столяров писал(а): 2. Можно при повторном вызове послать в ранее открытое окно событие, развернуть и сделать его активным (мой случай).
C6/C12, ШВС, tps/btrieve.
finsoftrz
Запрет повторного запуска процедуры из фрейма.
Попробовал, работает, но окно не вытаскивается наверхYufil писал(а): Если не подходит - внутри вызываемой процедуры (mdi-окна) заводится переменная Procname_thread Long(0), Static Сразу после запуска проверяется Код: Выделить всёIf Procname_thread <> 0 ! Если есть уже запущенная ! Можно вытащить окно уже запущенной задачи вперёд SetTarget(, Procname_thread) 0{Prop:Active} = True SetTarget Post(Event:GainFocus,,Procname_Thread) ! И завершимся Return Level:fatal ! Это в ABCelse Procname_thread = Thread() end
Любить и обещать ничего не стоит
Артур
Запрет повторного запуска процедуры из фрейма.
Если не вытаскивается, надо Event:GainFocus отрабатывать.
А лучше всего посмотреть файл Vsa_thrx.tpw с шаблоном из FreeABC, там всё чётко прописано.
А лучше всего посмотреть файл Vsa_thrx.tpw с шаблоном из FreeABC, там всё чётко прописано.
Yufil
Запрет повторного запуска процедуры из фрейма.
Кому не хочется искать и грузить шаблон, выложил на
https://mega.nz/#!ckZEQLKL!EgbAAOB_OXuG ... 9pAI9a37UM
https://mega.nz/#!ckZEQLKL!EgbAAOB_OXuG ... 9pAI9a37UM
Yufil
-
- ✯ Ветеран ✯
- Сообщения: 5181
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Запрет повторного запуска процедуры из фрейма.
Вытаскивается. В шаблоне вытаскивается. Вы неправильно что-то делаете.Артур писал(а):Попробовал, работает, но окно не вытаскивается наверх
Вот код, который делает этот шаблон:
Код: Выделить всё
IF GlobalRequest <> SelectRecord ! ThreadLimit (ABC Free)
IF NOT ActiveThread:Preferences ! ThreadLimit (ABC Free)
ActiveThread:Preferences = THREAD() ! ThreadLimit (ABC Free)
vs::ThisThreadActive = THREAD() ! ThreadLimit (ABC Free)
ELSE ! ThreadLimit (ABC Free)
POST(EVENT:GainFocus,,ActiveThread:Preferences) ! ThreadLimit (ABC Free)
RETURN Level:Fatal ! ThreadLimit (ABC Free)
END ! ThreadLimit (ABC Free)
END ! ThreadLimit (ABC Free)
We are hard at work… for you. 

kreator
Запрет повторного запуска процедуры из фрейма.
Я работаю в 10 версии, шаблона у меня нет, а предложенный Yufil не регистрируется видимо из-за несоответствия версий, поэтому хотелось бы без шаблона обойтись..
Любить и обещать ничего не стоит
Артур
Вернуться в «CLARION for Windows»
Перейти
- CW
- ↳ CLARION for Windows
- ↳ CLARION for Internet
- ↳ Clarion.NET
- Эксклюзив
- ↳ Приват
- CLARION и...
- ↳ Reports
- ↳ Железо
- ↳ Готовые программы, шаблоны, библиотеки...
- ↳ cJSON
- ↳ LibCurl
- ↳ MAV
- ↳ SQL, Oracle, ...
- ↳ Multi-программирование(Pascal/Delphi, и т.д.)
- ↳ WinDev
- DOS
- ↳ CLARION for DOS
- Разное
- ↳ Новости
- ↳ English
- ↳ Ресурсы
- ↳ Работа
- ↳ Обо всем ...
- ↳ Обсуждение этого Форума (типа, Гостевая книга)