Страница 1 из 2

Ресайзер

Добавлено: 21 Июль 2016, 17:13
RaFaeL
Есть окно с ресайзом. В нем некоторые контролы приклеены к левому краю, некоторые не приклеены и ездят при ресайзе. У окна есть минимальная ширина X. Если окно программы развернуто, то все ОК. Сворачиваем окно программы собственно с полного экрана в окно, начинаем уменьшать по ширине. Контролы едут влево до момента, пока окно программы не станет примерно равным по ширине минимальному размеру окна, далее пропадают за правой границей окна. Начинаем увеличивать окно по ширине. Контролы до самого последнего момента не видны, так как вместе с правой границей едут вправо где-то за краем окна. Вопрос: что где поправить, чтобы эти контролы вправо не ехали, пока окно программы не станет равно или больше минимального размера окна? Никто не правил? В данном случае имеется в виду стандартный ABC ресайзер, посмотрел в другом там та же ерунда, видимо сделано по аналогии

Ресайзер

Добавлено: 21 Июль 2016, 17:23
Kromeshnik
стандратный ресайзер неудобный, всегда пользовался ресайзером Струменского. в архиве шаблон и описание под клару 4, и еще 1 архив я переделал под 10 клару

Ресайзер

Добавлено: 21 Июль 2016, 17:44
RaFaeL
Так в нем то же самое

Ресайзер

Добавлено: 21 Июль 2016, 17:56
Kromeshnik
тогда я не понял вопрос...
вот есть у меня, к примеру, окно...я ставлю Min window width 0 (или даже -40) и Min window height 0 (или -60, к примеру)
и есть внизу 2 кнопки - 1 ставлю LeftBottom, 2 - Right bottom
делаю ресайз - правая кнопка, соответственно, ездит при ресайзе - левая - нет. когда ширина окна меньше минимума (ну, поставил -40), то кнопка начинает перекрываться границей окна...ну так а как еще? Или выставлять жестко минимальные границы и все контролы ставить под минималку...или я что не так понял?

З.Ы. там много стратегий ресайза - разберитесь с ними, подозреваю., у вас стоит не Right bottom, а resize, потому кнопка "улетает" или перекрывает другие контролы при размере экрана меньше минимального

Ресайзер

Добавлено: 21 Июль 2016, 19:26
RaFaeL
Минимально стоит допустим 500
То что перекрывается это нормально! Ненормально что когда потом тянешь обратно - кнопки не показываются
Имеется в виду уменьшение не изменением рахмеров процедуры, а уменьшением размеров приложения/ На картинках

1. Нормальный режим, окно приложения больше минимума окна, все на месте
resize1.png
2. Тянем окно уже чем процедура, кнопки уехали
resize2.png
3. Тянем окно обратно - вширь. Кнопки не показались. а уехали вместе с правой границей окна!
resize3.png
А надо чтобы остались как на картинке 1

Ресайзер

Добавлено: 21 Июль 2016, 19:30
Yufil
А не пробовал Anchor? Cамый простой и наглядный вариант....
Включаешь, а потом прямо в редакторе окна прилепляешь контролы к краям, обычно вполне достаточно.
Ручная рихтовка выполняется внутри метода Resizer.resize(). Можно посмотреть позиции и размеры отресайзенных объектов и под них подстроиться (например, если нужно ресайзить картинку без искажения пропорций)

Ресайзер

Добавлено: 21 Июль 2016, 21:03
kreator
RaFaeL, а какая стратегия ресайза? При разной стратегии будут разные результаты. Я, например, в подавляющем количестве случаев использую Surface. В этой стратегии контролы едут к ближайшей границе, но только если не указать override. И при изменении размеров окна может так случиться, что сначала конторолы едут в одну сторону, а потом в другую, против здравого смысла (повторю, если не писать override). Я кстати вообще не понимаю зачем делать минимальный размер такой, что не видны контролы. Я делаю минимальный размер окна таким, что всё видно. И ресайз работает без проблем при расширении. А при сжатии всё встаёт на изначально разработанные мной места. Ни в коем случае не настаиваю и не учу.
Yufil писал(а):А не пробовал Anchor? Cамый простой и наглядный вариант....
Сколько раз не пробовал, не понимаю стратегии. Не идёт и всё. У SV есть пример на эту тему?

Ресайзер

