Справочное руководство по TDMS 7.0 API
Example
Смотри также Отправить замечание

Glossary Item Box

Исходный текст

Option Explicit
Call TestFormsCollection(ThisObject)


'==============================================================================
' Выполнить одно из выбранных пользователем действий над коллекцией форм
' (нужны права системного администратора).
'==============================================================================
Sub TestFormsCollection(Obj)
        
        Dim SelDlg, RetVal, strAction, ArActions, FCol, form
        ArActions = Array("Создать форму", "Добавить форму к типу объекта", _
                                    "Удалить форму из коллекции", "Вывести информацию о форме")
        
        'Получить ссылку на коллекцию форм, определенную для объекта данного типа
        Set FCol = Obj.ObjectDef.InputForms
        
        'Если коллекция пустая, можно только добавить в нее форму или создать новую
        '(обрежем массив возможных действий до 2х элементов)
        If FCol.Count=0 Then ReDim Preserve ArActions(1)

        'Предоставить пользователю выбрать действие 
        Set SelDlg = ThisApplication.Dialogs.SelectDlg
        SelDlg.SelectFrom = ArActions 
        SelDlg.Prompt = "Выберите действие:"
        RetVal = SelDlg.Show
        
        'Если пользователь отменил диалог или ничего не выбрал, закончить работу.
        'Диалог вернул массив, поскольку был инициализирован строковым массивом
        If (RetVal <> TRUE) Or (UBound(SelDlg.Objects)<0) Then Exit Sub
        
        'Выполнить все заданные действия
        For Each strAction In SelDlg.Objects
                If StrComp(strAction, ArActions(0))=0 Then
                                                                                            Call CreateForm(FCol)
                ElseIf StrComp(strAction, ArActions(1))=0 Then
                                                                                            Call AddForm(FCol, SelDlg)
                ElseIf StrComp(strAction, ArActions(2))=0 Then
                                                                                            Call RemoveForm(FCol)
                ElseIf StrComp(strAction, ArActions(3))=0 Then
                                                                                            Call ShowInfo(FCol)
                End If
        Next

End Sub
'==============================================================================    

