Интерфейсы в кларионовских приложениях
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Интерфейсы в кларионовских приложениях
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
-
- ✯ Ветеран ✯
- Сообщения: 5159
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Интерфейсы в кларионовских приложениях
Вот у вас куча запущенных программ. Вы выключаете компьютер. Появляется окно со списком запущенных программ. Они постепенно закрываются. Редакторы, например, спрашивают о сохранении, если не сохранено. И т.д. А тут выступает Ваша программа с сообщением "Отставить". Правильно? Я считаю, пусть закроется как все остальные. Очень маловероятно, что пользователь сидит в форме, редактирует запись, и посылает компьютер на выключение или перезагрузку. Каких-то других вариантов я не вижу. Можно ещё подстраховаться и спросить пользователя, если он находится в режиме редактирования записи. Но это сильно специфический и маловероятный случай.
We are hard at work… for you. 

- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
Интерфейсы в кларионовских приложениях
Выдрал из шаблона конкретно те 5 строчек, что отвечают конкретно за closedown, вставил вместо вызова класса - и shutdown приложение закрывает, и ошибки при закрытии нетИгорь Столяров писал(а): 22 Июль 2020, 6:10 И нужно искать другой способ - потому, что программа не должна блокировать завершение работы Windows.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8028
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Интерфейсы в кларионовских приложениях
Ну и славно. Значит классическая проблема: не соответствие последовательности закрытия классов - порядку открытия.
В этом случае теряется указатель на заголовок окна и всё становиться колом.
Make Clarion Great Again ! 
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5236
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
Интерфейсы в кларионовских приложениях
Попробуйте при открытом не mdi child окне. Например, на предпросмотре печатной формы.RaFaeL писал(а): 22 Июль 2020, 11:20Выдрал из шаблона конкретно те 5 строчек, что отвечают конкретно за closedown, вставил вместо вызова класса - и shutdown приложение закрывает, и ошибки при закрытии нетИгорь Столяров писал(а): 22 Июль 2020, 6:10 И нужно искать другой способ - потому, что программа не должна блокировать завершение работы Windows.
C6/C12, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5236
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
Интерфейсы в кларионовских приложениях
Спасибо за ссылку. В принципе, я посмотрел, как управляется выключение. Сабклассится окно фрейма и обрабатываются 2 сообщения, которые по ссылке. Типа такого.
После открытия окна фрейма.
Код: Выделить всё
SavedProc = AppFrame{PROP:WndProc}
AppFrame{PROP:WndProc} = ADDRESS(CSubClassFunc)
Код: Выделить всё
CSubClassFunc PROCEDURE(UNSIGNED shWnd,UNSIGNED swMsg,UNSIGNED swParam,LONG slParam)
LOC:WM_QUERYENDSESSION EQUATE(0011h)
LOC:WM_ENDSESSION EQUATE(0016h)
LOC:WM_PAINT EQUATE(000Fh)
LOC:WM_ERASEBKGND EQUATE(0014h)
Nerr UNSIGNED
CODE
CASE swMsg
OF LOC:WM_QUERYENDSESSION
RETURN(True)
OF LOC:WM_ENDSESSION
POST(Event:CloseDown,,1)
RETURN(True)
END
RETURN(CallWindowProc(SavedProc,shWnd,swMsg,swParam,slParam))
C6/C12, ШВС, tps/btrieve.
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
Интерфейсы в кларионовских приложениях
В шаблоне не так сделано. Там ловится Event:Notify, и в зависимости от Notification выполняется действие
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5236
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
Интерфейсы в кларионовских приложениях
Я не очень ориентируюсь в ABC классах. Смотрел в С10. Поиск по событию WM_QUERYENDSESSION выдает WindowExtenderClass, в нем похожий код. С некоторыми довесами. В частности, прописан вызов виртуального метода класса для дополнительной обработки.
Как я понял, проблема есть где-то в обработке события CloseDown, не все окна закрывает в нужный момент. Если открыт предпросмотр печатной формы и жмете перезагрузить компьютер, что происходит?
Я смотрел в демке у Игоря. Там вывешивает окно, что приложение не дает перезагрузить компьютер, но завершает работу, если отказаться от перезагрузки. Что выглядит некорректно. А если предпросмотр не открыт, то программа молча завершает работу. Я у себя получил аналогичный результат. Причем не только на предпросмотре. У меня не срабатывает при активной панели переключения потоков, которая без mdi и с toolbox. Отключаем ее в настройке, работает, как задумано.
PS. Мне кажется, мы слишком погрузились в эту тему. Ситуация, когда пользователь перегружает или выключает компьютер при работающем приложении, актуальна только для небольших утилит. Например, серверов оборудования, которые при включении компьютера вешаются в трей. Там без вопросов приложение сразу закрывается при выключении компьютера. С обычным приложением ситуация настолько редкая, что, ИМХО, можно не заморачиваться, просто запрашивать подтверждение закрытия приложения, как дефолтно и происходит.
Как я понял, проблема есть где-то в обработке события CloseDown, не все окна закрывает в нужный момент. Если открыт предпросмотр печатной формы и жмете перезагрузить компьютер, что происходит?
Я смотрел в демке у Игоря. Там вывешивает окно, что приложение не дает перезагрузить компьютер, но завершает работу, если отказаться от перезагрузки. Что выглядит некорректно. А если предпросмотр не открыт, то программа молча завершает работу. Я у себя получил аналогичный результат. Причем не только на предпросмотре. У меня не срабатывает при активной панели переключения потоков, которая без mdi и с toolbox. Отключаем ее в настройке, работает, как задумано.
PS. Мне кажется, мы слишком погрузились в эту тему. Ситуация, когда пользователь перегружает или выключает компьютер при работающем приложении, актуальна только для небольших утилит. Например, серверов оборудования, которые при включении компьютера вешаются в трей. Там без вопросов приложение сразу закрывается при выключении компьютера. С обычным приложением ситуация настолько редкая, что, ИМХО, можно не заморачиваться, просто запрашивать подтверждение закрытия приложения, как дефолтно и происходит.
C6/C12, ШВС, tps/btrieve.
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
Интерфейсы в кларионовских приложениях
Я и не заморачиваюсь. Добавил закрытие обычное, раз у всех есть а у меня нет. Если на каких-то формах вдруг при перезагрузке не закроется, ничего страшного не вижу
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5236
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
Интерфейсы в кларионовских приложениях
У всех, это у кого? 
У большинства, я думаю, стоит дефолтно. То есть запрос на подтверждение закрытия приложения. Как у Вас раньше и было, если я правильно понял. Галка в шаблонах это для утилит, которые должны завершать работу при выключении компьютера. Мне вообще показалось, что SV позаимствовало идею с пускача (откуда я привел вырезку кода). Либо у них общий предок. Слишком все похоже.
В 1С8, которые заморочились. Я думаю, они блокируют перезагрузку и выключение компьютера, когда их среда работает. Затем выполняют закрытие всех окон с проверкой необходимости сохранения данных, а потом уже на выходе из программы сами генерят событие на перезагрузку или выключение компьютера. А тут придется еще разруливать заморочки с правами доступа. Нафиг это надо...
Кстати, сам кларион при попытке перезагрузки компьютера и отказа в ступор впадает. С6 и С10 по разному. C6 перестает собирать приложение, C10 совсем виснет. До перезагрузки.

