Улетевшее окно

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Улетевшее окно

Сообщение Алексей- Софт-Центр »

Добрый день!
Любой кларион и любая винда.
Изредка бывает:
1. Вошел в окно, нажал кнопку выполнить.
2. Программа чего-то сделала.
3. В конце работы стоит вызов другого окна с , например, диагностикой и дизабле кнопки.
Вот здесь происходит "зависание" программы - кнопка еще активна, а программа не отвечает и не реагирует ни на какие действия.
Что произошло? Элементарно: окно с диагностикой "улетело" за пределы экрана и там ждет нажатия кнопки ОК, например.
4. Как это полулечится: снимаем программу и удаляем INI - файл. Запускаем прогу снова - и все работает нормально.(до следующего случайного "улета")
А теперь вопрос:
Есть ли какой-то способ все-таки показать "улетевшее" окно, чтобы все-таки нажать там на кнопку!
ПС. Разрешение экрана не помогает.

Спасибо,
Алексей
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Улетевшее окно

Сообщение kreator »

Алексей- Софт-Центр писал(а): 08 Сентябрь 2017, 16:12 Любой кларион и любая винда.
Вот это спорно. Но народ сталкивался с проблемой (в ini записаны сумасшедшие координаты. Ведь так?). Поищи по форуму - Игорь Столяров предлагал заплатку.
We are hard at work… for you. :)
Ал
✯ Ветеран ✯
Сообщения: 1011
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия

Улетевшее окно

Сообщение Ал »

kreator писал(а): 08 Сентябрь 2017, 16:44
Алексей- Софт-Центр писал(а): 08 Сентябрь 2017, 16:12 Любой кларион и любая винда.
Вот это спорно. Но народ сталкивался с проблемой (в ini записаны сумасшедшие координаты. Ведь так?). Поищи по форуму - Игорь Столяров предлагал заплатку.
хм, продолжаю стесняться, но спрошу - а ини файл обязательно нужен?, ну и если нужен - то что-то мешает в улетающих окнах выключить запись в этот ини?
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Улетевшее окно

Сообщение kreator »

Ал писал(а): 08 Сентябрь 2017, 16:46 то что-то мешает в улетающих окнах выключить запись в этот ини?
Нужно где-то хранить местоположение и размеры окна. Где? Выключил запись - и что?
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Улетевшее окно

Сообщение Игорь Столяров »

Алексей- Софт-Центр писал(а): 08 Сентябрь 2017, 16:12Есть ли какой-то способ все-таки показать "улетевшее" окно, чтобы все-таки нажать там на кнопку!
Да.
После Resizer.Resize вставить строку: Window{Prop:Center} = True
Всё. :)
За теми кто отстал - не возвращаться. (С) Кодекс
Ал
✯ Ветеран ✯
Сообщения: 1011
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия

Улетевшее окно

Сообщение Ал »

Игорь Столяров писал(а): 08 Сентябрь 2017, 16:53
Алексей- Софт-Центр писал(а): 08 Сентябрь 2017, 16:12Есть ли какой-то способ все-таки показать "улетевшее" окно, чтобы все-таки нажать там на кнопку!
Да.
После Resizer.Resize вставить строку: Window{Prop:Center} = True
Всё. :)
если окно статично в размере - указать свойстве окна треб.размер и размещение по центру и отменить политику изм. размера и записи в ини....
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Улетевшее окно

Сообщение finsoftrz »

Открываем фрейм в максимизированном режиме при входе в программу. Запоминаем размеры. После восстановления положения дочерних окон из ini проверяем выход за границы. Ну и опция восстановления дефолтных размеров и расположения всех окон должна быть в меню фрейма...
C6/C11, ШВС, tps/btrieve.
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Улетевшее окно

Сообщение Yufil »

Делал перехватчик GetIni-PutIni а заодно и IniMgr, потому как системные глючат на больших Ini-файлах, и есть куча унаследованных модулей, которые пишут в каталог Windows. При запросе Xpos/Ypos/Height/Width программа проверяет, что окно влезет во фрейм и подправляет, если не так...
Ал
✯ Ветеран ✯
Сообщения: 1011
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия

Улетевшее окно