'==============================================================================
'Создать форму в коллекции 
'==============================================================================
Sub CreateForm(FCol)
        Dim NewForm, StrRet, StrSysName, EditObjDlg

        'Запросить описание создаваемой формы
        StrRet = InputBox("Введите описание для создаваемой формы:")
        
        'Если введена пустая строка, выйти из процедуры
        If StrRet = "" Then Exit Sub
        
        'Проверить, существует ли такое системное имя; если да - запросить другое
        StrSysName = "FRM_TEST"
        While FCol.Has(StrSysName)
                    StrSysName = InputBox("Введите другое сист. имя (такое уже есть):",, StrSysName)
        Wend
        
        'Отключить обработку ошибок
        On Error Resume Next
        
        'Создать новый объект TDMSForm в коллекции типа объекта. Новая форма 
        'автоматически добавляется также в коллекцию приложения.
        Set NewForm = FCol.Create
        NewForm.Description = StrRet
        NewForm.Caption = "Тестовая форма" 
        NewForm.SysName = StrSysName
        
        'Создадим небольшой скрипт для новой формы (обработка события BeforeClose)
        NewForm.Script = "Sub Form_BeforeClose(Form, Obj, Cancel)"  & Chr(13) & _
                "        MsgBox ""Good bye!"""  & Chr(13) & "End Sub"
                
        'Если была ошибка создания формы, сообщить
        If Err<>0 Then
                MsgBox "Ошибка создания формы """ & NewForm.SysName & """", vbExclamation
        Else
                'Показать форму
                NewForm.Show
        End If
End Sub
'==============================================================================

'==============================================================================
'Добавить форму в коллекцию 
'==============================================================================
Sub AddForm(FCol, SelDlg)
        Dim RetVal, ArSize, ArForms, frm, i
        
        'Заполнить массив ссылками на формы ввода, созданные в приложении
        ArSize = ThisApplication.InputForms.Count
        ReDim ArForms(ArSize)
        
        For i=0 To ArSize-1
                Set ArForms(i) = ThisApplication.InputForms(i)
        Next
        
        'Открыть диалог выбора, передав на вход массив форм
        SelDlg.SelectFrom = ArForms
        SelDlg.Caption = "Формы ввода"
        SelDlg.Prompt = "Выберите форму для добавления в коллекцию:"
        RetVal = SelDlg.Show
        
        'Если пользователь ничего не выбрал или отменил диалог, выйти из процедуры
        If (Not RetVal) Or (UBound(SelDlg.Objects)<0) Then Exit Sub
        
        'Отключить обработку ошибок (они могут возникнуть при добавлении формы)
        On Error Resume Next
        
        'Добавить выбранные формы в коллекцию
        For Each frm In SelDlg.Objects
                    FCol.Add frm
                    'Если ошибка все-таки была, возможно форма уже в коллекции
                    If Err<>0 Then
                            MsgBox "Ошибка добавления формы """ & frm.Description & """" & Chr(13) &_
                                         "(возможно, уже в коллекции).", vbExclamation
                    End If
        Next
End Sub
'==============================================================================

'==============================================================================
'Удалить форму из коллекции 
'==============================================================================
Sub RemoveForm(FCol)
        Dim StrRet, index 
        
        'Запросить индекс формы для удаления. Он не должен превышать количество 
        'форм в коллекции
        StrRet = InputBox("Введите индекс формы, которая должна быть удалена:" & Chr(13) &_
                         "(от 0 до " & FCol.Count-1 & "):")
        
        'Если введено не-число или диалог отменен, выйти из процедуры
        If (StrRet="") Or (Not IsNumeric(StrRet)) Then Exit Sub
        
        'Получить введенный индекс
        index = CLng(StrRet)
        
        'Возможно, введенное число выходит за границы допустимого диапазона
        If Not FCol.Has(index) Then
                MsgBox "Задан недопустимый индекс.", vbExclamation
                Exit Sub
        End If
        
        'Отключить обработку ошибок (они могут возникнуть при удалении формы)
        On Error Resume Next
        
        'Попытаться удалить форму
        FCol.Remove FCol.Item(index)
        
        'Если ошибка все-таки была, скорее всего это потому что форма используется.
        If Err<>0 Then
                MsgBox "Ошибка удаления формы (возможно, используется каким-либо объектом.)", _
                                    vbExclamation
        End If
        
End Sub
'==============================================================================

'==============================================================================
'Вывести информацию о форме с заданным индексом
'==============================================================================
Sub ShowInfo(FCol)
        Dim StrRet, index, frm, StrInfo
        
        'Запросить индекс формы. Он не должен превышать количество 
        'пользовательских значков в приложении
        StrRet = InputBox("Введите индекс формы" & Chr(13) &_
                         "(от 0 до " & FCol.Count-1 & "):")
        
        'Если введено не-число или диалог отменен, выйти из процедуры
        If (StrRet="") Or (Not IsNumeric(StrRet)) Then Exit Sub
        
        'Получить введенный индекс
        index = CLng(StrRet)
        
        'Возможно, введенное число выходит за границы допустимого диапазона
        If Not FCol.Has(index) Then
                MsgBox "Задан недопустимый индекс.", vbExclamation
                Exit Sub
        End If
        
        'Получить ссылку на форму из коллекции
        Set frm = FCol.Item(index)
        
        'Сформировать строку с информацией
        StrInfo = "Форма под номером " & index+1 & Chr(13)
        StrInfo = StrInfo & "Описание: " &  frm.Description & Chr(13)
        StrInfo = StrInfo & "Системное имя: " &  frm.SysName & Chr(13)
        StrInfo = StrInfo & "Наличие скрипта: " &  (frm.Script<>"") & Chr(13)
        StrInfo = StrInfo & "Всего атрибутов: " &  frm.Attributes.Count & Chr(13)
        StrInfo = StrInfo & "Всего элементов управления: " &  frm.Controls.Count
        
        'Вывести информацию о форме в окно сообщений
        ThisApplication.AddNotify StrInfo 
End Sub
'==============================================================================
© 2023 CSoft Development. Все права защищены.