Интерфейсы в кларионовских приложениях
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Интерфейсы в кларионовских приложениях
По eip я тему закрыл, но все таки вспомню историю из практики. Когда все начиналось, переводили довольно приличную оптовку с 1с77. В 1с77 редактирование строк в накладных можно было только через eip, пользователи привыкли, и я реально беспокоился, что будет негативное восприятие. Тогда уже было разработан механизм, связывающий колонки в броузе с полями формы, но это все таки другой подход. А люди там маньячили по поводу скорости обслуживания покупателей и защиты от ошибок. Проходит время, тишина. Я, честно говоря, был удивлен. Подождал еще немного времени и задал вопрос старшему оператору. Говорит, да нет, все нормально, нам так даже лучше. Раньше в спешке иногда операторы ошибались, не в той строке изменения делали. А тут все сразу видно.
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Интерфейсы в кларионовских приложениях
Вот такая идея. Разные control шаблоны могут включать в себя наборы контролов. В шаблонах задаются размеры контролов и их расположение относительно друг друга. Когда мы вставляем control шаблон в окно, то все сразу размещается нужным образом. Однако потом контролы уже живут своей жизнью. Их можно свободно перемещать. В кларином дизайнере окон при перемещение групп выделенных контролов может накапливаться погрешность и относительное расположение контролов искажается. Искажение может также возникать при выравнивании относительно других контролов. Хорошей практикой является применение сетки, но вручную делать все очень экстенсивно.
Помочь тут может генерация control шаблонами кода, который автоматически корректирует расположение связанных контролов отсительно друг друга. Попробовал применить эту методику. Эффект получился значительный. Сразу все стандартные блоки контролов выравнялись и стали идентичными в разных окнах.
Для пояснения идеи пример для простого control шаблона календаря из ШВС. Он прилепляется к полю ввода даты. Чтобы расположение кнопки не менялось относительно поля ввода, вставляется корректирующий код в точку вставки %ResizerRoutineCode, 'SZDM'. В ресайзере Струменского это место после отработки ресайза.
Помочь тут может генерация control шаблонами кода, который автоматически корректирует расположение связанных контролов отсительно друг друга. Попробовал применить эту методику. Эффект получился значительный. Сразу все стандартные блоки контролов выравнялись и стали идентичными в разных окнах.
Для пояснения идеи пример для простого control шаблона календаря из ШВС. Он прилепляется к полю ввода даты. Чтобы расположение кнопки не менялось относительно поля ввода, вставляется корректирующий код в точку вставки %ResizerRoutineCode, 'SZDM'. В ресайзере Струменского это место после отработки ресайза.
Код: Выделить всё
#CONTROL(CalendarLookup,'Вызов календаря'),WINDOW,MULTI
CONTROLS
BUTTON('...'),AT(,,12,12),FONT('MS Sans Serif',,8,FONT:Regular),USE(?LookupCalendar),TIP('Календарь')
END
#BOXED('Настройка календаря')
#PROMPT('Заголовок окна:',@S25),%CalendarHeader,DEFAULT('Календарь')
#PROMPT('Начальная дата:',@S30),%StartCalendarField,REQ
#PROMPT('Целевая переменная:',FIELD),%CalendarField,REQ
#ENDBOXED
#ATSTART
#DECLARE(%CalendarLookupControl)
#FOR(%Control),WHERE(%ControlInstance = %ActiveTemplateInstance)
#SET(%CalendarLookupControl,%Control)
#ENDFOR
#ENDAT
#AT(%ControlEventHandling,%CalendarLookupControl,'Accepted')
#IF(SUB(%CalendarHeader,1,1)='!')
#SET(%ValueConstruct,SUB(%CalendarHeader,2,LEN(%CalendarHeader)-1))
%CalendarField = Calendar(%ValueConstruct,%StartCalendarField)
#ELSE
%CalendarField = Calendar('%CalendarHeader',%StartCalendarField)
#ENDIF
DISPLAY()
#ENDAT
#!
#AT(%WindowEventHandling,'AlertKey')
if Keycode()=F4key
if focus()=?%CalendarField and %CalendarLookupControl{PROP:DISABLE}=False
post(event:accepted,%CalendarLookupControl)
end
end
#ENDAT
#!
#AT(%ResizerRoutineCode, 'SZDM')
%CalendarLookupControl{PROP:xPos} = ?%CalendarField{PROP:xPos} + ?%CalendarField{PROP:width} + 2
%CalendarLookupControl{PROP:yPos} = ?%CalendarField{PROP:yPos} - 1
#ENDAT
#!
C6/C11, ШВС, tps/btrieve.
-
- ✯ Ветеран ✯
- Сообщения: 4983
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 20 раз
Интерфейсы в кларионовских приложениях
Я нет. Привык ставить десять строк. Мониторы как правило сейчас FHD (даже 1600х900 - уходящая натура), стараюсь делать под этот размер.
We are hard at work… for you.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Интерфейсы в кларионовских приложениях
Вот таким кодом можно выравнять промпты во всех окнах относительно полей ввода. Проще всего оформить процедурой, а затем шаблоном разместить ее вызов после ресайза. Это для случая, когда промпты выравниваются по правой границе и текст размещается непосредственно перед полем ввода.
Код: Выделить всё
loop loc:i=1 to lastfield() !выравниваем промпты
if loc:i{prop:type} = CREATE:Prompt
if sub(loc:i{prop:text},len(clip(loc:i{prop:text})),1)<>':'
cycle
end
if ((loc:i+1){prop:type} <> CREATE:ENTRY) and ((loc:i+1){prop:type} <> CREATE:list)
cycle
end
if (0 + (loc:i+1){PROP:yPos}) < (loc:i{PROP:yPos} + loc:i{PROP:height}) !промпт слева
loc:i{PROP:RIGHT} = 1
loc:i{PROP:xPos} = (loc:i+1){PROP:xPos} - loc:i{PROP:width} - 2
if loc:i{PROP:HEIGHT} > (loc:i+1){PROP:HEIGHT}
loc:i{PROP:yPos} = (loc:i+1){PROP:yPos} + (loc:i+1){PROP:HEIGHT} - loc:i{PROP:HEIGHT} + 1
else
loc:i{PROP:yPos} = (loc:i+1){PROP:yPos} + (loc:i+1){PROP:HEIGHT} - loc:i{PROP:HEIGHT}
end
else !промпт сверху
loc:i{PROP:LEFT} = 1
loc:i{PROP:yPos} = (loc:i+1){PROP:yPos} - loc:i{PROP:height}
loc:i{PROP:xPos} = (loc:i+1){PROP:xPos}
end
end
end
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Интерфейсы в кларионовских приложениях
Для выравнивания границ sheet, panel, list относительно границ окна или вышестоящего контрола можно использовать простой шаблон. Код простой, шаблоны у всех разные, поэтому просто приведу скрины для пояснения.
Так выглядит шаблон в среде Clarion6. Окно до применения шаблона. Окно после применения шаблона.
Так выглядит шаблон в среде Clarion6. Окно до применения шаблона. Окно после применения шаблона.
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Интерфейсы в кларионовских приложениях
Забыл про шаблон вывода периода. На предыдущих скриншотах видно, что в отключке был, когда его размещал.
После добавления в код, генерируемый этим шаблоном, автоматической корректировки размеров и положения контролов, выглядеть стало заметно лучше.
После добавления в код, генерируемый этим шаблоном, автоматической корректировки размеров и положения контролов, выглядеть стало заметно лучше.
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Интерфейсы в кларионовских приложениях
Когда-то давно читал статью по поводу автоматизации размещения контролов в окне. Наверно, еще в 90-е было. В памяти где-то осело. Автор писал про то, что в оконных формах ввода контролы лучше группировать по смысловому признаку. Чтобы пользователю проще было выцеливать глазом нужные. Так, наверно, мы все сейчас и делаем. А дальше предлагалось использовать невидимые группы, объединяющие обычные контролы. Группы проще выравнивать относительно друг друга. А расположение контролов внутри группы можно автоматически корректировать. С этим интересно было бы поиграть.
Может, кому-то покажется, что все эти заморочки с автоматическим выравниванием не имеют смысла, можно и вручную в дизайнере окон все разместить и выравнять. Но на больших проектах вручную контролировать очень экстенсивно. У меня сейчас в основном проекте примерно 1.5 тысячи окон и 10+ тысяч контролов в них. Когда недавно попробовал там что-то поравнять, у меня шея заболела, спина заболела, в кресле вмятина появилась. Треть пути прошел, больше сил не хватило. И самое ужасное, начинаешь на это обращать внимание. То в одном окне чуть-чуть съехало, то в другом. В общем, лучше сразу айду выпить.
В одном проекте на кларионе видел, что люди действительно очень аккуратно пытаются отрисовывать, равнять контролы. Но если поставить рядом 2 разных окна, то все в присядку понеслись...
Может, кому-то покажется, что все эти заморочки с автоматическим выравниванием не имеют смысла, можно и вручную в дизайнере окон все разместить и выравнять. Но на больших проектах вручную контролировать очень экстенсивно. У меня сейчас в основном проекте примерно 1.5 тысячи окон и 10+ тысяч контролов в них. Когда недавно попробовал там что-то поравнять, у меня шея заболела, спина заболела, в кресле вмятина появилась. Треть пути прошел, больше сил не хватило. И самое ужасное, начинаешь на это обращать внимание. То в одном окне чуть-чуть съехало, то в другом. В общем, лучше сразу айду выпить.
В одном проекте на кларионе видел, что люди действительно очень аккуратно пытаются отрисовывать, равнять контролы. Но если поставить рядом 2 разных окна, то все в присядку понеслись...
C6/C11, ШВС, tps/btrieve.
-
- ✯ Ветеран ✯
- Сообщения: 4983
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 20 раз
Интерфейсы в кларионовских приложениях
Какой смысл такой странной привязки одного контрола к другому? У Вас что до применения шаблона криво, что после применения.
И да, мне, как пользователю ABC класса Resizer, все эти проблемы кажутся какими-то надуманными. В конце концов, возьмите и посмотрите как там сделано. Зачем изобретать велосипед?
We are hard at work… for you.
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1376
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Интерфейсы в кларионовских приложениях
kreator, речь не про ресайз. Ресайз работает относительно того положения контролов, которое Вы задали в форматере окна. Смысл сделать так, чтобы все однотипные фрагменты контролов были идентичны во всех окнах приложения, а также устранить возможные при внесении изменений в содержание окон ляпы. Посмотрите в своем приложении внимательно с мелкой сеткой, или посчитайте вручную, какие отступы у Вас между контролами в разных окнах. Скорее всего, найдете заметное расхождение.kreator писал(а): ↑21 Август 2020, 16:48Какой смысл такой странной привязки одного контрола к другому? У Вас что до применения шаблона криво, что после применения.
И да, мне, как пользователю ABC класса Resizer, все эти проблемы кажутся какими-то надуманными. В конце концов, возьмите и посмотрите как там сделано. Зачем изобретать велосипед?
После применения шаблона криво быть не может, так как размер выставляется точно в dlu.
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Интерфейсы в кларионовских приложениях
А как надо? Это определяется прежде всего функциональностью приложения. У меня достаточно комплексное решение, охватывающее большой круг вопросов. Начиная от оперативного учета, контроля и планирования ресурсов и заканчивая бухгалтерским балансом. Можно, конечно, вместо одного приложения делать несколько. Это вопрос сегментации. При сегментации по видам бизнеса предпочтительнее все включать в одно приложение. На мой взгляд, конечно, это не единственная точка зрения.
Меня количество окон, в целом, не парит, нового уже мало появляется. Просто раньше совсем не обращал внимания на расположение контролов, делая на глаз. Пользователям вроде как тоже по барабану. А тут решил, что неплохо это дело систематизировать. Ну и оказалось, что вручную это делать очень трудоемко.
Кстати, я уже обдумал вариант с использованием групп. Делаем одну стандартную функцию, в которую передаем диапазон контролов и способ выравнивания. Несколько простых контрол шаблонов с размещением group для покрытия типовых случаев (ряды кнопок, блоки полей ввода и т.п.), которые размещают вызов этой функции среди прочего. Вполне кошерно должно получиться.
C6/C11, ШВС, tps/btrieve.
-
- ✯ Ветеран ✯
- Сообщения: 4983
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 20 раз
Интерфейсы в кларионовских приложениях
Честно, не понимаю. Рисую окно в визуальном редакторе. Выравниваю все контролы сам. Если нужно похожее окно, могу скопировать из того, которое есть.
Я лично слежу за этой темой. Делаю одинаково.
Криво. Присмотритесь. Видно невооружённым глазом. dlu может и точное, только толку?
We are hard at work… for you.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Интерфейсы в кларионовских приложениях
Не одинаковое окно. Проверьте, к примеру, расстояния между кнопками в двух разных окнах. Или отступы между полями ввода по вертикали. Во всяком случае, у коллег, у которых я мог посмотреть демки приложений, разница заметна. Вы по сетке выравниваете или как? Даже если по сетке все выравняли, а потом изменили, к примеру, положение верхней или левой границы окна, положение контролов может слегка съехать. Во всяком случае, в C6 так, в C11 не проверял.
Я не говорю, что соблюдать аккуратность в дизайнере окон не надо. Автоматическое выравнивание это дополнительный инструмент, позволяющий простыми средствами стандартизировать взаимное расположение контролов в разных окнах. Я сам об этом не задумывался, попробовал, получается неплохо.
Кстати, помню в windew одно время рекламировали фишку об автоматической проверке расположения контролов. Не знаю, по какому принципу они это делали, некоторая аналогия прослеживается.
Криво Вы имеете ввиду визуальную разницу между правым и левым отступом броуза от sheet? Видимо, какой-то визуальный эффект от прорисовки границ sheet. Это можно тоже автоматически скорректировать. Все, что делается программно, точнее, чем врукопашную.
Я не говорю, что соблюдать аккуратность в дизайнере окон не надо. Автоматическое выравнивание это дополнительный инструмент, позволяющий простыми средствами стандартизировать взаимное расположение контролов в разных окнах. Я сам об этом не задумывался, попробовал, получается неплохо.
Кстати, помню в windew одно время рекламировали фишку об автоматической проверке расположения контролов. Не знаю, по какому принципу они это делали, некоторая аналогия прослеживается.
Криво Вы имеете ввиду визуальную разницу между правым и левым отступом броуза от sheet? Видимо, какой-то визуальный эффект от прорисовки границ sheet. Это можно тоже автоматически скорректировать. Все, что делается программно, точнее, чем врукопашную.
C6/C11, ШВС, tps/btrieve.
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1376
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
Интерфейсы в кларионовских приложениях
Вот как у вас Сколько тут контролов, посчитайте
А вот как у нас Сколько тут контролов? Один лист
Сколько действий вы делаете, чтобы добавить какую-то опцию в программу? Добавить переменную, нарисовать контрол, еще наверняка отдельно код чтобы ее сохранить, прочитать... Потом еще добавить видимо установки 4, установки 5 и т.д.
Сколько действий делаю я? Добавляю в код ровно ОДНУ строку!!! Остальное это уже обработка этого значения в нужном месте кода. Параметры могут быть абсолютно любого типа - чекбоксы, справочники, циклический выбор, календарь, часы, все что угодно
Вы скачивали нашу программу. Откройте карточку контрагента. Как думаете, сколько контролов типа browse в той форме?
А еще как думаете, справочники товаров, контрагентов, физлиц и т.п. - это разные окна?