Конференция "Corba" » Как правильно вызвать функцию? [D6, WinXP]
 
  • Виталий (05.02.09 12:34) [0]
    Всем доброго времени суток. Работаю с SolidWorks
    Задача такая: Нужно поменять текст в Annotation.
    В VBA делаю так:

    Dim swApp As Object
    Dim Part As Object
    Dim SelMgr As SelectionMgr
    Dim boolstatus As Boolean
    Dim longstatus As Long, longwarnings As Long
    Dim Feature As Object
    Dim n As Note
    Sub main()

    Set swApp = Application.SldWorks

    Set Part = swApp.ActiveDoc
    Set SelMgr = Part.SelectionManager
    swApp.ActiveDoc.ActiveView.FrameState = 1
    'boolstatus = Part.Extension.SelectByID2(\"Лист1\", \"SHEET\", 1.171892412521, 0.05186800888059, 0, False, 0, Nothing, 0)
    '
    boolstatus = Part.Extension.SelectByID2("Лист1", "SHEET", 1.171892412521, 0.05186800888059, 0, False, 0, Nothing, 0)
    Part.EditTemplate
    boolstatus = Part.Extension.SelectByID2("Детальный элемент1119@Формат листа1", "NOTE", 0, 0, 0, False, 0, Nothing, 0)
    'MsgBox CStr(SelMgr.GetSelectedObjectCount)
    Set n = SelMgr.GetSelectedObject6(1, 0)
    If Not n Is Nothing Then
    '
    MsgBox n.GetName
    If n.SetTextAtIndex(0, "1232112") Then
     'MsgBox n.GetName
    End If
    End If

    Part.ClearSelection2 True
    End Sub



    Все работает прекрасно значение элемента 1119 меняется
    Нужно это сделать в Delphi
    Пишу так:

    var longstatus:Longint; boolstatus :boolean;
    SelMgr:olevariant;      bres:HRESULT;
    begin
    SelMgr:= SolidDoc.SelectionManager;
    SolidDoc.EditTemplate;
    boolstatus := SolidDoc.Extension.SelectByID2('Детальный элемент1119@Формат листа1',
     'NOTE', 0, 0, 0, False, 0, null, 0,bres);
    Note:=SelMgr.GetSelectedObject6(1, 0);
    note.SetTextAtIndex(0, 'Ага');
    SolidDoc.ClearSelection2(True);
    end;



    Компилится но при выполнении стопорится на SelectByID2
    с ошибкой "Несовпадение типов"
    Во всем виноват параметр NULL
    Туда судя по хелпу нужно вписать pointer, но если я ставлю nil компилятор ругатся "Type not allowed in Variant Dispatch call"

    Что нужно подставить чтоб заработало?
  • Anatoly Podgoretsky © (05.02.09 13:04) [1]
    А какой эквивалент типа Boolean в VBA.
    По сообщению видно что не Boolean в Дельфи.
    По тексту видно что это Объект, значит надо смотреть ДОМ на SolidWorks, начиная с Application
  • Виталий (05.02.09 13:19) [2]

    > А какой эквивалент типа Boolean в VBA.

    Тоже Boolean


    > По тексту видно что это Объект, значит надо смотреть ДОМ
    > на SolidWorks, начиная с Application

    Хелп всмысле?

    Вот что про параметры написано:

    Input:  (BSTR) Name
    Name of object to select or an empty string

    Input:  (BSTR) Type
    Type of object (uppercase) as defined in swSelectType_e or an empty string

    Input: (double) X
    X selection location or 0

    Input: (double) Y
    Y selection location or 0

    Input: (double) Z
    Z selection location or 0

    Input: (VARIANT_BOOL)

    Input: (long) Mark
    Value that you want to use as a mark; this value is used by other functions that require ordered selection

    Input: (LPCALLOUT) Callout
    Pointer to the associated callout

    Input: (long) SelectOption
    Selection option as defined in swSelectOption_e (see Remarks)

    Output: (VARIANT_BOOL) retval
    TRUE if item was successfully selected, FALSE if not



    Думаю что тут не булевый тип глючит а LPCALLOUT
  • Виталик (05.02.09 14:47) [3]
    Так с параметром разобрался, подставил туда IDispatch
    Другая трабла оказалась:

    Ругается на note.SetTextAtIndex(0, 'Ага');
    Мол "Metod not supported"

    Если кто знает как его вызвать просьба подсказать.
  • Максим (15.06.09 09:18) [4]
    напишите пожалуйста как вы проводите процесс  подключения в солиду в делфи, а то у меня не получается
    заранее благодарен
  • Максим (16.06.09 06:14) [5]
    напишите плиз как в делфи подключиться к солиду
 
Конференция "Corba" » Как правильно вызвать функцию? [D6, WinXP]
Есть новые Нет новых   [134427   +35][b:0][p:0.001]