Страница 1 из 2

Toolbox - параметр любому окну

Добавлено: 15 Март 2017, 10:30
gopstop2007
Toolbox - Группы товаров (no mdi), вызывается через кнопку из разных окон (mdi) где присутствует товар. В Toolbox пользователь выбирает нужную группу товара, и показывается товар по выбранной группе в другом mdi окне.

Сам app
1. Frame + все окна mdi открываются в максимайзе.
2. ToolBox(DOCK left + Docked left) открываю и скрываю(HIDE) до открытия окна с товаром из-за п.1

Окон много, возможно передавать id группы товара без id thread-ов для обновления в окне с товаром? :cat:

Toolbox - параметр любому окну

Добавлено: 15 Март 2017, 11:12
kreator
gopstop2007 писал(а):Окон много, возможно передавать id группы товара без id thread-ов для обновления в окне с товаром? :cat:
Не очень понятно - что, куда и как передаёте. Есть классы ToolbarClass, BrowseToolbarClass. Может нужен похожий функционал? Можно посмотреть там реализацию.

Toolbox - параметр любому окну

Добавлено: 15 Март 2017, 11:21
Игорь Столяров
gopstop2007 писал(а): Окон много, возможно передавать id группы товара без id thread-ов для обновления в окне с товаром?
Как вариант: можно записывать группу товара в Global переменную, а MDI окне просто ее считывать и обновлять по получению MDI окном фокуса. Ну и далее уже отрабатывать в окне изменения группы товаров (если это изменение есть).

Toolbox - параметр любому окну

Добавлено: 15 Март 2017, 12:23
gopstop2007
kreator писал(а):Не очень понятно - что, куда и как передаёте. Есть классы ToolbarClass, BrowseToolbarClass. Может нужен похожий функционал? Можно посмотреть там реализацию.
Типа такого

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

POST(Event:MyidProductGroup,,idThreadProduct)

Toolbox - параметр любому окну

Добавлено: 15 Март 2017, 12:28
gopstop2007
Игорь Столяров писал(а):Как вариант: можно записывать группу товара в Global переменную, а MDI окне просто ее считывать и обновлять по получению MDI окном фокуса. Ну и далее уже отрабатывать в окне изменения группы товаров (если это изменение есть).
В том и дело, что мне надо при изменении группы товара (на toolbox-е фокуса нет) и для передачи фокуса на окно с товаром надо знать id Thread-a или имя окна.

Toolbox - параметр любому окну

Добавлено: 15 Март 2017, 12:32
Игорь Столяров
gopstop2007 писал(а): группы товара (на toolbox-е фокуса нет)
Тогда, если категорически не хочется посылать в окно событие об изменении группы товаров,
можно в MDI окне проверять изменение глобальной переменной с группой товаров по таймеру (например раз в секунду).
И при ее изменении - отрабатывать в MDI окне действия связанные с изменением группы товаров на Toolbox.

Хотя, конечно же проще, создать глобальную очередь с ID открытых MDI окон и при изменении группы товаров
на Toolbox просто посылать во все открытые MDI окна события на отработку изменений ....

Toolbox - параметр любому окну

Добавлено: 15 Март 2017, 12:53
gopstop2007
Игорь Столяров писал(а):... создать глобальную очередь с ID открытых MDI окон и при изменении группы товаров
на Toolbox просто посылать во все открытые MDI окна события на отработку изменений ....
Придется, тогда очередь с признаком наличия в окне товара :), если не найду другого решения.

Toolbox - параметр любому окну

Добавлено: 15 Март 2017, 13:10
Игорь Столяров
gopstop2007 писал(а): Придется, тогда очередь с признаком наличия в окне товара
Ну да ... В принципе, можно не заморачиваться и рассылать события во все окна, а обрабатывать там где есть в этом
необходимость (список товаров). И нужно учесть один момент: событие получает текущее окно в потоке.
Т.е. если в списке товаров открыта, например, карточка товара - то именно карточка получит событие на обновление ...
Вариант с проверкой изменения группы товара в глобальной переменной по таймеру этого недостатка лишен ... ;)

Toolbox - параметр любому окну

Добавлено: 15 Март 2017, 13:48
RaFaeL
Если окон много, в какое ты хочешь передавать?
У нас сделано так - в каждом окне на OpenWindow и GainFocus идет GLO:GlobalThread=thread() и далее с тулбара в эту переменную-тред post, в окне ловишь событие и обрабатываешь

Toolbox - параметр любому окну

Добавлено: 15 Март 2017, 15:12
gopstop2007
Хоро
RaFaeL писал(а):Если окон много, в какое ты хочешь передавать?
У нас сделано так - в каждом окне на OpenWindow и GainFocus идет GLO:GlobalThread=thread() и далее с тулбара в эту переменную-тред post, в окне ловишь событие и обрабатываешь
Хорошее решение, как вариант, надо попробовать

Toolbox - параметр любому окну

Добавлено: 16 Март 2017, 9:28
Yufil
Вроде бы System{Prop:Active} хранит номер треда активного mdi окна. По крайней мере, было так...

Toolbox - параметр любому окну

Добавлено: 16 Март 2017, 9:30
Yufil
И точно хранит, в AbControl.tpw есть

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

#AT(%WindowManagerMethodCodeSection,'TakeAccepted','(),BYTE'),PRIORITY(3025)
 #SUSPEND
 #DECLARE(%DoneFirst)
 #FOR (%Control),WHERE(%ControlType='BUTTON' AND INSTRING('?Toolbar:',%Control,1,1)=1)
  #IF (NOT %DoneFirst)
  OF %Control
   #SET (%DoneFirst, 1)
  #ELSE
  OROF %Control
  #ENDIF
 #ENDFOR
    #?IF SYSTEM{PROP:Active} <> THREAD()
      #?POST(EVENT:Accepted,ACCEPTED(),SYSTEM{Prop:Active} )
      #?CYCLE
    #?END
 #RESUME
#ENDAT

Toolbox - параметр любому окну

Добавлено: 16 Март 2017, 15:58
gopstop2007
Yufil писал(а):Вроде бы System{Prop:Active} хранит номер треда активного mdi окна. По крайней мере, было так...
Спасибо, оказалось самое простое :)

Toolbox - параметр любому окну

Добавлено: 16 Март 2017, 17:01
Игорь Столяров
gopstop2007 писал(а):
Yufil писал(а):Вроде бы System{Prop:Active} хранит номер треда активного mdi окна. По крайней мере, было так...Спасибо, оказалось самое простое
Я заранее извиняюсь за свою простоту, но можно пояснить для тех, кто в танке:
Как номер активного треда поможет передать событие на обновление из ToolBar в несколько открытых MDI окон ?!
Спасибо.

Toolbox - параметр любому окну

Добавлено: 16 Март 2017, 17:17
gopstop2007
Игорь Столяров писал(а):Я заранее извиняюсь за свою простоту, но можно пояснить для тех, кто в танке:
Как номер активного треда поможет передать событие на обновление из ToolBar в несколько открытых MDI окон ?!
Спасибо.
Это только для моего случая, смотрим в начало и видим все открываемые окна в максимайз, максимум, что может быть открыто и активно кроме основного окна, так это тулбокс :) И даже, если много окон и окно с товаром не активно, а группа товаров активна, то все равно не расходуются лишние ресурсы :) А насчет окон, мне казалось, что активно как правило одно на котором я нахожусь, или не так? :)