CREATE и размеры

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Андрей
Старожил
Сообщения: 250
Зарегистрирован: 30 Октябрь 2005, 3:58

CREATE и размеры

Сообщение Андрей » 28 Май 2019, 14:40

Такой вопрос - на окне расположить кнопочки сделанные программно. Высчитываю размер их по ширине окна и кол-ву столбцов, вывожу, смотрю - не вмещаются.... пересчитал - да вроде правильно, ширина кнопки д.б. 490 пикселей.
Ширину окна пока задаю фиксированно в описании
Window WINDOW('Caption'),AT(0,0,1920,1080),FONT('Arial Unicode MS',9),GRAY

создаю кнопку
L:CQControl{PROP:Width} = 490!l:XWidth

меряю экранной линейкой - 800 с лишним.... ммм... а как обеспечить заданный размер (ширину) ?

kreator
Ветеран
Сообщения: 3249
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

CREATE и размеры

Сообщение kreator » 28 Май 2019, 15:33

Андрей, а зачем этот гемор? Нарвётесь на другой монитор с другими шрифтами и тю-тю. Если динамически создаёте контролы, то и вычисляйте их размеры тоже динамически. Исходя из текущего состояния окна. Есть ещё класс Resizer. К сведению.
ИМХО, переводить окно в пикселы лучше, если окно пустое. Иначе может всё уехать.
We are hard at work… for you. :)

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4004
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

CREATE и размеры

Сообщение Игорь Столяров » 28 Май 2019, 15:55

Андрей писал(а):
28 Май 2019, 14:40
меряю экранной линейкой - 800 с лишним
Процитирую справку:

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
«V» значит Вендетта !

Андрей
Старожил
Сообщения: 250
Зарегистрирован: 30 Октябрь 2005, 3:58

CREATE и размеры

Сообщение Андрей » 28 Май 2019, 16:54

kreator писал(а):
28 Май 2019, 15:33
Нарвётесь на другой монитор с другими шрифтами и тю-тю.
в моем специфическом случае - приложение под сенсорный киоск, наверно можно и в пикселах ? окно на весь размер, все контролы можно (и наверно нужно) сгенерировать программно, в параметрах сохраню размер, например 1920*1080 или там 1080*1920, согласно макету рассчитаю из относительных позиций абсолютные контролов при каждом обновлении. А шрифты... ммм... не думал еще - может тоже пересчитывать параметры шрифтов типа L:CQControl{PROP:FontSize}=L:CQControl{PROP:Height}/3 ?

kreator
Ветеран
Сообщения: 3249
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

CREATE и размеры

Сообщение kreator » 28 Май 2019, 21:57

У нас как раз есть модуль для сенсорного киоска. Я не парюсь, сделал обычно. Класс Resizer всё растягивает. Единственно где использую prop:Pixels - на экране с проигрыванием видео. Но там кнопок самый минимум. А зачем вообще создавать динамически кнопки? Есть у меня и такой экран. Завтра на работе посмотрю как там сделано.
We are hard at work… for you. :)

kreator
Ветеран
Сообщения: 3249
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

CREATE и размеры

Сообщение kreator » 29 Май 2019, 10:17

kreator писал(а):
28 Май 2019, 21:57
Завтра на работе посмотрю как там сделано.
Сделано банально. Кнопки создаются динамически предопределённого размера, местоположение относительно окна в дизайнере. А в программе работает стандартный Resizer. И на данный момент не знаю сколько используется киосков и какие параметры монитора у них. Изначально просили сделать под семнашку с 1280х1024.
We are hard at work… for you. :)

Yufil
Ветеран движения
Сообщения: 1106
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

CREATE и размеры

Сообщение Yufil » 29 Май 2019, 12:00

Я обычно создавал в окне невидимые прямоугольные ( 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

Андрей
Старожил
Сообщения: 250
Зарегистрирован: 30 Октябрь 2005, 3:58

CREATE и размеры

Сообщение Андрей » 31 Май 2019, 1:36

Если можно, то в этой же теме подскажите - как опросить динамически созданные контролы - buttons ?
Пишу в 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 
Но... работает так интересно: когда позиционируюсь на любую кнопку и жму ее, то событие генерится 3-4 раза, а если эту же кнопку жать после этой серии из 3-4-х раз, то уже правильно - 1 раз на каждое нажатие. Как сделать всегда 1 ? Как объясняется такое поведение ? Мне ж надо вызвать процедуру обработки, зачем ей 3-4 раза отрабатываться...

Yufil
Ветеран движения
Сообщения: 1106
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

CREATE и размеры

Сообщение Yufil » 31 Май 2019, 9:24

1. IF Event:Accepted всегда истинно...
2. Обработаем в TakeAccepted, нафиг остальные события, в самом начале

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

    lqc:Id =  Field() 
    Get(L:q:Control,lqc:Id)
    IF ~ErrorCode() 
       !  Вот здесь обработаем наш контрол...
    END

kreator
Ветеран
Сообщения: 3249
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

CREATE и размеры

Сообщение kreator » 31 Май 2019, 10:22

Андрей, если непонятно, что Юрий написал, я разжую. В классе "Window Manager" есть метод "TakeAccepted". Свою обработку нужно запихнуть в Embeds этого метода после "Else Clause". Программный код может быть другой. В зависимости от того как Вы храните динамически созданные контролы. У меня также, как у Юрия.
We are hard at work… for you. :)

Андрей
Старожил
Сообщения: 250
Зарегистрирован: 30 Октябрь 2005, 3:58

CREATE и размеры

Сообщение Андрей » 31 Май 2019, 14:56

Спасибо, опрос идет.
А что, что красивостей нет для кнопок ? Подобно для GROUP inner Outer. Или ...?

kreator
Ветеран
Сообщения: 3249
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

CREATE и размеры

Сообщение kreator » 31 Май 2019, 16:00

Для кнопок есть flat и transparent. Можно под кнопку группу подложить. Есть регион как замена кнопки. Есть класс ActiveImage для красивостей в современном стиле Винды. И ещё 100500 вариантов.
We are hard at work… for you. :)

kreator
Ветеран
Сообщения: 3249
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

CREATE и размеры

Сообщение kreator » 31 Май 2019, 16:20

Я ещё использовал вместо кнопок Option с пустой иконкой. Некий другой вид кнопки.
We are hard at work… for you. :)

Андрей
Старожил
Сообщения: 250
Зарегистрирован: 30 Октябрь 2005, 3:58

CREATE и размеры

Сообщение Андрей » 02 Июнь 2019, 21:40

А вот еще одна некрасивость: в окне строятся динамически колонки в составе: кнопка и за кнопкой 2 текстовых поля. Ширина и высота(одинаковая) всех 3-х контролей вычисляется по ширине/высоте окна и количеству колонок. Для текстовых полей выбираю String, но если надпись на кнопке автоматом центрируется по вертикали и горизонтали, то для String {PROP:Center}=True центрирует только по горизонтали. Есть ли возможность центрирования по вертикали ? Entry брать ? Там центрирование двойное, но поле желательно делать Disable, а читается такое поле неважно.
Disable цветовая схема редактируется ?

kreator
Ветеран
Сообщения: 3249
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

CREATE и размеры

Сообщение kreator » 03 Июнь 2019, 10:08

Андрей писал(а):
02 Июнь 2019, 21:40
Есть ли возможность центрирования по вертикали ? Entry брать ?
Либо String центрировать самому (высоту выставить default, потом вычислить координату по вертикали), либо Entry. Что в Entry не так? Есть возможность кликнуть на поле?
We are hard at work… for you. :)

Ответить