Страница 1 из 1
Нетрадиционное поведение Resizer
Добавлено: 12 Ноябрь 2015, 18:23
Игорь Столяров
Привет всем !
Не могу сказать, что в последнем релизе C10, но точно недавно - появился интересный глюк.
В MDI, все работает, потом вдруг - открываешь окно .... а его нет. Сначала думал, какой-то
сбой. Сбросил настройки интерфейса программы и все опять работает.
Через два дня опять повторилось, потом еще и еще ... Решил разобраться.
В реестре нашел вот такие интересные данные.
Откуда может быть вообще такой порядок цифр с координатами окон ?!
Нетрадиционное поведение Resizer
Добавлено: 12 Ноябрь 2015, 21:04
kreator
Игорь, как раз сегодня мы тоже обнаружили подобное. Но, у нас не в реестре, а в INI так произошло. Но, кажется, не с последним релизом, а с пред-предыдущим, 10925 что ли. Пока разовый случай. Я минут 15 поэкспериментировал на 11975, не получилось повторить. Будем ждать повторов, тем более есть ещё кто-то с таким случаем.
Нетрадиционное поведение Resizer
Добавлено: 12 Ноябрь 2015, 21:13
Игорь Столяров
kreator писал(а): Но, у нас не в реестре, а в INI так произошло
Ну этот как раз без разницы - пишется куда настроили. Я в реестр, Вы в INI ...
Здесь важно из какой места Resizer берет эти цифры. А повторы, будут. Глюк стабильный, я его отжал.
В принципе, была идея залезть в класс и поставить отсечку на координаты окон.
Но тоже не однозначно. Кто-то работает на нетбуках, кто-то на мониторах 4K ...
Нетрадиционное поведение Resizer
Добавлено: 12 Ноябрь 2015, 21:44
kreator
Игорь Столяров писал(а): Глюк стабильный, я его отжал.
Ну и где это? Конкретная ситуация известна? А то у нас - один раз (не ...).
Нетрадиционное поведение Resizer
Добавлено: 12 Ноябрь 2015, 21:53
Игорь Столяров
kreator писал(а): Конкретная ситуация известна?
У меня была проблема с пропадающими окнами (которые открываются где-то на орбите Марса, судя по координатам).

Что известно:
- Известно, что это глюк именно Clarion, точнее одного из последних релизов.
- Известно, что он связан с некорректной работой Resizer.
- Известно, что сам класс не менялся более года (abresize.clw от 31.07.2014 г.)
- Логично предположить, что проблема связана с RunTime, скорее всего при каких-то условиях.
- Вычисление конкретных условий возникновение проблемы в общем-то бессмысленно - исправить не сможем.
(то же самое, как с недавним глюком хоткеев на закладках)
- Можно только проверять координаты и подозрительно большие обнулять ...
Это столь очевидно, что я и писать не стал ...

Нетрадиционное поведение Resizer
Добавлено: 12 Ноябрь 2015, 22:13
RaFaeL
Помнится, когда-то давно в С55 была точно такая же проблема. Закончилось вроде как тем, что перешли на другой ресайзер
Нетрадиционное поведение Resizer
Добавлено: 13 Ноябрь 2015, 13:49
Yufil
MDI-окно легко можно загнать за границы фрейма, а позиция отсчитывается именно от фрейма. Вот и проблема...
Правда, координаты великоваты что-то, но и этого можно добиться.
Можно исправить метод Fetch для Iniclass, чтобы возвращал позицию окна, явно видимую на экране.
Или перехватывать GetIni, чтобы явно поправлять неверно сохранённую позицию.
Собственно, делал оба варианта
Нетрадиционное поведение Resizer
Добавлено: 18 Ноябрь 2015, 10:01
Игорь Столяров
Yufil писал(а): Можно исправить метод Fetch для Iniclass
Спасибо ! Попробовал сделать так:
Код: Выделить всё
INIClass.FetchWindowInfo PROCEDURE (STRING ProcedureName, *WindowInfo Info)
....
Info.X = _nopos
Info.Y = _nopos
Info.W = _nopos
Info.H = _nopos
SELF.Fetch (ProcedureName, 'XPos', Info.X)
SELF.Fetch (ProcedureName, 'YPos', Info.Y)
SELF.Fetch (ProcedureName, 'Width', Info.W)
SELF.Fetch (ProcedureName, 'Height', Info.H)
!!! --- Коррекция координат
If ~InRange(Info.X,1,1600) then Info.X = _nopos.
If ~InRange(Info.Y,1,1600) then Info.Y = _nopos.
!!! ---
Info.Got = TRUE
RETURN
Вроде бы это должно решить вопрос. Тестируем.

Нетрадиционное поведение Resizer
Добавлено: 18 Ноябрь 2015, 10:07
Admin
Игорь Столяров писал(а):1600
Под свой экран заточил!

Нетрадиционное поведение Resizer
Добавлено: 18 Ноябрь 2015, 10:10
Игорь Столяров
Ну мой экран показывает где-то в районе 800 ...
Я решил, а вдруг кто-то живет лучше меня, может быть даже в два раза ? И умножил на два.

Нетрадиционное поведение Resizer
Добавлено: 18 Ноябрь 2015, 10:13
Admin
Т.е. у тебя все таки за края вылезет?
Нетрадиционное поведение Resizer
Добавлено: 18 Ноябрь 2015, 10:17
Игорь Столяров
Да. Но тут скорее попытка убрать описанный глюк Resizer, чем отслеживание попадания окна в Frame.
Хотя проблему со сдвигом окна влево и вверх за пределы FRAME - этот незамысловатый код убирает.
