(изменено: vitaly576, 15 июня 2021 14:09:30)

Тема: Действия в dbGrid

Добрый день!
Начал разбираться с сеткой DBGrid.
Делаю простой скрипт для показа присоединенных к операции эскизов. Как добавлять данные в столбцы разобрался.
Проблемы возникли в следующем:
1. Как для текущей строчки выполнить событие онКлик или ОндблКлик, тем самым показав присоединенный эскиз в модальном окне (выполнить действие ActionList.ActionByName("PrvAction"))?
В справке нашел событие ICsdnAxDbGridEvents_OnClick , но как им пользоваться не понял...

2. Как обновить данные в Гриде при нажатии на кнопку?

Re: Действия в dbGrid

Здравствуйте!
Ну честно говоря лучше все-таки нашими модулями пользоваться, писать намного меньше приходится.
Грид давно делался, когда возможности АПИ были минимальны.

По идее на нашу форму кладете Grid. При выборе в редакторе кода контрола https://help.technologics.ru/7.9/TCSHelp/_784.htm, в списке процедур должны появиться все события, которые мы распознали https://help.technologics.ru/7.9/TCSHelp/_785.htm. Соответственно на это событие и вешается код VBScript.

Ну других языках посложнее конечно.

2. Как обновить данные в Гриде при нажатии на кнопку?

По идее он сам должен все сделать. Набор данных (DataSource) нужно только обновить, который вы к нему прикрепили.

Спасибо сказали: vitaly5761

(изменено: , 15 июня 2021 15:28:15)

Re: Действия в dbGrid

Спасибо за ответ!
Честно говоря решился за написание данного макроса из-за трудного и долго добавления эскиза к операции встроенными средствами.
Получился такой код, но при двойном щелчке мышки событие не отрабатывается и эскиз не показывается:

Sub FormEvent_Grid_OnOnDblClick( Form, ObjName )
'Form As ITCSForm, ObjName As String
       Dim AM ' AS IGModule
  Dim Nmk 'As ISingleNomenclature
    Idx = Form.UserData.IndexOf(ActiveModuleTagName)
    If Idx >= 0 Then
       Set AM = Form.UserData.TagValues(Idx)
    Else
        Call TCSApp.ShowErrorMessage("Â UserData íå íàéäåíà ñòðîêà ñ èìåíåì '" & ActiveModuleTagName & "'!")
        Exit Sub
    End If

   Set Sketches = AM.Properties("TechnologySketches").AsIDispatch
  Set OpenSketch = Sketches.ActionList.ActionByName("PrvAction")
Call OpenSketch.Execute
End Sub

Эскизы в Грид вывожу следующим образом:

Set Sketches = AM.Properties("TechnologySketches").AsIDispatch

Dim TCSCsdnAxGrid 'As CSDN.CsdnAxDbGrid
Set TCSCsdnAxGrid = Form.Controls("Grid")
Form.c_Grid.visible= true
TCSCsdnAxGrid.visible = true
TCSCsdnAxGrid.DataSource = Sketches
Call TCSCsdnAxGrid.Columns.Clear
Call TCSCsdnAxGrid.Columns.Add(Sketches.Properties("SKETCH_POS"))
Call TCSCsdnAxGrid.Columns.Add(Sketches.Properties("SKETCH_NOTE"))

TCSCsdnAxGrid.AutoFitColWidths = True
TCSCsdnAxGrid.AutoSize = True

Form.c_Grid.Columns.Item(0).Caption = "№ эскиза"
Form.c_Grid.Columns.Item(1).Caption = "Наименование"
Set TCSCsdnAxGrid = Nothing

Re: Действия в dbGrid

Ну да, там есть неудобство с докуменатами, хотя благодаря этому можно очень гибко настроить.

Попробуйте мастер создания эскизов. С ними попроще https://help.technologics.ru/7.9/TCSHelp/_257.htm.

Ну а так в данном случае лучше всего использовать дерево. Там очень много можно удобно и быстро делать https://forum.technologics.ru/post14273.html#p14273.

С событием посмотрим.

Re: Действия в dbGrid

Олег Зырянов пишет:

Попробуйте мастер создания эскизов. С ними попроще https://help.technologics.ru/7.9/TCSHelp/_257.htm.

