Restore Window Location = OFF

Clarion, Clarion 7

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

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

Restore Window Location = OFF

Сообщение Игорь Столяров »

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

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

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

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

Заранее спасибо !
За теми кто отстал - не возвращаться. (С) Кодекс
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Restore Window Location = OFF

Сообщение Yufil »

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

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

Как сейчас - не знаю...
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Restore Window Location = OFF

Сообщение Игорь Столяров »

Yufil писал(а): 08 Ноябрь 2018, 11:37- и, наконец, параметры xpos/ypos для MDI-окон правил, чтобы они не вылазили за пределы фрейма.
Спасибо ! Вот это место очень интересное. Возможно это и есть решение вопроса …
Т.е. не надо отключать восстановление позиции окна при открытии, а просто проверять "вписывается" ли оно в AppFrame ...
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Restore Window Location = OFF

Сообщение 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.
Я не использовал.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Restore Window Location = OFF

Сообщение Игорь Столяров »

kreator писал(а): 08 Ноябрь 2018, 11:54Я не использовал.
Я использовал. Работает в полном соответствии с описанием, т.е. вырубает сохранение / восстановление "size and position".
А надо выключить только "position". :)
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Restore Window Location = OFF

Сообщение kreator »

А изменение метода класса не предлагать?
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Restore Window Location = OFF

Сообщение Игорь Столяров »

kreator писал(а): 08 Ноябрь 2018, 14:03А изменение метода класса не предлагать?
Предлагать ! :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Restore Window Location = OFF

Сообщение finsoftrz »

После восстановления позиции окна проверять его координаты. Если улетело за пределы фрейма, присваивать дефолтные. Кривые координаты сохраняются обычно из-за переключения между программами в неподходящий момент. Я еще на всякий случай включаю в меню "Восстановить стандартные параметры окон". Лет 15 назад в клалист точно обсуждалось. И в memo вроде такое видел... :-)
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Restore Window Location = OFF

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

Restore Window Location = OFF

Сообщение Yufil »

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

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

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

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

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