Страница 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
Вот так в шаблоне условие доступности прописывается. Меню сразу создается как надо.

popup2.jpg

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. Как я понимаю, процесс разработки шаблонов сильно усложнился.