Добавлено: 21 Июль 2016, 22:26
RaFaeL
kreator писал(а): Я кстати вообще не понимаю зачем делать минимальный размер такой, что не видны контролы. Я делаю минимальный размер окна таким, что всё видно. И ресайз работает без проблем при расширении. А при сжатии всё встаёт на изначально разработанные мной места. Ни в коем случае не настаиваю и не учу.
Стратегия Spread
Минимальный размер окна именно такой, чтобы было всё видно, если изменять размер окна внутри приложения. В этом случае просто не получится сделать чтобы кнопки пропали
Но вот минимальный размер приложения - другой разговор
Т.е. пользователь приложение в окно свернул (ну надо ему сравнить два окна разных программ, например), у него кнопки пропали. Он его увеличивает чтобы кнопки появились - а кнопки так и не появляются пока на полный экран не развернешь

Ресайзер

Добавлено: 21 Июль 2016, 22:28
Yufil
В режиме Anchor ресайзинг устанавливается на каждый контрол в редакторе экрана.
1. В Extension для ресайзинга указываем "USE Anchor"
2. Идём в редактор окна. Для каждого контрола в свойствах Actions->Set anchors... указываем кнопки, прикрепляющие этот контрол к краям экрана (верхнему, нижнему, левому и правому). Следует иметь в виду, что свойство Set anchors не видно, если не указан режим ресайзинга Use Anchor.
Например, кнопку в правом нижнем углу экрана прицепим к правому и нижнему краям, Browse Listbox - ко всем краям сразу, а надпись сверху вдоль всего экрана - к верхнему, левому и правому краям.

Возможностей по сравнению с другими ресайзерами поменьше, но зато просто и наглядно и не так напряжно с затратами интеллекта.

Ну и если совсем хреново, например, нужно соблюсти пропорции картинки. Я кладу на экран невидимый прямоугольник, прицепляю его ко всем углам, а в методе Resizer.Resize() вписываю картинку в текущие размеры прямоугольника.

Ресайзер

Добавлено: 21 Июль 2016, 23:24
kreator
Я попробовал смоделировать тоже самое у себя (С10+Win10). То же самое, причём и на Spread и на Surface. Но только в режиме окна Maximize. Предлагаю вариант, который вроде бы помогает. Минимальные размеры окон внутри фрейма сделать такими же или меньше минимальных размеров фрейма. У меня получается так: фрейм уменьшаю, окно тоже уменьшается, кнопки едут куда надо, как только достигнут минимальный размер окна, кнопки справа уходят за границу фрейма и окно "клинит". Либо кнопки справа переносить влево. Но List тоже клинит, я у себя заметил по вертикали.
Наверно, никто лечить не собирается, потому что MDI режим у MS не в фаворе.

Ресайзер

Добавлено: 21 Июль 2016, 23:24
RaFaeL
Yufil писал(а): Ручная рихтовка выполняется внутри метода Resizer.resize()
А он не проходит, если мы уменьшаем приложение на ширину меньшую, чем минимальный размер окна
Отсюда и проблема - затем увеличиваем, но предыдущий сдвиг то не учтен
Метод вызывается методом TakeResize который висит вот на этом

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

  REGISTEREVENT(EVENT:DoResize,ADDRESS(SELF.TakeResize),ADDRESS(SELF))
соответственно проблема в том, что не проходит EVENT:DoResize когда мы уменьшаем размер менее размера окна
Куда дальше копать?

Ресайзер

Добавлено: 22 Июль 2016, 8:31
Kromeshnik
какой же вы упертый...я вам скинул шаблоны ресайза - там таких проблем нет, аттачу пример, в нем окно можно сворачивать меньше минимального размера, стоит -40, -40, шаблон там же в архиве - все работает четко, никакого гемора (пример под 10 клару)

Ресайзер

Добавлено: 22 Июль 2016, 8:32
Kromeshnik
example_resize.rar
(972.61 КБ) 178 скачиваний

Ресайзер

Добавлено: 22 Июль 2016, 8:55
Kromeshnik
пардон, вник в проблему...тут действительно, либо у mdi окна не делать maximize - тогда при ресайзе фрейма все ок либо фрейм держать всегда maximize, либо минимальные размеры фрейма делать под минимальные размера mdi окна

Ресайзер

Добавлено: 22 Июль 2016, 9:53
kreator
RaFaeL писал(а):Куда дальше копать?
А что мешает убрать ограничение на минимальные размеры mdi-окна?