Задать свойство объекту

Автор Dayforce, 31.03.21, 13:20:22

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Dayforce

Который раз не могу задать свойство объекта. Проблема только в VBA.
Получаю интерфейс IView, и пытаюсь изменить значение свойства Scale. Выскакивает ошибка при компиляции "Syntax Error". Команда SetScale так же не работает (ее нет в библиотеке). Прочитать значение могу, присвоить - нет. В других интерфейсах была такая же проблема

Set IView = IViews.View("Спереди 1")
IView.Scale = 0.2
(Тут выдает ошибку)


В этом же интерфейсе без проблем могу присвоить BOOL значение свойству Visible.

Dayforce

Забавно, обходится через конструкцию With, хоть на выходе получается один и тот же код


p3452

Если избавится от привычки давать переменным имена интерфейсов - будет жить намного легче!

Dayforce

Цитата: Петрович-47 от 31.03.21, 14:29:04Поподробнее?

IView.Scale = 0.2 - не работает

With IView
    .Scale = 0.2
End With

Работает

Dayforce

Цитата: p3452 от 31.03.21, 20:53:27Если избавится от привычки давать переменным имена интерфейсов - будет жить намного легче!

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

Обычно все изменения после Update наступают, на Delphi код работает без проблем.
pDrawingObject:=pView as IDrawingObject;
if pDrawingObject<>nil then
begin
  pView.Name:=Name;
  pView.Color:=Color;
  pView.X:=X;
  pView.Y:=Y;
  pView.Angle:=Angle;
  pView.Scale:=Scale;
  pDrawingObject.Update;
end;

Dayforce

Цитата: Sabahs от 01.04.21, 06:52:22Обычно все изменения после Update наступают, на Delphi код работает без проблем.
pDrawingObject:=pView as IDrawingObject;
if pDrawingObject<>nil then
begin
  pView.Name:=Name;
  pView.Color:=Color;
  pView.X:=X;
  pView.Y:=Y;
  pView.Angle:=Angle;
  pView.Scale:=Scale;
  pDrawingObject.Update;
end;

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

p3452

Цитата: Dayforce от 01.04.21, 07:30:46Update тоже делал, проблема в другом, код отказывался запускаться еще на стадии компиляции.
Что и требовалось доказать...
А формулировка ошибки, что нибудь в этом духе - "IView - тип, а используется как переменная"!?

Петрович-47

Цитата: Dayforce от 01.04.21, 06:34:34Работает
Так я и подумал, но уточнил, навсякойслучай

Спасибо

Dayforce

Цитата: p3452 от 01.04.21, 07:35:38Что и требовалось доказать...
А формулировка ошибки, что нибудь в этом духе - "IView - тип, а используется как переменная"!?

Боже, я уже ответил, что в коде у меня другое название переменных.. С какого раза вы это поймете?

p3452

Цитата: Dayforce от 01.04.21, 11:05:47Боже, я уже ответил, что в коде у меня другое название переменных.. С какого раза вы это поймете?
Вы сами то себя понимаете!?
- Пишите, что у вас не работает код - выкладываете пример,
- вам отвечают почему ДАННЫЙ код может не работать,
- вы пишите, что, на самом деле, код у вас совершенно другой,
- и, по прежнему, просите по приведенному "левому" коду определить
  почему не работает ваш "настоящий" код???

Просто, человек не хочет, код, показать.
PS. Его проблемы.

p3452


Dayforce

Цитата: p3452 от 01.04.21, 14:13:06Вы сами то себя понимаете!?
- Пишите, что у вас не работает код - выкладываете пример,
- вам отвечают почему ДАННЫЙ код может не работать,
- вы пишите, что, на самом деле, код у вас совершенно другой,
- и, по прежнему, просите по приведенному "левому" коду определить
  почему не работает ваш "настоящий" код???

Хорошо, копирую код как есть:


Set CurrentView = kViews.View("Спереди 1")
CurrentView.Scale = 0.2


Почему VBA жалуется на код? Подчёркивает его красным ещё до компиляции?

p3452

Цитата: Dayforce от 01.04.21, 20:20:57Почему VBA жалуется на код? Подчёркивает его красным ещё до компиляции?
Снизошли до исправления имени переменной - хорошо!
Но зачем то попытались изменить интерфейс с API7 на API5 - плохо!

