Страница 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() 

  Если текущее окно невидимо - вернуть что-нибудь подходящее...