С ним ранее и работали. Как раз с ним особо и не удобно работать, так как слишком много всплывающих окон.

Re: Действия в dbGrid

Здравствуйте.
Не понимаю почему макрос получает только один эскиз в операции, тогда как их в операции два.

Set TechSketches = AM.Properties("TechnologySketches").AsIDispatch
TechSketches.First
    Do
Pos = TechSketches.Properties("SKETCH_POS").AsSafeString
Call Node.SetNodePropValues( "REM", Pos )
Call Node.SetNodePropValues( "VALUE", TechSketches.Properties("SKETCH_NOTE").AsSafeString )
 TechSketches.Next
    Loop While Not TechSketches.Eof

Re: Действия в dbGrid

Может потому что нода одна и перезаписывается просто?

С гридом пока не разобрались, но события там похоже не работают.

Re: Действия в dbGrid

Олег Зырянов пишет:

Может потому что нода одна и перезаписывается просто?

Спасибо, разобрался.
Теперь снова затык по событиям нажатия.
Допустим есть два эскиза в дереве, как добавить событие онДблКлик на открытие предварительного просмотра эскиза?

Re: Действия в dbGrid

Sub FormEvent_AxDbTree_0_OnOnDblClick( Form, ObjName )
'Form As ITCSForm, ObjName As String
  Call theApp.ShowErrorMessage( "DblClick" )
End Sub

Где AxDbTree_0 Имя в дизайнере.

(изменено: vitaly576, 17 июня 2021 11:59:27)

Re: Действия в dbGrid

Олег Зырянов пишет:
Sub FormEvent_AxDbTree_0_OnOnDblClick( Form, ObjName )
'Form As ITCSForm, ObjName As String
  Call theApp.ShowErrorMessage( "DblClick" )
End Sub

Где AxDbTree_0 Имя в дизайнере.

Сделал так:

 Set Sketches = AM.Properties("TechnologySketches").AsIDispatch
 Set OpenSketch = Sketches.ActionList.ActionByName("PrvAction")

Call OpenSketch.Execute
 Call TCSApp.ShowErrorMessage( "DblClick" )

В таком виде работает, но окошко предварительного просмотра эскиза находится поверх сообщения "DblClick" и закрыть его нельзя.
Если выполнять скрипт без строчки Call TCSApp.ShowErrorMessage( "DblClick" ), тогда эскиз не выводится вообще. Странно как-то работает.

Re: Действия в dbGrid

Ну так это еще более менее будет работать (и то от версии к версии может поменяться) если вы наш модуль покажите на форме, а он у вас скрыт так понимаю (вы пишите свое отображение).

В этом случае и просмотр надо писать самому.

Re: Действия в dbGrid

А какой смысл в использовании строчки Call TCSApp.ShowErrorMessage( "DblClick" )?
Ведь в скрипте до этой функции указано, какие действия выполнять.

Re: Действия в dbGrid

А какой смысл в использовании строчки Call TCSApp.ShowErrorMessage( "DblClick" )?

ну пример показать что работает. Реальные действия в данном случае показать сложнее, ибо нужно всю программу прилагать.

Re: Действия в dbGrid

То есть без использования Call TCSApp.ShowErrorMessage не обойтись, чтобы просто показывалось системное окно с предварительным просмотром эскиза?

Re: Действия в dbGrid

То есть без использования Call TCSApp.ShowErrorMessage не обойтись, чтобы просто показывалось системное окно с предварительным просмотром эскиза?

Я не понял вопрос. Это просто пример что событие отрабатывает, а не руководство так делать.
Окно просмотра надо самому писать, если уж вы наш модуль скрываете и делаете свою форму.
Можно просто положить наш подуль к себе на форму и все будет работать (правда тогда как в TechnologiCS).

Re: Действия в dbGrid

Олег Зырянов пишет:

Можно просто положить наш подуль к себе на форму и все будет работать (правда тогда как в TechnologiCS).

Если можно покажите пожалуйста пример, какой модуль положить на форму и примерный код.

Re: Действия в dbGrid

Там все очень просто сейчас https://help.technologics.ru/7.9/TCSAPI … dule_9.htm

Например

Sub FormEvent_OnFormCreate(Form)
 Call Form.AddTCSModule( theApp.Mesuriments, "Mes", "", True, False, Null )
