Страница 1 из 1
Restore Window Location = OFF
Добавлено: 07 Ноябрь 2018, 19:48
Игорь Столяров
Привет всем !
Подскажите пожалуйста, а можно как-то в одном месте выключить опцию
"Save and Restore Windows Location" для всего приложения ?
Причём действие должно соответствовать названию, т.е.
РАЗМЕР и РАЗВЁРНУТОСТЬ окна должны сохраняться.
Эпизодические смещения MDI окон за границу AppFrame в C10
начали уже немного выбешивать. Не припоминаю такого в C63 …
Заранее спасибо !
Restore Window Location = OFF
Добавлено: 08 Ноябрь 2018, 11:37
Yufil
Раньше было так:
Размеры окна доставались из ini-файла. Я сделал перехват GetIni / Putini ( подменял стандартные вызовы на свои процедуры ).
При этом
- прописанный в конфигурациях ini-файл искался в %APPDATA% ( на локальном компьютере и свой у каждого юзера ),
- снималось ограничение на размер ini-файла
- и, наконец, параметры xpos/ypos для MDI-окон правил, чтобы они не вылазили за пределы фрейма.
https://mega.co.nz/#!EgJC3T7L!XCoPZyrJr ... 7xzQADMEec
Как сейчас - не знаю...
Restore Window Location = OFF
Добавлено: 08 Ноябрь 2018, 11:50
Игорь Столяров
Yufil писал(а): ↑08 Ноябрь 2018, 11:37- и, наконец, параметры xpos/ypos для MDI-окон правил, чтобы они не вылазили за пределы фрейма.
Спасибо ! Вот это место очень интересное. Возможно это и есть решение вопроса …
Т.е. не надо отключать восстановление позиции окна при открытии, а просто проверять "вписывается" ли оно в AppFrame ...
Restore Window Location = OFF
Добавлено: 08 Ноябрь 2018, 11:54
kreator
В глобальных свойствах App есть вот это:
Disable Save/Restore Window Locations
Check this box if you would like to omit the last window size and position from being stored in the non-volatile storage source for all window structures in your application. You can locally enable only the windows that you want to maintain at the target procedure level.
Я не использовал.
Restore Window Location = OFF
Добавлено: 08 Ноябрь 2018, 12:10
Игорь Столяров
kreator писал(а): ↑08 Ноябрь 2018, 11:54Я не использовал.
Я использовал. Работает в полном соответствии с описанием, т.е. вырубает сохранение / восстановление "size and position".
А надо выключить только "position".
Restore Window Location = OFF
Добавлено: 08 Ноябрь 2018, 14:03
kreator
А изменение метода класса не предлагать?
Restore Window Location = OFF
Добавлено: 08 Ноябрь 2018, 14:15
Игорь Столяров
kreator писал(а): ↑08 Ноябрь 2018, 14:03А изменение метода класса не предлагать?
Предлагать !
Restore Window Location = OFF
Добавлено: 08 Ноябрь 2018, 15:54
finsoftrz
После восстановления позиции окна проверять его координаты. Если улетело за пределы фрейма, присваивать дефолтные. Кривые координаты сохраняются обычно из-за переключения между программами в неподходящий момент. Я еще на всякий случай включаю в меню "Восстановить стандартные параметры окон". Лет 15 назад в клалист точно обсуждалось. И в memo вроде такое видел...
Restore Window Location = OFF
Добавлено: 08 Ноябрь 2018, 16:19
kreator
В abutils.clw находим нужный метод и закрываем две строчки:
Код: Выделить всё
INIClass.Update PROCEDURE (STRING ProcedureName, WINDOW W)
Info LIKE(WindowInfo),AUTO
CODE
Info.Maximized = CHOOSE (W {PROP:Maximize} <> 0)
Info.Minimized = CHOOSE (W {PROP:Iconize} <> 0)
Info.X = _nopos
Info.Y = _nopos
Info.W = _nopos
Info.H = _nopos
IF NOT Info.Minimized AND NOT Info.Maximized
! Info.X = W {PROP:XPos} Запрещаем сохранение местоположения
! Info.Y = W {PROP:YPos} Запрещаем сохранение местоположения
IF W {PROP:Resize}
Info.W = W {PROP:Width}
Info.H = W {PROP:Height}
END
END
SELF.UpdateWindowInfo (ProcedureName, Info)
RETURN
Как поставить соответствующую галку в свойствах App и подвязать её значение к шаблонам и классам не знаю. Отдельный шаблон для этого тоже как-то в голове не укладывается.
Я практикую внедрение своего функционала в стандартные шаблоны и классы через пользовательские глобальные настройки. Если очень надо, можно более глубоко поработать с классом и шаблонами.
Restore Window Location = OFF
Добавлено: 08 Ноябрь 2018, 16:40
Yufil
Может быть, залезть в глобальные вставки ( ABC Objects -> Ini Manager -> Fetch ) - и вставить что-нибудь такое
Код: Выделить всё
Если запрашивается 'xpos' или 'ypos' или 'width' или 'height'
И текущее окно - MDI
Прочитать позицию фрейма
SetTarget(,1)
0{Prop:Pixels} = 1
Getposition( 0,.....);
SetTarget()
Если текущее окно невидимо - вернуть что-нибудь подходящее...