Сообщение Ал »

"...месье знает толк в извращениях..." :lol:
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Улетевшее окно

Сообщение Игорь Столяров »

Yufil писал(а): 09 Сентябрь 2017, 10:17При запросе Xpos/Ypos/Height/Width программа проверяет, что окно влезет во фрейм и подправляет, если не так...
Это очень хорошая, хотя и нетривиальная в понимании и реализации, идея.
Странно, что её не сделали в стандартных шаблонах для MDI окон ...
В своё время, по совету Юрия, сделал упрощённый вариант - сразу отпала масса
проблем с запуском программы через терминальный сервер на рабочих станциях
с разными разрешениями экрана.
За теми кто отстал - не возвращаться. (С) Кодекс
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Улетевшее окно

Сообщение Алексей- Софт-Центр »

Добрый день!
Задал вопрос и пропал. Сори)))))
Немного ответы не о том. Вопрос не в том как исправить ситуацию, а как завершить процесс в программе. А именно, как все-таки это окно увидеть и нажать таки на кнопку.
Причину сегодня нашёл. В описании окна AT(222,-20,22,22) второй параметр был отрицательным. Проверил всю прогу, нашёл ещё с десяток таких описаний окон. Возможно при конвертации из 5 в 6 или из 6 в ... в 10.
Спасибо всем за ответы
Алексей
Ал
✯ Ветеран ✯
Сообщения: 1011
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия

Улетевшее окно

Сообщение Ал »

Игорь Столяров писал(а): 09 Сентябрь 2017, 14:09
Yufil писал(а): 09 Сентябрь 2017, 10:17При запросе Xpos/Ypos/Height/Width программа проверяет, что окно влезет во фрейм и подправляет, если не так...
...
Это очень хорошая, хотя и нетривиальная в понимании и реализации, идея.
...
ну-ну :mrgreen:, вообще спорить| :nr: можно долго...
видимо, все зависит от контекста использования..., в большинстве случаев можно обойтись простыми "штатными" средствами среды - вкл/выключить галочки - не сохранять данные этого окна в ини, запретить растягивать окно, поставить размер и вывод по дефолту при открытии в центр экрана и тп.

т.е. например, в ситуации ТС в первом посте, возможно можно было бы результат сообщения/диагностики вывести стандартным мессенджем с той самой кнопкой [ОК]?
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Улетевшее окно

Сообщение gopstop2007 »

может все проще, при считывании из ini в параметрах окна не должно быть отрицательных значений и подставлять по умолчанию, если таковые оказались?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Улетевшее окно

Сообщение Yufil »

Ну вот у тебя приложение из пары десятков APP, с кучей окон. И все ini уходят в каталог windows (не только позиции окон, ещё самые разнообразные настройки). Размер ini-файла перевалил за 32К, после чего начались сбои. Юзер поставил себе Win8 и жалуется, что у него нифига не пишется, потому как писать в каталог Windows просто запрещено. Более того, если на одном компе работает несколько юзеров, у них должны быть РАЗНЫЕ конфигурации.

Были написаны процедуры MyGetIni и MyPutIni ( аналоги GetIni и PutIni, только на Кларион) и процедура SetMyIniProc, запускающаяся при инициализации приложения и подменяющая стандартные GetIni/PutIni на мои функции. Запись в c:\windows\program.ini подменялась на %LocalAppData%\...\program.ini, более того, если первый файл был, а второго не было, происходило копирование. Ну и с окнами разобрался. В принципе, это где-то есть на форуме... ну и кусок из работающей программы https://mega.nz/#!EgJC3T7L!XCoPZyrJrVk- ... 7xzQADMEec .

В этом куске нет переадресации ini-файла, а ещё SetMyIniProc временный каталог чистит, можно убрать, если не...
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Улетевшее окно

Сообщение Yufil »

gopstop2007 писал(а): 09 Сентябрь 2017, 16:07может все проще, при считывании из ini в параметрах окна не должно быть отрицательных значений и подставлять по умолчанию, если таковые оказались?

А оно может быть не отрицательным, а за пределами фрейма... Надо выяснить размеры mdi-фрейма и вписаться в него...
Ответить