Загадка про размер окна

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2576
Зарегистрирован: 06 Ноябрь 2014, 12:48

Загадка про размер окна

Сообщение finsoftrz »

На событии event:iconize сказать cycle.
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4143
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Загадка про размер окна

Сообщение kreator »

finsoftrz писал(а): 30 Октябрь 2020, 19:28 На событии event:iconize сказать cycle.
Это я знаю. Но это костыль. Я их не очень люблю. :D
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2576
Зарегистрирован: 06 Ноябрь 2014, 12:48

Загадка про размер окна

Сообщение finsoftrz »

Странно. Это штатный механизм в кларионе. Действительно, зазеркалье. :-)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1164
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

Загадка про размер окна

Сообщение RaFaeL »

kreator писал(а): 30 Октябрь 2020, 19:14 Я просто проверил у себя. И не получил такого эффекта. Сделал по описанию finsoftrz. Открыл два окна в разных потоках в режиме maximize. Из одного окна вызываю форму. Специально на окне формы поставил галку на "maximize" (обычно этого не практикую). Форма изначально не на полный экран (в ini нет отметки об этом). Форма тоже открылась на полный экран. Получилось три окна на полный экран. Для меня поведение "моих" окон логичное. Поэтому и спросил - почему происходит выход из полноэкранного режима?
Если в ini ничего нет, откроется на полный экран. Если форма ранее открывалась и там что-то есть, откроется согласно сохраненным значениям - либо на полный. либо нет
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 5243
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-ДоМу

Загадка про размер окна

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

Если принять WinAPI за икону, то вот такая конструкция позволяет получить в Clarion
реальный размер окна (всегда есть заголовок окна, рамка окна DOUBLE / RESIZE):

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

    If xMyGetWindowRect(W{Prop:Handle}, Loc:MInfo.rcWork)  ! Определить реальные размеры окна через WinAPI
    
       Loc:PixW = Loc:MInfo.rcWork.eRight  - Loc:MInfo.rcWork.eLeft  ! Ширина Window в пикселях WinAPI
       Loc:PixH = Loc:MInfo.rcWork.eBottom - Loc:MInfo.rcWork.eTop   ! Высота Window в пикселях WinAPI
       
       W{Prop:Pixels} = True
       
       Message('WinApi: '  & Loc:PixW & ' x ' & Loc:PixH & '|' & |
               'Clarion: ' & W{Prop:Width}  +  6 + Choose(Int(W{PROP:Resize}) = True,10,0) & ' x ' & |
                             W{Prop:Height} + 29 + Choose(Int(W{PROP:Resize}) = True,10,0) + |
                             Choose(W{PROP:Status,1} = 0,0,21))
    end
А значит мы легко можем получить размер окна W{Prop:Width} / W{Prop:Height} идеально
по размеру рабочей области AppFrame, не зависимо от того развёрнут он или нет. :)
«V» значит Вендетта !
kreator
✯ Ветеран ✯
Сообщения: 4143
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Загадка про размер окна

Сообщение kreator »

RaFaeL писал(а): 30 Октябрь 2020, 21:29 Если в ini ничего нет, откроется на полный экран. Если форма ранее открывалась и там что-то есть, откроется согласно сохраненным значениям - либо на полный. либо нет
С чего это? У меня не так. Форма ведёт себя также как любое окно. Если одно окно в режиме "Maximize", то остальные тоже открываются в режиме "Maximize". У Вас наверно что-то от себя добавлено, что механизм другой.
finsoftrz писал(а): 30 Октябрь 2020, 20:19 Странно. Это штатный механизм в кларионе. Действительно, зазеркалье.
Штатный механизм в Кларионе - иметь свойство объекта, которое позволяет задизейблить контрол. Для кнопки "Maximize" он есть. А писать cycle на событии - это костыль.
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2576
Зарегистрирован: 06 Ноябрь 2014, 12:48

Загадка про размер окна

Сообщение finsoftrz »

kreator писал(а): 31 Октябрь 2020, 11:24 Штатный механизм в Кларионе - иметь свойство объекта, которое позволяет задизейблить контрол. Для кнопки "Maximize" он есть. А писать cycle на событии - это костыль.
Вы это сами придумали? Креативненько. :-)
Similarly, there are several other events whose action can also be terminated by a CYCLE statement: EVENT:Move, EVENT:Size, EVENT:Restore, EVENT:Maximize, and EVENT:Iconize. A CYCLE statement in response to any of these events stops the normal action and prohibits generation of the related EVENT:Moved, EVENT:Sized, EVENT:Restored, EVENT:Maximized, or EVENT:Iconized.
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4143
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Загадка про размер окна

Сообщение kreator »

