ABC, popup в Browse

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

ABC, popup в Browse

Сообщение Игорь Столяров »

finsoftrz писал(а): 02 Апрель 2023, 17:56 Не, ну видите смысл в использовании с11, ради бога
Это не совсем так. Я прекрасно работаю в C11, смотрю работы, делаю сборки, некоторые исправления.
Все проекты отлажены для переноса (конвертации) в C11 и постоянно её проходят на сборку.
Но основная среда работы - пока С63, да. Может и перейдём на C12 если он будет, а заодно и на Win64 для B4A. :)
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

ABC, popup в Browse

Сообщение kreator »

finsoftrz писал(а): 02 Апрель 2023, 17:11
kreator писал(а): 02 Апрель 2023, 16:54 Вернёмся к попапу. Пункт меню может быть задизейблин не только когда список пустой. Много разных вариантов у меня есть. Легче вызвать метод класса, чем шаблоны дорабатывать под каждый вариант.
Вообще, это не так делается. Я писал только что, пункты контекстного меню обычно привязаны к кнопке. В зависимости от нее и устанавливается доступность. Например, если кнопка делается недоступной на уровне прав доступа, ее название меняется на "..." (сама кнопка скрыта). Это название и проверяет шаблон, формирующий popup меню. Можно и по другому реализовать, вопрос фантазии.
Шаблон, формирующий меню, понятен. Я о динамике. Ну вот надо задизейблить пункт меню по какому-то критерию. Как? Меню уже есть.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

ABC, popup в Browse

Сообщение Игорь Столяров »

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
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

ABC, popup в Browse

Сообщение finsoftrz »

kreator писал(а): 02 Апрель 2023, 21:56
finsoftrz писал(а): 02 Апрель 2023, 17:11
kreator писал(а): 02 Апрель 2023, 16:54 Вернёмся к попапу. Пункт меню может быть задизейблин не только когда список пустой. Много разных вариантов у меня есть. Легче вызвать метод класса, чем шаблоны дорабатывать под каждый вариант.
Вообще, это не так делается. Я писал только что, пункты контекстного меню обычно привязаны к кнопке. В зависимости от нее и устанавливается доступность. Например, если кнопка делается недоступной на уровне прав доступа, ее название меняется на "..." (сама кнопка скрыта). Это название и проверяет шаблон, формирующий popup меню. Можно и по другому реализовать, вопрос фантазии.
Шаблон, формирующий меню, понятен. Я о динамике. Ну вот надо задизейблить пункт меню по какому-то критерию. Как? Меню уже есть.
Меню формируется при каждом обращении заново. Это просто строка параметра popup. Для критерия в шаблоне есть отдельный промпт, в который можно занести условие недоступности, если такая потребность возникла.
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

ABC, popup в Browse

Сообщение kreator »

finsoftrz писал(а): 03 Апрель 2023, 9:41 Меню формируется при каждом обращении заново. Это просто строка параметра popup. Для критерия в шаблоне есть отдельный промпт, в который можно занести условие недоступности, если такая потребность возникла.
Вы покажите как. Слова мне не нужны. Вы топите за Clarion/ШВС, а там тонны тексты. В ABC ничего такого нет, вызов одного метода.
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

ABC, popup в Browse

Сообщение finsoftrz »

Что хотите увидеть, обозначьтесь. Я топлю за то, что надо максимально использовать шаблоны вместо написания ручного кода, если такое возможно. Я работаю с процедурными шаблонами, могу только показать, как у меня. Как аналогично сделать для abc, либо сами думайте, либо спросите у кого-нибудь, кто умеет шаблоны к abc.
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

ABC, popup в Browse

Сообщение kreator »

finsoftrz писал(а): 03 Апрель 2023, 16:04 Что хотите увидеть, обозначьтесь. Я топлю за то, что надо максимально использовать шаблоны вместо написания ручного кода, если такое возможно. Я работаю с процедурными шаблонами, могу только показать, как у меня. Как аналогично сделать для abc, либо сами думайте, либо спросите у кого-нибудь, кто умеет шаблоны к abc.
Про ABC я всё знаю. Хотелось бы увидеть текст ШВС применительно к изменению параметров пункта меню.
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

ABC, popup в Browse

Сообщение 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
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

ABC, popup в Browse

Сообщение Игорь Столяров »

Т.е. нельзя здесь управлять пунктами PopUp меню. И оно пересозаётся перед каждым обращением.
Разве что, как-то всю эту красоту забанить и вручную полностью формировать строку BRW1::PopupText с учётом условий.
Печаль. :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

