Hallo Jürgen,
im Zuge der Implementierung der MLL-Extensions für Peters Schedule Extension bin ich auch über die Makroextensions gestolpert.
Ein geniale Idee mit vielen Möglichkeiten.
Dies hat mich auf die dumme Idee gebracht, daß ich die Animations-Makros in der pyMLL, die ja am Ende recht komplexe Patternmakos ausspucken, ja um eine Funktion erweitern könnte, individuelle Makroerweiterungen zu erzeugen, die in der pyMobaledLIb UND im Excel ProgrammGenerator gleichermaßen genutzt werden können.
Nach längerem Ausprobieren, habe ich jetzt eine Lösung für die MultiLED_Farb-Animation implementiert, die im pyMLL und in Excel funktioniert.
Allerdings bin ich dabei auf ein Problem gestoßen, für das ich keine einfache Lösung gefunden habe, und für die ich erstmal einen Workaround implementiert habe. Vielleicht habe ich da ja auch etwas übersehen.
Ich möchte erreichen, daß der Erweiterungsmakro einen Makro mit folgendem Aufbau erzeugt: APatternT1(#LED,28,#InCh,3,0,128,0,PM_NORMAL,1000,256,0,0,0,0,0)
Die MobaLedLib.properties sieht dazu folgendermaßen aus:
Code: Alles auswählen
{
"id": "HL_TestMacro",
"minimumMobaLedLibVersion": "3.1.0",
"platforms": [
"ESP32",
"AM328"
],
"macros": [
{
"Macro": "APatternT1",
"Arguments": [
"LED",
"EX.HL_TestMacro.Params1",
"InCh",
"EX.HL_TestMacro.Params2",
"EX.HL_TestMacro.Zeit",
"EX.HL_TestMacro.Params3"
],
"DisplayName": "HL_TestMacro",
"ShortDescription": "HL_TestMacro Beschreibung",
"DetailedDescription": "HL_TestMacro Beschreibung",
"LEDs": "1",
"InCount": "1",
"OutCnt": "0"
}
],
"parameters": [
{
"ParameterName": "Zeit",
"Type": "",
"Min": "0",
"Max": "10000",
"Default": "1000",
"Options": "",
"DisplayName": "Zeit",
"ShortDescription": "Dauer in sec"
},
{
"ParameterName": "Params1",
"Type": "Logic",
"Min": "0",
"Max": "255",
"Default": "28",
"Options": "",
"DisplayName": "ParamGroup1",
"ShortDescription": "ParamGroup1"
},
{
"ParameterName": "Params2",
"Type": "Logic",
"Min": "",
"Max": "",
"Default": "3,0,128,0,PM_NORMAL",
"Options": "",
"DisplayName": "ParamGroup2",
"ShortDescription": "ParamGroup2"
},
{
"ParameterName": "Params3",
"Type": "Logic",
"Min": "",
"Max": "",
"Default": "256,0,0,0,0,0",
"Options": "",
"DisplayName": "ParamGroup3",
"ShortDescription": "ParamGroup3"
}
],
"includes": "",
"macroIncludes": ""
}
Das funktioniert sehr gut.
Problem: Der Anwender bekommt die ParamGroup1 bis 1 natürlich auch angezeigt und könnte dort Änderungen vornehmen.
Es gibt die Möglichkeit, die Parameter mit einem "#" an erster Stelle zu verstecken. Nur leider werden dann die Defaultwerte nicht übernommen, sondern es werden die Parameternamen eingetragen.
In dem Python Code habe ich mich jetzt so beholfen, daß ich in der UserForm_Other in der Funktion Create_Result folgende Änderung eingebaut habe:
Code: Alles auswählen
def Create_Result(self):
fn_return_value = ""
p = Variant()
#-------------------------------------------------------------
# Return True if sucessfully checked all inputs
Res = ''
for p in self.ParList:
val = 'Not Found'
p = Trim(p)
if Left(p, 1) == '#':
#***********************************************
#* change for Macrocreation feature
#***********************************************
val = p
if p.startswith("#EX."):
Typ, Min, Max, Def, Opt, InpTxt, Hint = M10.Get_Par_Data(p[1:])
val = Def
else:
Der zusätzliche Code:
#***********************************************
#* change for Macrocreation feature
#***********************************************
val = p
if p.startswith("#EX."):
Typ, Min, Max, Def, Opt, InpTxt, Hint = M10.Get_Par_Data(p[1:])
val = Def
Der zusätzliche Code überprüft, ob es sich um einen Extension-Macro handelt, holt dann die Parameter des Makros und setzt val auf den definierten Defaultwert.
In der Excel VBA wäre dieser Code im Modul UserForm_Other ab Zeile 862 einzufügen.
Bin ich da auf dem richtigen Weg oder gibt es eine bessere Lösung?
Viele Grüße
Harold