У большинства, я думаю, стоит дефолтно. То есть запрос на подтверждение закрытия приложения. Как у Вас раньше и было, если я правильно понял. Галка в шаблонах это для утилит, которые должны завершать работу при выключении компьютера. Мне вообще показалось, что SV позаимствовало идею с пускача (откуда я привел вырезку кода). Либо у них общий предок. Слишком все похоже.
В 1С8, которые заморочились. Я думаю, они блокируют перезагрузку и выключение компьютера, когда их среда работает. Затем выполняют закрытие всех окон с проверкой необходимости сохранения данных, а потом уже на выходе из программы сами генерят событие на перезагрузку или выключение компьютера. А тут придется еще разруливать заморочки с правами доступа. Нафиг это надо...
Кстати, сам кларион при попытке перезагрузки компьютера и отказа в ступор впадает. С6 и С10 по разному. C6 перестает собирать приложение, C10 совсем виснет. До перезагрузки.
C6/C12, ШВС, tps/btrieve.
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
Интерфейсы в кларионовских приложениях
Дефолтно нет никакого подтверждения, просто винда говорит, что закрыть не может. Потому что посылает в приложение событие, а на него реакции никакой. А вот реакцию обрабатывать можно по-разному - не молча закрывать, например, а спрашивать пользователя. Из трея на полный экран развернуть, в панели помигать, у кого какая фантазия
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5236
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
Интерфейсы в кларионовских приложениях
Если дословно, винда пишет, что для перезагрузки (выключения) надо выйти из программы. И предлагает либо отказаться от перезагрузки, либо перезагрузить, принудительно закрыв программу.
C6/C12, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5236
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
Интерфейсы в кларионовских приложениях
"А теперь баба Люба!" 
Порекламирую ресайзер Струменского. Можно хоть черта лысого отресайзить. Работает со сплиттерами Руденко. И все бесплатно. Должен быть в файловых архивах.
Когда-то наткнулся на него в обсужденях в ClaList. Стандартный не устраивал. Мялин, помнится, тогда написал, так вот как надо делать ресайзер... Кто-то пользуется стандартным ресайзером в кларионе? Может, я что-то упустил. Глянул в С10, вроде все тоже самое, как когда-то давно было.

Порекламирую ресайзер Струменского. Можно хоть черта лысого отресайзить. Работает со сплиттерами Руденко. И все бесплатно. Должен быть в файловых архивах.
Когда-то наткнулся на него в обсужденях в ClaList. Стандартный не устраивал. Мялин, помнится, тогда написал, так вот как надо делать ресайзер... Кто-то пользуется стандартным ресайзером в кларионе? Может, я что-то упустил. Глянул в С10, вроде все тоже самое, как когда-то давно было.
C6/C12, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8028
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Интерфейсы в кларионовских приложениях
Я пользуюсь. И всё устраивает. Может быть я просто чего-то не знаю ?
Что касается шаблонов в C11 - то с чего им меняться, если всё на человечьем языке написано ?
На всякий случай обвёл на рисунке красненьким ...

Make Clarion Great Again ! 
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5236
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
Интерфейсы в кларионовских приложениях
Попробуйте Струменского, рекомендую. Во всяком случае, на сложных окнах. На простых можно и стандартный использовать, одно другому не мешает.
Там надо стратегию для каждого контрола задавать, который ресайзится. Делается это прямо на закладке action. Кроме выбора стандартных стратегий, можно создавать пользовательские. Например, смещать контролы в задаваемой пропорции и/или относительно какого-то фиксированного значения, например, позиции сплиттера.
Там надо стратегию для каждого контрола задавать, который ресайзится. Делается это прямо на закладке action. Кроме выбора стандартных стратегий, можно создавать пользовательские. Например, смещать контролы в задаваемой пропорции и/или относительно какого-то фиксированного значения, например, позиции сплиттера.
C6/C12, ШВС, tps/btrieve.