Вас понесло в какую-то другую сторону. Вопрос был - почему свойства нет задизейблить кнопку? Пользователь присылает претензию - "Почему кнопка есть, а на её нажатие реакции нет?" А вы в ответ высылаете ему вышеприведённый текст. Здорово!
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2576
Зарегистрирован: 06 Ноябрь 2014, 12:48

Загадка про размер окна

Сообщение finsoftrz »

Ну, в вопросе фразы "почему свойства нет задизейблить кнопку" не было. Теперь Вы подумали и более понятно сформулировали вопрос.
Штатного решения, насколько я знаю, нет. Через win api скорее всего можно, если игра стоит свеч.
У себя я при нажатии на кнопку минимизации не свертываю окно полностью, а перевожу его в дефолтное состояние.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1164
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

Загадка про размер окна

Сообщение RaFaeL »

kreator писал(а): 31 Октябрь 2020, 11:24 С чего это? У меня не так. Форма ведёт себя также как любое окно. Если одно окно в режиме "Maximize", то остальные тоже открываются в режиме "Maximize". У Вас наверно что-то от себя добавлено, что механизм другой.
На форме Window behavior -> Use WINDOW Setting и поставить галку Save and Restore Window Location. От себя не добавляли, это штатная фишка ABC
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2576
Зарегистрирован: 06 Ноябрь 2014, 12:48

Загадка про размер окна

Сообщение finsoftrz »

Вот еще идея по поводу ресайза фрейма. На первый взгляд кажется несколько вычурной, но при внимательном рассмотрении рациональное зерно прослеживается.
Смысл в том, что фрейм не ресайзим, а в параметры пользователя закладываем несколько переключателей.
Применительно к своей ситуации.
По умолчанию работаем с максимизированным фреймом. Для мониторов 14-19 дюймов это оптимальный режим работы.
Для больших мониторов вводим градацию:
стандартный размер аля максимизированный фрейм на разрешении 800х600;
увеличенный размер аля максимизированный фрейм на разрешении 1024х768, можно при желании увеличить шрифт или включить правые панели;
широкий размер аля максимизированный фрейм на разрешении 1024х768 плюс запас справа, можно увеличить шрифт и включить правые панели.
Размеры для каждого случая вычисляются относительно якорного контрола на тулбаре.

При таком подходе все окна работают слаженно, без проблем с размещением и прочих прелестей обычного ресайза фрейма. Реализуется очень просто, можно прямо в шаблоны забить. Гамбит в ограничении свободы пользователей произвольно менять размеры фрейма.

Вот сижу и медитирую на монитор. :-) Вроде как разумно, а вроде как и нестрандартное для винды поведение.
frame.jpg
frame.jpg (187.39 КБ) 535 просмотров
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 5243
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-ДоМу

Загадка про размер окна

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

kreator писал(а): 30 Октябрь 2020, 19:18 Запретить iconize так не могу
Может быть конечно Игорь снова пропустил всю глубину дискуссии ... :)
Но ведь отмена иконки в окне делает неактивной кнопку минимизации.
Или я снова не про то что надо ? ;)

1.jpg
1.jpg (69.45 КБ) 536 просмотров
«V» значит Вендетта !
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 5243
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-ДоМу

Загадка про размер окна

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

finsoftrz писал(а): 31 Октябрь 2020, 19:40 Вроде как разумно
Попробуйте включить масштабирование рабочего стола Windows, юзеры это любят.
(извините, что разрушил технологическую идиллию). :)
«V» значит Вендетта !
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2576
Зарегистрирован: 06 Ноябрь 2014, 12:48

Загадка про размер окна

Сообщение finsoftrz »

У нас юзеры работают в основном в терминальном режиме. Там свое масштабирование используется. Меня на мысль навел собственный опыт. Я периодически подключаюсь к клиентам через radmin. И на некоторых компьютерах максимизированный фрейм получается сильно растянутым в ширину. Если я поставлю, например, вариант увеличенного или широкого фрейма, то размещу правые панели прямо под правую руку и мне будет комфортно. А шрифт выглядит вполне хорошим.

А какие еще варианты, чтобы и функционально, и кривизна из разных щелей не ползла? Я знаю, что Вы тоже в поиске. :-)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2576
Зарегистрирован: 06 Ноябрь 2014, 12:48

Загадка про размер окна

Сообщение finsoftrz »

Игорь Столяров писал(а): 31 Октябрь 2020, 19:41
kreator писал(а): 30 Октябрь 2020, 19:18 Запретить iconize так не могу
Может быть конечно Игорь снова пропустил всю глубину дискуссии ... :)
Но ведь отмена иконки в окне делает неактивной кнопку минимизации.
Или я снова не про то что надо ? ;)
Игорь не учел, что, судя по всему, без иконки нельзя. :-)
C6/C11, ШВС, tps/btrieve.
Ответить