Ресайзер
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
Ресайзер
Есть окно с ресайзом. В нем некоторые контролы приклеены к левому краю, некоторые не приклеены и ездят при ресайзе. У окна есть минимальная ширина X. Если окно программы развернуто, то все ОК. Сворачиваем окно программы собственно с полного экрана в окно, начинаем уменьшать по ширине. Контролы едут влево до момента, пока окно программы не станет примерно равным по ширине минимальному размеру окна, далее пропадают за правой границей окна. Начинаем увеличивать окно по ширине. Контролы до самого последнего момента не видны, так как вместе с правой границей едут вправо где-то за краем окна. Вопрос: что где поправить, чтобы эти контролы вправо не ехали, пока окно программы не станет равно или больше минимального размера окна? Никто не правил? В данном случае имеется в виду стандартный ABC ресайзер, посмотрел в другом там та же ерунда, видимо сделано по аналогии
-
- Новичок
- Сообщения: 18
- Зарегистрирован: 27 Август 2012, 22:59
Ресайзер
стандратный ресайзер неудобный, всегда пользовался ресайзером Струменского. в архиве шаблон и описание под клару 4, и еще 1 архив я переделал под 10 клару
- Вложения
-
- RSZ_4.zip
- (27.58 КБ) 135 скачиваний
-
- resizerx_10.zip
- (5.93 КБ) 145 скачиваний
-
- Новичок
- Сообщения: 18
- Зарегистрирован: 27 Август 2012, 22:59
Ресайзер
тогда я не понял вопрос...
вот есть у меня, к примеру, окно...я ставлю Min window width 0 (или даже -40) и Min window height 0 (или -60, к примеру)
и есть внизу 2 кнопки - 1 ставлю LeftBottom, 2 - Right bottom
делаю ресайз - правая кнопка, соответственно, ездит при ресайзе - левая - нет. когда ширина окна меньше минимума (ну, поставил -40), то кнопка начинает перекрываться границей окна...ну так а как еще? Или выставлять жестко минимальные границы и все контролы ставить под минималку...или я что не так понял?
З.Ы. там много стратегий ресайза - разберитесь с ними, подозреваю., у вас стоит не Right bottom, а resize, потому кнопка "улетает" или перекрывает другие контролы при размере экрана меньше минимального
вот есть у меня, к примеру, окно...я ставлю Min window width 0 (или даже -40) и Min window height 0 (или -60, к примеру)
и есть внизу 2 кнопки - 1 ставлю LeftBottom, 2 - Right bottom
делаю ресайз - правая кнопка, соответственно, ездит при ресайзе - левая - нет. когда ширина окна меньше минимума (ну, поставил -40), то кнопка начинает перекрываться границей окна...ну так а как еще? Или выставлять жестко минимальные границы и все контролы ставить под минималку...или я что не так понял?
З.Ы. там много стратегий ресайза - разберитесь с ними, подозреваю., у вас стоит не Right bottom, а resize, потому кнопка "улетает" или перекрывает другие контролы при размере экрана меньше минимального
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
Ресайзер
Минимально стоит допустим 500
То что перекрывается это нормально! Ненормально что когда потом тянешь обратно - кнопки не показываются
Имеется в виду уменьшение не изменением рахмеров процедуры, а уменьшением размеров приложения/ На картинках
1. Нормальный режим, окно приложения больше минимума окна, все на месте
2. Тянем окно уже чем процедура, кнопки уехали
3. Тянем окно обратно - вширь. Кнопки не показались. а уехали вместе с правой границей окна!
А надо чтобы остались как на картинке 1
То что перекрывается это нормально! Ненормально что когда потом тянешь обратно - кнопки не показываются
Имеется в виду уменьшение не изменением рахмеров процедуры, а уменьшением размеров приложения/ На картинках
1. Нормальный режим, окно приложения больше минимума окна, все на месте
2. Тянем окно уже чем процедура, кнопки уехали
3. Тянем окно обратно - вширь. Кнопки не показались. а уехали вместе с правой границей окна!
А надо чтобы остались как на картинке 1
Ресайзер
А не пробовал Anchor? Cамый простой и наглядный вариант....
Включаешь, а потом прямо в редакторе окна прилепляешь контролы к краям, обычно вполне достаточно.
Ручная рихтовка выполняется внутри метода Resizer.resize(). Можно посмотреть позиции и размеры отресайзенных объектов и под них подстроиться (например, если нужно ресайзить картинку без искажения пропорций)
Включаешь, а потом прямо в редакторе окна прилепляешь контролы к краям, обычно вполне достаточно.
Ручная рихтовка выполняется внутри метода Resizer.resize(). Можно посмотреть позиции и размеры отресайзенных объектов и под них подстроиться (например, если нужно ресайзить картинку без искажения пропорций)
-
- ✯ Ветеран ✯
- Сообщения: 5159
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Ресайзер
RaFaeL, а какая стратегия ресайза? При разной стратегии будут разные результаты. Я, например, в подавляющем количестве случаев использую Surface. В этой стратегии контролы едут к ближайшей границе, но только если не указать override. И при изменении размеров окна может так случиться, что сначала конторолы едут в одну сторону, а потом в другую, против здравого смысла (повторю, если не писать override). Я кстати вообще не понимаю зачем делать минимальный размер такой, что не видны контролы. Я делаю минимальный размер окна таким, что всё видно. И ресайз работает без проблем при расширении. А при сжатии всё встаёт на изначально разработанные мной места. Ни в коем случае не настаиваю и не учу.
Сколько раз не пробовал, не понимаю стратегии. Не идёт и всё. У SV есть пример на эту тему?Yufil писал(а):А не пробовал Anchor? Cамый простой и наглядный вариант....
We are hard at work… for you. 

- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
Ресайзер
Стратегия Spreadkreator писал(а): Я кстати вообще не понимаю зачем делать минимальный размер такой, что не видны контролы. Я делаю минимальный размер окна таким, что всё видно. И ресайз работает без проблем при расширении. А при сжатии всё встаёт на изначально разработанные мной места. Ни в коем случае не настаиваю и не учу.
Минимальный размер окна именно такой, чтобы было всё видно, если изменять размер окна внутри приложения. В этом случае просто не получится сделать чтобы кнопки пропали
Но вот минимальный размер приложения - другой разговор
Т.е. пользователь приложение в окно свернул (ну надо ему сравнить два окна разных программ, например), у него кнопки пропали. Он его увеличивает чтобы кнопки появились - а кнопки так и не появляются пока на полный экран не развернешь
Последний раз редактировалось RaFaeL 21 Июль 2016, 22:30, всего редактировалось 1 раз.
Ресайзер
В режиме Anchor ресайзинг устанавливается на каждый контрол в редакторе экрана.
1. В Extension для ресайзинга указываем "USE Anchor"
2. Идём в редактор окна. Для каждого контрола в свойствах Actions->Set anchors... указываем кнопки, прикрепляющие этот контрол к краям экрана (верхнему, нижнему, левому и правому). Следует иметь в виду, что свойство Set anchors не видно, если не указан режим ресайзинга Use Anchor.
Например, кнопку в правом нижнем углу экрана прицепим к правому и нижнему краям, Browse Listbox - ко всем краям сразу, а надпись сверху вдоль всего экрана - к верхнему, левому и правому краям.
Возможностей по сравнению с другими ресайзерами поменьше, но зато просто и наглядно и не так напряжно с затратами интеллекта.
Ну и если совсем хреново, например, нужно соблюсти пропорции картинки. Я кладу на экран невидимый прямоугольник, прицепляю его ко всем углам, а в методе Resizer.Resize() вписываю картинку в текущие размеры прямоугольника.
1. В Extension для ресайзинга указываем "USE Anchor"
2. Идём в редактор окна. Для каждого контрола в свойствах Actions->Set anchors... указываем кнопки, прикрепляющие этот контрол к краям экрана (верхнему, нижнему, левому и правому). Следует иметь в виду, что свойство Set anchors не видно, если не указан режим ресайзинга Use Anchor.
Например, кнопку в правом нижнем углу экрана прицепим к правому и нижнему краям, Browse Listbox - ко всем краям сразу, а надпись сверху вдоль всего экрана - к верхнему, левому и правому краям.
Возможностей по сравнению с другими ресайзерами поменьше, но зато просто и наглядно и не так напряжно с затратами интеллекта.
Ну и если совсем хреново, например, нужно соблюсти пропорции картинки. Я кладу на экран невидимый прямоугольник, прицепляю его ко всем углам, а в методе Resizer.Resize() вписываю картинку в текущие размеры прямоугольника.
-
- ✯ Ветеран ✯
- Сообщения: 5159
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Ресайзер
Я попробовал смоделировать тоже самое у себя (С10+Win10). То же самое, причём и на Spread и на Surface. Но только в режиме окна Maximize. Предлагаю вариант, который вроде бы помогает. Минимальные размеры окон внутри фрейма сделать такими же или меньше минимальных размеров фрейма. У меня получается так: фрейм уменьшаю, окно тоже уменьшается, кнопки едут куда надо, как только достигнут минимальный размер окна, кнопки справа уходят за границу фрейма и окно "клинит". Либо кнопки справа переносить влево. Но List тоже клинит, я у себя заметил по вертикали.
Наверно, никто лечить не собирается, потому что MDI режим у MS не в фаворе.
Наверно, никто лечить не собирается, потому что MDI режим у MS не в фаворе.
We are hard at work… for you. 

- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1411
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
Ресайзер
А он не проходит, если мы уменьшаем приложение на ширину меньшую, чем минимальный размер окна
Отсюда и проблема - затем увеличиваем, но предыдущий сдвиг то не учтен
Метод вызывается методом TakeResize который висит вот на этом
Код: Выделить всё
REGISTEREVENT(EVENT:DoResize,ADDRESS(SELF.TakeResize),ADDRESS(SELF))
Куда дальше копать?
-
- Новичок
- Сообщения: 18
- Зарегистрирован: 27 Август 2012, 22:59
Ресайзер
какой же вы упертый...я вам скинул шаблоны ресайза - там таких проблем нет, аттачу пример, в нем окно можно сворачивать меньше минимального размера, стоит -40, -40, шаблон там же в архиве - все работает четко, никакого гемора (пример под 10 клару)
-
- Новичок
- Сообщения: 18
- Зарегистрирован: 27 Август 2012, 22:59
Ресайзер
пардон, вник в проблему...тут действительно, либо у mdi окна не делать maximize - тогда при ресайзе фрейма все ок либо фрейм держать всегда maximize, либо минимальные размеры фрейма делать под минимальные размера mdi окна