Улетевшее окно
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Улетевшее окно
Добрый день!
Любой кларион и любая винда.
Изредка бывает:
1. Вошел в окно, нажал кнопку выполнить.
2. Программа чего-то сделала.
3. В конце работы стоит вызов другого окна с , например, диагностикой и дизабле кнопки.
Вот здесь происходит "зависание" программы - кнопка еще активна, а программа не отвечает и не реагирует ни на какие действия.
Что произошло? Элементарно: окно с диагностикой "улетело" за пределы экрана и там ждет нажатия кнопки ОК, например.
4. Как это полулечится: снимаем программу и удаляем INI - файл. Запускаем прогу снова - и все работает нормально.(до следующего случайного "улета")
А теперь вопрос:
Есть ли какой-то способ все-таки показать "улетевшее" окно, чтобы все-таки нажать там на кнопку!
ПС. Разрешение экрана не помогает.
Спасибо,
Алексей
Любой кларион и любая винда.
Изредка бывает:
1. Вошел в окно, нажал кнопку выполнить.
2. Программа чего-то сделала.
3. В конце работы стоит вызов другого окна с , например, диагностикой и дизабле кнопки.
Вот здесь происходит "зависание" программы - кнопка еще активна, а программа не отвечает и не реагирует ни на какие действия.
Что произошло? Элементарно: окно с диагностикой "улетело" за пределы экрана и там ждет нажатия кнопки ОК, например.
4. Как это полулечится: снимаем программу и удаляем INI - файл. Запускаем прогу снова - и все работает нормально.(до следующего случайного "улета")
А теперь вопрос:
Есть ли какой-то способ все-таки показать "улетевшее" окно, чтобы все-таки нажать там на кнопку!
ПС. Разрешение экрана не помогает.
Спасибо,
Алексей
-
- ✯ Ветеран ✯
- Сообщения: 4983
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 20 раз
Улетевшее окно
Вот это спорно. Но народ сталкивался с проблемой (в ini записаны сумасшедшие координаты. Ведь так?). Поищи по форуму - Игорь Столяров предлагал заплатку.
We are hard at work… for you.
-
- ✯ Ветеран ✯
- Сообщения: 1014
- Зарегистрирован: 08 Июль 2005, 6:48
- Откуда: Россия
- Поблагодарили: 1 раз
Улетевшее окно
хм, продолжаю стесняться, но спрошу - а ини файл обязательно нужен?, ну и если нужен - то что-то мешает в улетающих окнах выключить запись в этот ини?
-
- ✯ Ветеран ✯
- Сообщения: 4983
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 20 раз
Улетевшее окно
Нужно где-то хранить местоположение и размеры окна. Где? Выключил запись - и что?
We are hard at work… for you.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Улетевшее окно
Да.Алексей- Софт-Центр писал(а): ↑08 Сентябрь 2017, 16:12Есть ли какой-то способ все-таки показать "улетевшее" окно, чтобы все-таки нажать там на кнопку!
После Resizer.Resize вставить строку: Window{Prop:Center} = True
Всё.
За теми кто отстал - не возвращаться. (С) Кодекс
-
- ✯ Ветеран ✯
- Сообщения: 1014
- Зарегистрирован: 08 Июль 2005, 6:48
- Откуда: Россия
- Поблагодарили: 1 раз
Улетевшее окно
если окно статично в размере - указать свойстве окна треб.размер и размещение по центру и отменить политику изм. размера и записи в ини....Игорь Столяров писал(а): ↑08 Сентябрь 2017, 16:53Да.Алексей- Софт-Центр писал(а): ↑08 Сентябрь 2017, 16:12Есть ли какой-то способ все-таки показать "улетевшее" окно, чтобы все-таки нажать там на кнопку!
После Resizer.Resize вставить строку: Window{Prop:Center} = True
Всё.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Улетевшее окно
Открываем фрейм в максимизированном режиме при входе в программу. Запоминаем размеры. После восстановления положения дочерних окон из ini проверяем выход за границы. Ну и опция восстановления дефолтных размеров и расположения всех окон должна быть в меню фрейма...
C6/C11, ШВС, tps/btrieve.
Улетевшее окно
Делал перехватчик GetIni-PutIni а заодно и IniMgr, потому как системные глючат на больших Ini-файлах, и есть куча унаследованных модулей, которые пишут в каталог Windows. При запросе Xpos/Ypos/Height/Width программа проверяет, что окно влезет во фрейм и подправляет, если не так...
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Улетевшее окно
Это очень хорошая, хотя и нетривиальная в понимании и реализации, идея.
Странно, что её не сделали в стандартных шаблонах для MDI окон ...
В своё время, по совету Юрия, сделал упрощённый вариант - сразу отпала масса
проблем с запуском программы через терминальный сервер на рабочих станциях
с разными разрешениями экрана.
За теми кто отстал - не возвращаться. (С) Кодекс
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Улетевшее окно
Добрый день!
Задал вопрос и пропал. Сори)))))
Немного ответы не о том. Вопрос не в том как исправить ситуацию, а как завершить процесс в программе. А именно, как все-таки это окно увидеть и нажать таки на кнопку.
Причину сегодня нашёл. В описании окна AT(222,-20,22,22) второй параметр был отрицательным. Проверил всю прогу, нашёл ещё с десяток таких описаний окон. Возможно при конвертации из 5 в 6 или из 6 в ... в 10.
Спасибо всем за ответы
Алексей
Задал вопрос и пропал. Сори)))))
Немного ответы не о том. Вопрос не в том как исправить ситуацию, а как завершить процесс в программе. А именно, как все-таки это окно увидеть и нажать таки на кнопку.
Причину сегодня нашёл. В описании окна AT(222,-20,22,22) второй параметр был отрицательным. Проверил всю прогу, нашёл ещё с десяток таких описаний окон. Возможно при конвертации из 5 в 6 или из 6 в ... в 10.
Спасибо всем за ответы
Алексей
-
- ✯ Ветеран ✯
- Сообщения: 1014
- Зарегистрирован: 08 Июль 2005, 6:48
- Откуда: Россия
- Поблагодарили: 1 раз
Улетевшее окно
ну-ну , вообще спорить| можно долго...Игорь Столяров писал(а): ↑09 Сентябрь 2017, 14:09...
Это очень хорошая, хотя и нетривиальная в понимании и реализации, идея.
...
видимо, все зависит от контекста использования..., в большинстве случаев можно обойтись простыми "штатными" средствами среды - вкл/выключить галочки - не сохранять данные этого окна в ини, запретить растягивать окно, поставить размер и вывод по дефолту при открытии в центр экрана и тп.
т.е. например, в ситуации ТС в первом посте, возможно можно было бы результат сообщения/диагностики вывести стандартным мессенджем с той самой кнопкой [ОК]?
-
- ✯ Ветеран ✯
- Сообщения: 1702
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Улетевшее окно
может все проще, при считывании из ini в параметрах окна не должно быть отрицательных значений и подставлять по умолчанию, если таковые оказались?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Улетевшее окно
Ну вот у тебя приложение из пары десятков 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 временный каталог чистит, можно убрать, если не...
Были написаны процедуры MyGetIni и MyPutIni ( аналоги GetIni и PutIni, только на Кларион) и процедура SetMyIniProc, запускающаяся при инициализации приложения и подменяющая стандартные GetIni/PutIni на мои функции. Запись в c:\windows\program.ini подменялась на %LocalAppData%\...\program.ini, более того, если первый файл был, а второго не было, происходило копирование. Ну и с окнами разобрался. В принципе, это где-то есть на форуме... ну и кусок из работающей программы https://mega.nz/#!EgJC3T7L!XCoPZyrJrVk- ... 7xzQADMEec .
В этом куске нет переадресации ini-файла, а ещё SetMyIniProc временный каталог чистит, можно убрать, если не...
Улетевшее окно
gopstop2007 писал(а): ↑09 Сентябрь 2017, 16:07может все проще, при считывании из ini в параметрах окна не должно быть отрицательных значений и подставлять по умолчанию, если таковые оказались?
А оно может быть не отрицательным, а за пределами фрейма... Надо выяснить размеры mdi-фрейма и вписаться в него...