1. Читайте то что вам сообщает компилятор - он не даром "ругается".
2. Попытайтесь в справке по SDK выполнить поиск по "kViews" - нашли что-нибудь?
3. Определитесь с выбором интерфейса - API7 или API5.
4. Обратите внимание на способ присвоения 
- для API 5: CurrentView.scale_ = 0.2
- для API 7: CurrentView.Scale = 0.2

Да потому что, вы одну старую ошибку исправили, а новую ошибку добавили

Dayforce

Цитата: p3452 от 01.04.21, 23:01:22Снизошли до исправления имени переменной - хорошо!
Но зачем то попытались изменить интерфейс с API7 на API5 - плохо!

1. Читайте то что вам сообщает компилятор - он не даром "ругается".
2. Попытайтесь в справке по SDK выполнить поиск по "kViews" - нашли что-нибудь?
3. Определитесь с выбором интерфейса - API7 или API5.
4. Обратите внимание на способ присвоения 
- для API 5: CurrentView.scale_ = 0.2
- для API 7: CurrentView.Scale = 0.2

Да потому что, вы одну старую ошибку исправили, а новую ошибку добавили

Виды получаю через интерфейс IViewsAndLayersManager, значит использую API7. Проблема не решилась. Предполагаю, что ошибка все-таки в проверке синтаксиса VBA, который даже не дает начать компиляцию, т.к с конструкцией With код на машинный язык раскрывается в таком же виде, что и без With.

p3452

)
' Создать вид
Sub DrawView(ByRef doc As Kompas6API5.Document2D)
    Dim par As Kompas6API5.ViewParam ' Интерфейс ksViewParam
    ' Структура параметров вида
    par = Kompas.GetParamStruct(Kompas6Constants.StructType2DEnum.ko_ViewParam)

    Dim number As Integer
    Dim v As Integer
    Dim gr As Integer
    Dim p As Integer
    Dim var As Kompas6API5.LtVariant ' Интерфейс ksLtVariant
    If Not par Is Nothing Then ' Интерфейс создан

        number = 5 ' Номер вида

        par.Init() ' Инициализация
        par.x = 10 ' Точка привязки вида
        par.y = 20
        par.scale_ = 0.5 ' Масштаб вида
        par.angle = 45 ' Угол поворота вида
        par.color = RGB(10, 20, 10) ' Цвет вида в активном состоянии
        par.state = stACTIVE ' Состояние вида
        par.name = "user view" ' Имя вида

        v = doc.ksCreateSheetView(par, number) ' Создадим вид с номером 5, масштабом 0.5, под углом 45 гр.
        number = doc.ksGetViewNumber(v) ' Номер созданного вида
        Kompas.ksMessage("создали вид: ref = " & v & " number = " & number)

        ' Создание группы объектов, type - тип группы ( 0 - определяет модельный, 1 - временный )
        gr = doc.ksNewGroup(0)
        doc.ksLineSeg(20, 10, 20, 30, 1)
        doc.ksLineSeg(20, 30, 40, 30, 1)
        doc.ksLineSeg(40, 30, 40, 10, 1)
        doc.ksLineSeg(40, 10, 20, 10, 1)
        doc.ksEndGroup() ' Завершить создание группы объектов

        doc.ksAddObjGroup(gr, v) ' Добавим вид в группу
        Kompas.ksMessage("добавили вид в группу")
        '    Kompas.ksMessageBoxResult

        p = doc.ksLineSeg(10, 10, 30, 30, 0) ' Нарисуем отрезок
        doc.ksAddObjGroup(gr, p) ' И добавим его в группу

        Kompas.ksMessage("добавили эл в группу")
        '    Kompas.ksMessageBoxResult

        doc.ksRotateObj(gr, 0, 0, -45) ' Повернуть группу на -45 градусов вокруг точки ( 0, 0 )

        par.Init() ' Инициализация
        doc.ksGetObjParam(v, par, ALLPARAM) ' Получить параметры видa

        Kompas.ksMessage("x =" & par.x & " y = " & par.y & " angl = " & par.angle & " name = " & par.name & " st = " & par.state)

        doc.ksOpenView(0) ' Сделать текущим системный вид ( номер 0 )

        ' состояние  вида  : только чтение
        ' Интерфейс для хранения данных некоторого типа
        var = Kompas.GetParamStruct(Kompas6Constants.StructType2DEnum.ko_LtVariant)

        If Not var Is Nothing Then ' Интерфейс создан

            var.Init() ' Инициализация
            var.intVal = stREADONLY ' Изменить состояние вида ( только чтение )
            doc.ksSetObjParam(v, var, VIEW_LAYER_STATE)
            'UPGRADE_NOTE: Object var may not be destroyed until it is garbage collected. Click for more: 'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="6E35BFF6-CD74-4B09-9689-3E1A43DF8969"'
            var = Nothing
        End If

        'UPGRADE_NOTE: Object par may not be destroyed until it is garbage collected. Click for more: 'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="6E35BFF6-CD74-4B09-9689-3E1A43DF8969"'
        par = Nothing
    End If
