Pytanie:
Jak edytować listę parametrów za pomocą interfejsu COM?
Odpowiedź:
Parametry modelu można modyfikować za pomocą interfejsu IModel (od IModel3):
Sub test_parametr ()
Dim iApp As RFEM5.Application
Ustaw iApp = GetObject(, "RFEM5.Application")
iApp.LockLicense
Dim j As Integer
j = iApp.GetModelCount
Dim iMod As RFEM5.IModel3
Set iMod = iApp.GetActiveModel
On Error GoTo e
Dim formParams () As RFEM5.FormulaParameter
' uzyskaj wszystkie parametry formuły
formParams = iMod.GetFormulaParametry
' usuń wszystkie parametry formuły
iMod.CleanFormulaParametry
' ustawić listę parametrów formuły
ReDim Zachowaj formParams(0 To UBound(formParams, 1) + 1)
formParams(UBound(formParams, 1)).Name = "p"
formParams(UBound(formParams, 1)).Unit = "m"
formParams (UBound (formParams, 1)).UnitType = LengthUnitType
formParams(UBound(formParams, 1)).Value = 0
formParams(UBound(formParams, 1)).ValueType = DoubleType
formParams(UBound(formParams, 1)).Comment = "nowy parametr"
formParams(UBound(formParams, 1)).Formula = "b/3"
formParams(UBound(formParams, 1)).RangeOfValues = "(3;5,5"
iMod.SetFormulaParametry formParams
e:
Jeżeli Err.Number 0 to MsgBox Err.description, vbCritical, Err.Source
iMod.GetApplication.UnlockLicense
Ustaw iMod = Nic
End Sub
Odczytanie wszystkich parametrów jest możliwe tylko przy użyciu funkcji GetFormulaParameters (). Zmodyfikowane lub nowe parametry można następnie przenieść ponownie w postaci listy za pomocą funkcji SetFormulaParameters (). Dzięki temu nie można odczytać ani zapisać poszczególnych parametrów.
Należy pamiętać, że "Wartość" związana z typem (ValueTyp) i jednostką (Unit) musi mieścić się w zdefiniowanych granicach (RangeOfValues), w przeciwnym razie pojawi się komunikat o błędzie. Jeżeli wartość jest obliczona, jak w przykładzie, nie ma ona znaczenia, a wartość obliczona ze wzoru (wzór) musi mieścić się w określonych granicach.