ABC, popup в Browse

Сообщение finsoftrz »

Игорь Столяров писал(а): 05 Апрель 2023, 17:13 Т.е. нельзя здесь управлять пунктами PopUp меню. И оно пересозаётся перед каждым обращением.
Разве что, как-то всю эту красоту забанить и вручную полностью формировать строку BRW1::PopupText с учётом условий.
Печаль. :(
Пересоздается перед каждым обращением. Условия вставляются в текст из шаблонов, все управляется. При желании можно и в класс обернуть, смысла только особого нет.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

ABC, popup в Browse

Сообщение finsoftrz »

Вот так в шаблоне условие доступности прописывается. Меню сразу создается как надо.

popup2.jpg
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

ABC, popup в Browse

Сообщение Игорь Столяров »

finsoftrz писал(а): 05 Апрель 2023, 17:29 Условия вставляются в текст из шаблонов, все управляется.
Иной подход. Т.е. здесь шаблон - это по сути надстройка над кодом.
Хочешь управляемое изменение видимости пунктов меню - заводи флаги и прописывай их в шаблон.
Меняешь флаг - это отрабатывается шаблоном каждый раз при построении меню для его визуализации.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

ABC, popup в Browse

Сообщение finsoftrz »

Чтобы уменьшить объем кода, можно его убирать в классы. В ШВС такая тенденция была. Скорее тут вопрос в наследии. Только убирать не в abc с его виртуальными методами, а в простые ненаследуемые классы.
С другой стороны, код не пишется вручную. Главный плюс, это всегда можно открыть и понять, как что работает. А значит, при необходимости быстро внести изменения, в том числе и в сам шаблон. Ну и линейный код в конечном счёте работает быстрее, чем объектный, среда с процедурными шаблонами работает быстрее, чем с объектыми.
Одно время я думал об уменьшении кода, но потом забил. Не настолько это принципиально. Он не попадает в поле зрения, только когда что-то не стандартное и надо уточнить логику работы. Потом, при ориентации на терминальных сервера, практически весь код в dll, грузится в оперативную память один раз и расшаривается между всеми пользователями.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

ABC, popup в Browse

Сообщение Игорь Столяров »

finsoftrz писал(а): 05 Апрель 2023, 19:32 среда с процедурными шаблонами работает быстрее, чем с объектыми
Это да. И с готовым приложением, я думаю, что тоже самое.
Преимущество объектов в простоте поддержки, изменении и развитии кода.
Но если для проекта это не требуется со времён ШВС, то он и хорошо с ним сочетается.
Ну, по крайне мере пока SV не зарубит поддержку Legacy Template.

Что интересно. Если помните - был какой-то взрыв этих шаблонописателей в Legacy.
А вот в ABC они почему-то не пошли. Там была пара убогих попыток "руссификации" и всё.
То ли уровень сложности другой, то ли рынок Clarion уже сдулся, то ли естественная убыль. :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

ABC, popup в Browse

Сообщение finsoftrz »

Игорь Столяров писал(а): 05 Апрель 2023, 20:39
finsoftrz писал(а): 05 Апрель 2023, 19:32 среда с процедурными шаблонами работает быстрее, чем с объектыми
Это да. И с готовым приложением, я думаю, что тоже самое.
Преимущество объектов в простоте поддержки, изменении и развитии кода.
Но если для проекта это не требуется со времён ШВС, то он и хорошо с ним сочетается.
Ну, по крайне мере пока SV не зарубит поддержку Legacy Template.

Что интересно. Если помните - был какой-то взрыв этих шаблонописателей в Legacy.
А вот в ABC они почему-то не пошли. Там была пара убогих попыток "руссификации" и всё.
То ли уровень сложности другой, то ли рынок Clarion уже сдулся, то ли естественная убыль. :(
У меня несколько другая точка зрения на преимущество и недостатки объектов. Если бы придерживались первоначальной стратегии использования простых ненаследуемых объектов, сохранив методологию процедурных шаблонов, то, возможно, и топспид так быстро не схлопнулся. В конце концов не просто так SV официально "отменило" термин legacy применительно к процедурным шаблонам.
Случай сильной переработки abc шаблонов еще во времена с4 имел место быть. Насколько я знаю, этот проект и сейчас есть для внутренних потребностей фирмы разработчика. Там вылезли проблемы совместимости с обновлениями от SV. Как я понимаю, процесс разработки шаблонов сильно усложнился.
C6/C11, ШВС, tps/btrieve.
Ответить