End Sub

Re: Действия в dbGrid

А какой модуль подключать для реализации показа эскиза?
Вы извините за такие вопросы, не получается никак сделать.

Re: Действия в dbGrid

А какой модуль подключать для реализации показа эскиза?

ну если наш не нравится, то надо делать свой. Выгрузить эскиз на диск,  затем отобразхить его в компоненте Image.

(изменено: vitaly576, 22 июня 2021 07:03:11)

Re: Действия в dbGrid

Олег Зырянов пишет:

А какой модуль подключать для реализации показа эскиза?

ну если наш не нравится, то надо делать свой. Выгрузить эскиз на диск,  затем отобразхить его в компоненте Image.

В общем-то реализация показа эскиза Ваша нравилась. Нужно было просто выполнить функцию показа эскиза, через 

Set OpenSketch = Sketches.ActionList.ActionByName("PrvAction")
Call OpenSketch.Execute

Для чего писать свои функции предпросмотра эскиза я так и не понял, так как Call OpenSketch.Execute в Api Explorer работает. Получается для реализации простого выполнения функции открытия нужно кучу не нужного самостоятельно написать, вместо того, чтобы воспользоваться системной функцией...

Касаемо выгрузки, как выгружать эскиз выделенной позиции в дереве?
Дерево строится так:

'Строим дерево по операциям ТП
oper.First
Do
 If oper.ClassType = CSDN_Const.ctOperation then
 operpos = oper.Properties("OPER_POS").AsSafeString
 nameoper = oper.Properties("NMK_NAME").AsSafeString
 oper1 = operpos & " (" & nameoper & ")"
Set rootNode = axTree.AddNode( oper1, nothing )
  Set TechSketches = oper.Properties("TechnologySketches").AsIDispatch
   if TechSketches.Properties("ID").value<>0 or TechSketches.Properties("id").value <> null then

'Строим дерево по эскизам в операциях ТП
      TechSketches.First
      Do
      a=a+1
        Set Node = axTree.AddNode( TechSketches.Properties("SKETCH_POS").AsSafeString, rootNode )
        Call Node.SetNodePropValues( "VALUE", TechSketches.Properties("SKETCH_NOTE").AsSafeString )
         TechSketches.Next
      Loop While Not TechSketches.Eof
    Call rootNode.Expand( True )
    end if
 end if
oper.Next
Loop While Not oper.Eof
 axTree.DbTree.SaveChangesEx

Re: Действия в dbGrid

https://help.technologics.ru/7.9/TCSAPI … etches.htm.

там есть https://help.technologics.ru/7.9/TCSAPI … File_9.htm

Re: Действия в dbGrid

Получается для реализации простого выполнения функции открытия нужно кучу не нужного самостоятельно написать, вместо того, чтобы воспользоваться системной функцией...

Ну в данном случае с эскизами непросто работать. Но специальной функции или модуля для показа эскиза в АПИ нет.

Вызов Action (как и работа с ChildModules) - это доступ к внутренним нашим объектам, и их работа сильно специфична от версии в версии.

(изменено: vitaly576, 22 июня 2021 07:34:17)

Re: Действия в dbGrid

Понятно. Жаль, что приходиться из "мухи делать слона".
Не подскажите как выгружать эскиз выделенной позиции в дереве?

Re: Действия в dbGrid

Как и в TCS. Взять версию документа, у нее получить эскизы, найти нужный эскиз и сохранить его на диске.

Там нет понятия выделенной позиции, поэтому пример написать сложно, тут уже от вашей реализации зависит все (можно сделать сильно по разному).
По факту что то типа примера из хелпа  (немного модифицирован)

If App.Folders.RunModuleForSelect("Выберите документ", False) > 0 Then
    Set Sketches = App.Folders.Properties("SKETCHES").AsIDispatch
    If Sketches.RunModuleForSelect("Выберите эскизы документа", False ) >0 Then
       Call Sketches.SaveToFile( "C:\1.jpg" )
    End if
End If

Re: Действия в dbGrid

Это все я сделал. Никак не получается выгружать на диск именно выделенную строчку.
Получилась такая форма ввода и дерево с привязанными эскизами:
Действия в dbGrid