Страница 4 из 5
ABC, popup в Browse
Добавлено: 02 Апрель 2023, 18:26
Игорь Столяров
finsoftrz писал(а): ↑02 Апрель 2023, 17:56
Не, ну видите смысл в использовании с11, ради бога
Это не совсем так. Я прекрасно работаю в C11, смотрю работы, делаю сборки, некоторые исправления.
Все проекты отлажены для переноса (конвертации) в C11 и постоянно её проходят на сборку.
Но основная среда работы - пока С63, да. Может и перейдём на C12 если он будет, а заодно и на Win64 для B4A.
ABC, popup в Browse
Добавлено: 02 Апрель 2023, 21:56
kreator
finsoftrz писал(а): ↑02 Апрель 2023, 17:11
kreator писал(а): ↑02 Апрель 2023, 16:54
Вернёмся к попапу. Пункт меню может быть задизейблин не только когда список пустой. Много разных вариантов у меня есть. Легче вызвать метод класса, чем шаблоны дорабатывать под каждый вариант.
Вообще, это не так делается. Я писал только что, пункты контекстного меню обычно привязаны к кнопке. В зависимости от нее и устанавливается доступность. Например, если кнопка делается недоступной на уровне прав доступа, ее название меняется на "..." (сама кнопка скрыта). Это название и проверяет шаблон, формирующий popup меню. Можно и по другому реализовать, вопрос фантазии.
Шаблон, формирующий меню, понятен. Я о динамике. Ну вот надо задизейблить пункт меню по какому-то критерию. Как? Меню уже есть.
ABC, popup в Browse
Добавлено: 02 Апрель 2023, 23:13
Игорь Столяров
kreator писал(а): ↑02 Апрель 2023, 21:56
Ну вот надо задизейблить пункт меню по какому-то критерию
Код: Выделить всё
IF PopupMgr.GetItemEnabled('Save') ! if item is enabled
PopupMgr.SetItemEnable('Save',False) ! disable it
ELSE ! if item is disabled
PopupMgr.SetItemEnable('Save',True) ! enable it
END
ABC, popup в Browse
Добавлено: 03 Апрель 2023, 9:41
finsoftrz
kreator писал(а): ↑02 Апрель 2023, 21:56
finsoftrz писал(а): ↑02 Апрель 2023, 17:11
kreator писал(а): ↑02 Апрель 2023, 16:54
Вернёмся к попапу. Пункт меню может быть задизейблин не только когда список пустой. Много разных вариантов у меня есть. Легче вызвать метод класса, чем шаблоны дорабатывать под каждый вариант.
Вообще, это не так делается. Я писал только что, пункты контекстного меню обычно привязаны к кнопке. В зависимости от нее и устанавливается доступность. Например, если кнопка делается недоступной на уровне прав доступа, ее название меняется на "..." (сама кнопка скрыта). Это название и проверяет шаблон, формирующий popup меню. Можно и по другому реализовать, вопрос фантазии.
Шаблон, формирующий меню, понятен. Я о динамике. Ну вот надо задизейблить пункт меню по какому-то критерию. Как? Меню уже есть.
Меню формируется при каждом обращении заново. Это просто строка параметра popup. Для критерия в шаблоне есть отдельный промпт, в который можно занести условие недоступности, если такая потребность возникла.
ABC, popup в Browse
Добавлено: 03 Апрель 2023, 15:30
kreator
finsoftrz писал(а): ↑03 Апрель 2023, 9:41
Меню формируется при каждом обращении заново. Это просто строка параметра popup. Для критерия в шаблоне есть отдельный промпт, в который можно занести условие недоступности, если такая потребность возникла.
Вы покажите как. Слова мне не нужны. Вы топите за Clarion/ШВС, а там тонны тексты. В ABC ничего такого нет, вызов одного метода.
ABC, popup в Browse
Добавлено: 03 Апрель 2023, 16:04
finsoftrz
Что хотите увидеть, обозначьтесь. Я топлю за то, что надо максимально использовать шаблоны вместо написания ручного кода, если такое возможно. Я работаю с процедурными шаблонами, могу только показать, как у меня. Как аналогично сделать для abc, либо сами думайте, либо спросите у кого-нибудь, кто умеет шаблоны к abc.
ABC, popup в Browse
Добавлено: 05 Апрель 2023, 15:38
kreator
finsoftrz писал(а): ↑03 Апрель 2023, 16:04
Что хотите увидеть, обозначьтесь. Я топлю за то, что надо максимально использовать шаблоны вместо написания ручного кода, если такое возможно. Я работаю с процедурными шаблонами, могу только показать, как у меня. Как аналогично сделать для abc, либо сами думайте, либо спросите у кого-нибудь, кто умеет шаблоны к abc.
Про ABC я всё знаю. Хотелось бы увидеть текст ШВС применительно к изменению параметров пункта меню.
ABC, popup в Browse
Добавлено: 05 Апрель 2023, 16:54
finsoftrz
Не знаю, что интересного там можно увидеть, это автомат создает. Как-то так.
Код: Выделить всё
BRW1::PopupText = ''
IF BRW1::RecordCount
IF ?Copy{PROP:Disable}=FALSE
BRW1::PopupText=CLIP(BRW1::PopupText) & '|' & '' & CLIP(?Copy{Prop:Text})
ELSE
BRW1::PopupText=CLIP(BRW1::PopupText) & '|~' & '' & CLIP(?Copy{Prop:Text})
END
IF ?View{PROP:Disable}=FALSE
BRW1::PopupText=CLIP(BRW1::PopupText) & '|' & '' & CLIP(?View{Prop:Text})
ELSE
BRW1::PopupText=CLIP(BRW1::PopupText) & '|~' & '' & CLIP(?View{Prop:Text})
END
IF ?Shtamp{PROP:Disable}=FALSE
BRW1::PopupText=CLIP(BRW1::PopupText) & '|' & '' & CLIP(?Shtamp{Prop:Text})
ELSE
BRW1::PopupText=CLIP(BRW1::PopupText) & '|~' & '' & CLIP(?Shtamp{Prop:Text})
END
BRW1::PopupText=CLIP(BRW1::PopupText) & '|-'
IF ?FsBrRefresh{PROP:Disable}=FALSE
BRW1::PopupText=CLIP(BRW1::PopupText) & '|' & '' & CLIP(?FsBrRefresh{Prop:Text})
ELSE
BRW1::PopupText=CLIP(BRW1::PopupText) & '|~' & '' & CLIP(?FsBrRefresh{Prop:Text})
END
CLEAR(BRW1::TempPopupText)
IF ?Insert:2{PROP:Disable}
BRW1::TempPopupText = '~' & '' & '&Добавить'
ELSE
BRW1::TempPopupText = '' & '&Добавить'
END
IF ?Change:2{PROP:Disable}
BRW1::TempPopupText = CLIP(BRW1::TempPopupText) & '|~' & '' & '&Изменить'
ELSE
BRW1::TempPopupText = CLIP(BRW1::TempPopupText) & '|' & '' & '&Изменить'
END
IF ?Delete:2{PROP:Disable}
BRW1::TempPopupText = CLIP(BRW1::TempPopupText) & '|~' & '' & '&Удалить'
ELSE
BRW1::TempPopupText = CLIP(BRW1::TempPopupText) & '|' & '' & '&Удалить'
END
IF BRW1::PopupText
BRW1::PopupText = CLIP(BRW1::TempPopupText) & '|-|' & BRW1::PopupText
ELSE
BRW1::PopupText = CLIP(BRW1::TempPopupText)
END
ELSE
IF ?Copy{PROP:Disable}=FALSE
BRW1::PopupText=CLIP(BRW1::PopupText) & '|' & '' & CLIP(?Copy{Prop:Text})
ELSE
BRW1::PopupText=CLIP(BRW1::PopupText) & '|~' & '' & CLIP(?Copy{Prop:Text})
END
IF ?View{PROP:Disable}=FALSE
BRW1::PopupText=CLIP(BRW1::PopupText) & '|' & '' & CLIP(?View{Prop:Text})
ELSE
BRW1::PopupText=CLIP(BRW1::PopupText) & '|~' & '' & CLIP(?View{Prop:Text})
END
IF ?Shtamp{PROP:Disable}=FALSE
BRW1::PopupText=CLIP(BRW1::PopupText) & '|' & '' & CLIP(?Shtamp{Prop:Text})
ELSE
BRW1::PopupText=CLIP(BRW1::PopupText) & '|~' & '' & CLIP(?Shtamp{Prop:Text})
END
BRW1::PopupText=CLIP(BRW1::PopupText) & '|-'
IF ?FsBrRefresh{PROP:Disable}=FALSE
BRW1::PopupText=CLIP(BRW1::PopupText) & '|' & '' & CLIP(?FsBrRefresh{Prop:Text})
ELSE
BRW1::PopupText=CLIP(BRW1::PopupText) & '|~' & '' & CLIP(?FsBrRefresh{Prop:Text})
END
CLEAR(BRW1::TempPopupText)
IF ?Insert:2{PROP:Disable}
BRW1::TempPopupText = '~' & '' & '&Добавить'
ELSE
BRW1::TempPopupText = '' & '&Добавить'
END
BRW1::TempPopupText = CLIP(BRW1::TempPopupText) & '|~' & '' & '&Изменить'
BRW1::TempPopupText = CLIP(BRW1::TempPopupText) & '|~' & '' & '&Удалить'
IF BRW1::PopupText
BRW1::PopupText = CLIP(BRW1::TempPopupText) & '|-|' & BRW1::PopupText
ELSE
BRW1::PopupText = CLIP(BRW1::TempPopupText)
END
END
EXECUTE(POPUP(BRW1::PopupText))
IF ~?Insert:2{PROP:Disable}
POST(Event:Accepted,?Insert:2)
END
IF ~?Change:2{PROP:Disable}
POST(Event:Accepted,?Change:2)
END
IF ~?Delete:2{PROP:Disable}
POST(Event:Accepted,?Delete:2)
END
POST(Event:Accepted,?Copy)
POST(Event:Accepted,?View)
POST(Event:Accepted,?Shtamp)
POST(Event:Accepted,?FsBrRefresh)
END
ABC, popup в Browse
Добавлено: 05 Апрель 2023, 17:13
Игорь Столяров
Т.е. нельзя здесь управлять пунктами PopUp меню. И оно пересозаётся перед каждым обращением.
Разве что, как-то всю эту красоту забанить и вручную полностью формировать строку BRW1::PopupText с учётом условий.
Печаль.
ABC, popup в Browse
Добавлено: 05 Апрель 2023, 17:29
finsoftrz
Игорь Столяров писал(а): ↑05 Апрель 2023, 17:13
Т.е. нельзя здесь управлять пунктами PopUp меню. И оно пересозаётся перед каждым обращением.
Разве что, как-то всю эту красоту забанить и вручную полностью формировать строку BRW1::PopupText с учётом условий.
Печаль.
Пересоздается перед каждым обращением. Условия вставляются в текст из шаблонов, все управляется. При желании можно и в класс обернуть, смысла только особого нет.
ABC, popup в Browse
Добавлено: 05 Апрель 2023, 17:44
finsoftrz
Вот так в шаблоне условие доступности прописывается. Меню сразу создается как надо.
ABC, popup в Browse
Добавлено: 05 Апрель 2023, 18:38
Игорь Столяров
finsoftrz писал(а): ↑05 Апрель 2023, 17:29
Условия вставляются в текст из шаблонов, все управляется.
Иной подход. Т.е. здесь шаблон - это по сути надстройка над кодом.
Хочешь управляемое изменение видимости пунктов меню - заводи флаги и прописывай их в шаблон.
Меняешь флаг - это отрабатывается шаблоном каждый раз при построении меню для его визуализации.
ABC, popup в Browse
Добавлено: 05 Апрель 2023, 19:32
finsoftrz
Чтобы уменьшить объем кода, можно его убирать в классы. В ШВС такая тенденция была. Скорее тут вопрос в наследии. Только убирать не в abc с его виртуальными методами, а в простые ненаследуемые классы.
С другой стороны, код не пишется вручную. Главный плюс, это всегда можно открыть и понять, как что работает. А значит, при необходимости быстро внести изменения, в том числе и в сам шаблон. Ну и линейный код в конечном счёте работает быстрее, чем объектный, среда с процедурными шаблонами работает быстрее, чем с объектыми.
Одно время я думал об уменьшении кода, но потом забил. Не настолько это принципиально. Он не попадает в поле зрения, только когда что-то не стандартное и надо уточнить логику работы. Потом, при ориентации на терминальных сервера, практически весь код в dll, грузится в оперативную память один раз и расшаривается между всеми пользователями.
ABC, popup в Browse
Добавлено: 05 Апрель 2023, 20:39
Игорь Столяров
finsoftrz писал(а): ↑05 Апрель 2023, 19:32
среда с процедурными шаблонами работает быстрее, чем с объектыми
Это да. И с готовым приложением, я думаю, что тоже самое.
Преимущество объектов в простоте поддержки, изменении и развитии кода.
Но если для проекта это не требуется со времён ШВС, то он и хорошо с ним сочетается.
Ну, по крайне мере пока SV не зарубит поддержку Legacy Template.
Что интересно. Если помните - был какой-то взрыв этих шаблонописателей в Legacy.
А вот в ABC они почему-то не пошли. Там была пара убогих попыток "руссификации" и всё.
То ли уровень сложности другой, то ли рынок Clarion уже сдулся, то ли естественная убыль.
ABC, popup в Browse
Добавлено: 05 Апрель 2023, 21:29
finsoftrz
Игорь Столяров писал(а): ↑05 Апрель 2023, 20:39
finsoftrz писал(а): ↑05 Апрель 2023, 19:32
среда с процедурными шаблонами работает быстрее, чем с объектыми
Это да. И с готовым приложением, я думаю, что тоже самое.
Преимущество объектов в простоте поддержки, изменении и развитии кода.
Но если для проекта это не требуется со времён ШВС, то он и хорошо с ним сочетается.
Ну, по крайне мере пока SV не зарубит поддержку Legacy Template.
Что интересно. Если помните - был какой-то взрыв этих шаблонописателей в Legacy.
А вот в ABC они почему-то не пошли. Там была пара убогих попыток "руссификации" и всё.
То ли уровень сложности другой, то ли рынок Clarion уже сдулся, то ли естественная убыль.
У меня несколько другая точка зрения на преимущество и недостатки объектов. Если бы придерживались первоначальной стратегии использования простых ненаследуемых объектов, сохранив методологию процедурных шаблонов, то, возможно, и топспид так быстро не схлопнулся. В конце концов не просто так SV официально "отменило" термин legacy применительно к процедурным шаблонам.
Случай сильной переработки abc шаблонов еще во времена с4 имел место быть. Насколько я знаю, этот проект и сейчас есть для внутренних потребностей фирмы разработчика. Там вылезли проблемы совместимости с обновлениями от SV. Как я понимаю, процесс разработки шаблонов сильно усложнился.