CREATE и размеры
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
CREATE и размеры
Такой вопрос - на окне расположить кнопочки сделанные программно. Высчитываю размер их по ширине окна и кол-ву столбцов, вывожу, смотрю - не вмещаются.... пересчитал - да вроде правильно, ширина кнопки д.б. 490 пикселей.
Ширину окна пока задаю фиксированно в описании
Window WINDOW('Caption'),AT(0,0,1920,1080),FONT('Arial Unicode MS',9),GRAY
создаю кнопку
L:CQControl{PROP:Width} = 490!l:XWidth
меряю экранной линейкой - 800 с лишним.... ммм... а как обеспечить заданный размер (ширину) ?
Ширину окна пока задаю фиксированно в описании
Window WINDOW('Caption'),AT(0,0,1920,1080),FONT('Arial Unicode MS',9),GRAY
создаю кнопку
L:CQControl{PROP:Width} = 490!l:XWidth
меряю экранной линейкой - 800 с лишним.... ммм... а как обеспечить заданный размер (ширину) ?
-
- ✯ Ветеран ✯
- Сообщения: 5025
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 22 раза
CREATE и размеры
Андрей, а зачем этот гемор? Нарвётесь на другой монитор с другими шрифтами и тю-тю. Если динамически создаёте контролы, то и вычисляйте их размеры тоже динамически. Исходя из текущего состояния окна. Есть ещё класс Resizer. К сведению.
ИМХО, переводить окно в пикселы лучше, если окно пустое. Иначе может всё уехать.
ИМХО, переводить окно в пикселы лучше, если окно пустое. Иначе может всё уехать.
We are hard at work… for you.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
CREATE и размеры
Процитирую справку:
PROP:Pixels
Свойство окна, которое переключает единицы измерения линейных размеров между условными единицами и пикселами (не относится к печатным документам). После установки этого свойства все свойства и функции позиционирования (такие как GETPOSITION, SETPOSITION, MOUSEX, MOUSEY, PROP:Xpos, PROP:Ypos, PROP:Width и PROP:Height) возвращают и воспринимают координаты в пикселах, а не в условных единицах.
Пример:
Код: Выделить всё
WinView WINDOW('MyApp'),AT(0,0,320,200),MAX,HVSCROLL,SYSTEM
END
CODE
OPEN(WinView)
WinView{PROP:Pixels} = 1 !Изменить единицы измерения на пиксели
ACCEPT
!все свойства и функции позиционирования теперь возвращают пиксели
END
За теми кто отстал - не возвращаться. (С) Кодекс
CREATE и размеры
в моем специфическом случае - приложение под сенсорный киоск, наверно можно и в пикселах ? окно на весь размер, все контролы можно (и наверно нужно) сгенерировать программно, в параметрах сохраню размер, например 1920*1080 или там 1080*1920, согласно макету рассчитаю из относительных позиций абсолютные контролов при каждом обновлении. А шрифты... ммм... не думал еще - может тоже пересчитывать параметры шрифтов типа L:CQControl{PROP:FontSize}=L:CQControl{PROP:Height}/3 ?
-
- ✯ Ветеран ✯
- Сообщения: 5025
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 22 раза
CREATE и размеры
У нас как раз есть модуль для сенсорного киоска. Я не парюсь, сделал обычно. Класс Resizer всё растягивает. Единственно где использую prop:Pixels - на экране с проигрыванием видео. Но там кнопок самый минимум. А зачем вообще создавать динамически кнопки? Есть у меня и такой экран. Завтра на работе посмотрю как там сделано.
We are hard at work… for you.
-
- ✯ Ветеран ✯
- Сообщения: 5025
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 22 раза
CREATE и размеры
Сделано банально. Кнопки создаются динамически предопределённого размера, местоположение относительно окна в дизайнере. А в программе работает стандартный Resizer. И на данный момент не знаю сколько используется киосков и какие параметры монитора у них. Изначально просили сделать под семнашку с 1280х1024.
We are hard at work… for you.
CREATE и размеры
Я обычно создавал в окне невидимые прямоугольные ( box) контролы. В том месте, где будут размещаться кнопки, кладём прямоугольник и стандартным способом обеспечиваем его ресайзинг. А в конце метода Resizer.Resize определяем положение кнопок, привязанное к позиции и размерам скрытого прямоугольника.
0{ Prop:Pixels} = True
! Позиция скрытого контрола
GetPosition( ?PostionBox, X#, Y#, W#, H#)
!Дальше размещаем кнопки, привязывая их не к окну, а к боксу
ButtonWidth = W# / ButtonCount
SetPosition ( ?Button1, X# , Y#, ButtonWidth , H#)
SetPosition ( ?Button2, X# + ButtonWidth , Y#, ButtonWidth , H#)
SetPosition ( ?Button3, X# + ButtonWidth*2 , Y#, ButtonWidth , H#)
! Где-то так..
0{ Prop:Pixels } = False
0{ Prop:Pixels} = True
! Позиция скрытого контрола
GetPosition( ?PostionBox, X#, Y#, W#, H#)
!Дальше размещаем кнопки, привязывая их не к окну, а к боксу
ButtonWidth = W# / ButtonCount
SetPosition ( ?Button1, X# , Y#, ButtonWidth , H#)
SetPosition ( ?Button2, X# + ButtonWidth , Y#, ButtonWidth , H#)
SetPosition ( ?Button3, X# + ButtonWidth*2 , Y#, ButtonWidth , H#)
! Где-то так..
0{ Prop:Pixels } = False
CREATE и размеры
Если можно, то в этой же теме подскажите - как опросить динамически созданные контролы - buttons ?
Пишу в TakeFieldEvent
Но... работает так интересно: когда позиционируюсь на любую кнопку и жму ее, то событие генерится 3-4 раза, а если эту же кнопку жать после этой серии из 3-4-х раз, то уже правильно - 1 раз на каждое нажатие. Как сделать всегда 1 ? Как объясняется такое поведение ? Мне ж надо вызвать процедуру обработки, зачем ей 3-4 раза отрабатываться...
Пишу в TakeFieldEvent
Код: Выделить всё
Of l:FirstField To L:LastField
If Event:Accepted
lqc:Id = Field()
Get(L:q:Control,lqc:Id)
Message(lqc:Id&' - '&lqc:Spec)
End
CREATE и размеры
1. IF Event:Accepted всегда истинно...
2. Обработаем в TakeAccepted, нафиг остальные события, в самом начале
2. Обработаем в TakeAccepted, нафиг остальные события, в самом начале
Код: Выделить всё
lqc:Id = Field()
Get(L:q:Control,lqc:Id)
IF ~ErrorCode()
! Вот здесь обработаем наш контрол...
END
-
- ✯ Ветеран ✯
- Сообщения: 5025
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 22 раза
CREATE и размеры
Андрей, если непонятно, что Юрий написал, я разжую. В классе "Window Manager" есть метод "TakeAccepted". Свою обработку нужно запихнуть в Embeds этого метода после "Else Clause". Программный код может быть другой. В зависимости от того как Вы храните динамически созданные контролы. У меня также, как у Юрия.
We are hard at work… for you.
CREATE и размеры
Спасибо, опрос идет.
А что, что красивостей нет для кнопок ? Подобно для GROUP inner Outer. Или ...?
А что, что красивостей нет для кнопок ? Подобно для GROUP inner Outer. Или ...?
-
- ✯ Ветеран ✯
- Сообщения: 5025
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 22 раза
CREATE и размеры
Для кнопок есть flat и transparent. Можно под кнопку группу подложить. Есть регион как замена кнопки. Есть класс ActiveImage для красивостей в современном стиле Винды. И ещё 100500 вариантов.
We are hard at work… for you.
-
- ✯ Ветеран ✯
- Сообщения: 5025
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 22 раза
CREATE и размеры
Я ещё использовал вместо кнопок Option с пустой иконкой. Некий другой вид кнопки.
We are hard at work… for you.
CREATE и размеры
А вот еще одна некрасивость: в окне строятся динамически колонки в составе: кнопка и за кнопкой 2 текстовых поля. Ширина и высота(одинаковая) всех 3-х контролей вычисляется по ширине/высоте окна и количеству колонок. Для текстовых полей выбираю String, но если надпись на кнопке автоматом центрируется по вертикали и горизонтали, то для String {PROP:Center}=True центрирует только по горизонтали. Есть ли возможность центрирования по вертикали ? Entry брать ? Там центрирование двойное, но поле желательно делать Disable, а читается такое поле неважно.
Disable цветовая схема редактируется ?
Disable цветовая схема редактируется ?
-
- ✯ Ветеран ✯
- Сообщения: 5025
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 22 раза
CREATE и размеры
Либо String центрировать самому (высоту выставить default, потом вычислить координату по вертикали), либо Entry. Что в Entry не так? Есть возможность кликнуть на поле?
We are hard at work… for you.