End Sub

Dayforce

Цитата: p3452 от 02.04.21, 07:22:39)
' Создать вид
Sub DrawView(ByRef doc As Kompas6API5.Document2D)
    Dim par As Kompas6API5.ViewParam ' Интерфейс ksViewParam
    ' Структура параметров вида
    par = Kompas.GetParamStruct(Kompas6Constants.StructType2DEnum.ko_ViewParam)

    Dim number As Integer
    Dim v As Integer
    Dim gr As Integer
    Dim p As Integer
    Dim var As Kompas6API5.LtVariant ' Интерфейс ksLtVariant
    If Not par Is Nothing Then ' Интерфейс создан

        number = 5 ' Номер вида

        par.Init() ' Инициализация
        par.x = 10 ' Точка привязки вида
        par.y = 20
        par.scale_ = 0.5 ' Масштаб вида
        par.angle = 45 ' Угол поворота вида
        par.color = RGB(10, 20, 10) ' Цвет вида в активном состоянии
        par.state = stACTIVE ' Состояние вида
        par.name = "user view" ' Имя вида

        v = doc.ksCreateSheetView(par, number) ' Создадим вид с номером 5, масштабом 0.5, под углом 45 гр.
        number = doc.ksGetViewNumber(v) ' Номер созданного вида
        Kompas.ksMessage("создали вид: ref = " & v & " number = " & number)

        ' Создание группы объектов, type - тип группы ( 0 - определяет модельный, 1 - временный )
        gr = doc.ksNewGroup(0)
        doc.ksLineSeg(20, 10, 20, 30, 1)
        doc.ksLineSeg(20, 30, 40, 30, 1)
        doc.ksLineSeg(40, 30, 40, 10, 1)
        doc.ksLineSeg(40, 10, 20, 10, 1)
        doc.ksEndGroup() ' Завершить создание группы объектов

        doc.ksAddObjGroup(gr, v) ' Добавим вид в группу
        Kompas.ksMessage("добавили вид в группу")
        '    Kompas.ksMessageBoxResult

        p = doc.ksLineSeg(10, 10, 30, 30, 0) ' Нарисуем отрезок
        doc.ksAddObjGroup(gr, p) ' И добавим его в группу

        Kompas.ksMessage("добавили эл в группу")
        '    Kompas.ksMessageBoxResult

        doc.ksRotateObj(gr, 0, 0, -45) ' Повернуть группу на -45 градусов вокруг точки ( 0, 0 )

        par.Init() ' Инициализация
        doc.ksGetObjParam(v, par, ALLPARAM) ' Получить параметры видa

        Kompas.ksMessage("x =" & par.x & " y = " & par.y & " angl = " & par.angle & " name = " & par.name & " st = " & par.state)

        doc.ksOpenView(0) ' Сделать текущим системный вид ( номер 0 )

        ' состояние  вида  : только чтение
        ' Интерфейс для хранения данных некоторого типа
        var = Kompas.GetParamStruct(Kompas6Constants.StructType2DEnum.ko_LtVariant)

        If Not var Is Nothing Then ' Интерфейс создан

            var.Init() ' Инициализация
            var.intVal = stREADONLY ' Изменить состояние вида ( только чтение )
            doc.ksSetObjParam(v, var, VIEW_LAYER_STATE)
            'UPGRADE_NOTE: Object var may not be destroyed until it is garbage collected. Click for more: 'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="6E35BFF6-CD74-4B09-9689-3E1A43DF8969"'
            var = Nothing
        End If

        'UPGRADE_NOTE: Object par may not be destroyed until it is garbage collected. Click for more: 'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="6E35BFF6-CD74-4B09-9689-3E1A43DF8969"'
        par = Nothing
    End If
End Sub

Через API5 у меня проблем тоже не было