Restore Window Location = OFF

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3711
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Restore Window Location = OFF

Сообщение Игорь Столяров » 07 Ноябрь 2018, 19:48

Привет всем ! :)

Подскажите пожалуйста, а можно как-то в одном месте выключить опцию
"Save and Restore Windows Location" для всего приложения ?

Причём действие должно соответствовать названию, т.е.
РАЗМЕР и РАЗВЁРНУТОСТЬ окна должны сохраняться.

Эпизодические смещения MDI окон за границу AppFrame в C10
начали уже немного выбешивать. Не припоминаю такого в C63 … :(

Заранее спасибо !
«V» значит Вендетта !

Yufil
Ветеран движения
Сообщения: 1035
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

Restore Window Location = OFF

Сообщение Yufil » 08 Ноябрь 2018, 11:37

Раньше было так:
Размеры окна доставались из ini-файла. Я сделал перехват GetIni / Putini ( подменял стандартные вызовы на свои процедуры ).
При этом
- прописанный в конфигурациях ini-файл искался в %APPDATA% ( на локальном компьютере и свой у каждого юзера ),
- снималось ограничение на размер ini-файла
- и, наконец, параметры xpos/ypos для MDI-окон правил, чтобы они не вылазили за пределы фрейма.

https://mega.co.nz/#!EgJC3T7L!XCoPZyrJr ... 7xzQADMEec

Как сейчас - не знаю...

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3711
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Restore Window Location = OFF

Сообщение Игорь Столяров » 08 Ноябрь 2018, 11:50

Yufil писал(а):
08 Ноябрь 2018, 11:37
- и, наконец, параметры xpos/ypos для MDI-окон правил, чтобы они не вылазили за пределы фрейма.
Спасибо ! Вот это место очень интересное. Возможно это и есть решение вопроса …
Т.е. не надо отключать восстановление позиции окна при открытии, а просто проверять "вписывается" ли оно в AppFrame ...
«V» значит Вендетта !

kreator
Ветеран
Сообщения: 2961
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Restore Window Location = OFF

Сообщение kreator » 08 Ноябрь 2018, 11:54

В глобальных свойствах 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.
Я не использовал.
We are hard at work… for you. :)

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3711
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Restore Window Location = OFF

Сообщение Игорь Столяров » 08 Ноябрь 2018, 12:10

kreator писал(а):
08 Ноябрь 2018, 11:54
Я не использовал.
Я использовал. Работает в полном соответствии с описанием, т.е. вырубает сохранение / восстановление "size and position".
А надо выключить только "position". :)
«V» значит Вендетта !

kreator
Ветеран
Сообщения: 2961
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Restore Window Location = OFF

Сообщение kreator » 08 Ноябрь 2018, 14:03

А изменение метода класса не предлагать?
We are hard at work… for you. :)

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3711
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Restore Window Location = OFF

Сообщение Игорь Столяров » 08 Ноябрь 2018, 14:15

kreator писал(а):
08 Ноябрь 2018, 14:03
А изменение метода класса не предлагать?
Предлагать ! :)
«V» значит Вендетта !

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 877
Зарегистрирован: 06 Ноябрь 2014, 12:48

Restore Window Location = OFF

Сообщение finsoftrz » 08 Ноябрь 2018, 15:54

После восстановления позиции окна проверять его координаты. Если улетело за пределы фрейма, присваивать дефолтные. Кривые координаты сохраняются обычно из-за переключения между программами в неподходящий момент. Я еще на всякий случай включаю в меню "Восстановить стандартные параметры окон". Лет 15 назад в клалист точно обсуждалось. И в memo вроде такое видел... :-)
Рязань решает.

kreator
Ветеран
Сообщения: 2961
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Restore Window Location = OFF

Сообщение kreator » 08 Ноябрь 2018, 16:19

В 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 и подвязать её значение к шаблонам и классам не знаю. Отдельный шаблон для этого тоже как-то в голове не укладывается.
Я практикую внедрение своего функционала в стандартные шаблоны и классы через пользовательские глобальные настройки. Если очень надо, можно более глубоко поработать с классом и шаблонами.
We are hard at work… for you. :)

Yufil
Ветеран движения
Сообщения: 1035
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

Restore Window Location = OFF

Сообщение Yufil » 08 Ноябрь 2018, 16:40

Может быть, залезть в глобальные вставки ( ABC Objects -> Ini Manager -> Fetch ) - и вставить что-нибудь такое

Код: Выделить всё

Если запрашивается 'xpos' или 'ypos' или 'width' или 'height' 
  И текущее окно - MDI 
  Прочитать позицию фрейма

      SetTarget(,1) 
      0{Prop:Pixels} = 1  
      Getposition( 0,.....); 
      SetTarget() 

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

Ответить