Страница 6 из 10

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

Добавлено: 30 Октябрь 2020, 19:28
finsoftrz
На событии event:iconize сказать cycle.

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

Добавлено: 30 Октябрь 2020, 19:50
kreator
finsoftrz писал(а): 30 Октябрь 2020, 19:28 На событии event:iconize сказать cycle.
Это я знаю. Но это костыль. Я их не очень люблю. :D

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

Добавлено: 30 Октябрь 2020, 20:19
finsoftrz
Странно. Это штатный механизм в кларионе. Действительно, зазеркалье. :-)

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

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

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

Добавлено: 31 Октябрь 2020, 10:28
Игорь Столяров
Если принять 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, не зависимо от того развёрнут он или нет. :)

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

Добавлено: 31 Октябрь 2020, 11:24
kreator
RaFaeL писал(а): 30 Октябрь 2020, 21:29 Если в ini ничего нет, откроется на полный экран. Если форма ранее открывалась и там что-то есть, откроется согласно сохраненным значениям - либо на полный. либо нет
С чего это? У меня не так. Форма ведёт себя также как любое окно. Если одно окно в режиме "Maximize", то остальные тоже открываются в режиме "Maximize". У Вас наверно что-то от себя добавлено, что механизм другой.
finsoftrz писал(а): 30 Октябрь 2020, 20:19 Странно. Это штатный механизм в кларионе. Действительно, зазеркалье.
Штатный механизм в Кларионе - иметь свойство объекта, которое позволяет задизейблить контрол. Для кнопки "Maximize" он есть. А писать cycle на событии - это костыль.

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

Добавлено: 31 Октябрь 2020, 12:29
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.

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

Добавлено: 31 Октябрь 2020, 16:02
kreator
Вас понесло в какую-то другую сторону. Вопрос был - почему свойства нет задизейблить кнопку? Пользователь присылает претензию - "Почему кнопка есть, а на её нажатие реакции нет?" А вы в ответ высылаете ему вышеприведённый текст. Здорово!

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

Добавлено: 31 Октябрь 2020, 16:43
finsoftrz
Ну, в вопросе фразы "почему свойства нет задизейблить кнопку" не было. Теперь Вы подумали и более понятно сформулировали вопрос.
Штатного решения, насколько я знаю, нет. Через win api скорее всего можно, если игра стоит свеч.
У себя я при нажатии на кнопку минимизации не свертываю окно полностью, а перевожу его в дефолтное состояние.

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

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

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

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

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

Вот сижу и медитирую на монитор. :-) Вроде как разумно, а вроде как и нестрандартное для винды поведение.
frame.jpg
frame.jpg (187.39 КБ) 1999 просмотров

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

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

1.jpg
1.jpg (69.45 КБ) 2000 просмотров

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

Добавлено: 31 Октябрь 2020, 19:44
Игорь Столяров
finsoftrz писал(а): 31 Октябрь 2020, 19:40 Вроде как разумно
Попробуйте включить масштабирование рабочего стола Windows, юзеры это любят.
(извините, что разрушил технологическую идиллию). :)

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

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

А какие еще варианты, чтобы и функционально, и кривизна из разных щелей не ползла? Я знаю, что Вы тоже в поиске. :-)

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

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