Angeregt durch die vorgegangene Diskussion, habe ich mal versucht, in GP-Script die ehemals von mir gewünschten "Radio-Buttons" zu realisieren.
Es mag zugegebenermaßen etwas "unelegant" programmiert sein, aber es funktioniert tatsächlich!
(Falls im nächsten Release die angekündigte "Select" Funktion implementiert ist, wird es vielleicht nochmal etwas strukturierter)
Und vielleicht interessierte es ja den ein oder anderen, deshalb haue ich den Versuch einfach mal hier rein.
Vorgabe: Drei Buttons, von denen immer nur einer gedrückt sein darf (die anderen beiden werden automatisch abgeschaltet = wie früher beim Radio).
Die Buttons habe ich folgendermaßen benannt grp1_btn1 ... grp1_btn3 (Gruppe 1 Button 1... 3, falls man mal mehrere Buttongruppen bräuchte)
Darüber ein Label mit Namen lbl_msg1, das ich als Statusdisplay missbrauche.
Um auch irgendwas Sinnvolles schalten zu können, habe ich drei Instanzen eines Freeware Step-Sequencers (HY-SEQ16) mit jeweils einem eigenen Pattern benutzt, die alle in ein Synth-VSTI reinspielen.
Es würden normalerweise also drei unterschiedliche MIDI-Sequenzen gleichzeitig (aber synchron!) in den Synthie reinlaufen.
Durch die Verknüpfung mit den Radiobuttons kann man nun einfach per Knopfdruck zwischen den drei Sequencer-Pattern hin und her schalten (oder aus - das geht auch).
HINWEIS: Nicht vergessen, auch in GP auf "PLAY" zu drücken, sonst läuft die intrene Clock nicht los und es passiert nichts.
Eigentlich von der Grundfunktion her das Einfachste was es gibt, aber ohne GP-Script (meiner Meinung nach) mit den vorhandenen Hilfsmitteln nicht zu lösen. Geniale Sache!
Der Script-Schnipsel:
var
grp1_btn1 : Widget
grp1_btn2 : widget
grp1_btn3 : widget
lbl_msg1 : widget
widg_val : double
on WidgetValueChanged (widg_val : double) from grp1_btn1
if widg_val > 0
then
SetWidgetValue(grp1_btn2,0)
SetWidgetValue(grp1_btn3,0)
SetWidgetLabel(lbl_msg1 , "Button 1 active")
end
end
on WidgetValueChanged (widg_val : double) from grp1_btn2
if widg_val > 0
then
SetWidgetValue(grp1_btn1,0)
SetWidgetValue(grp1_btn3,0)
SetWidgetLabel(lbl_msg1 , "Button 2 active")
end
end
on WidgetValueChanged (widg_val : double) from grp1_btn3
if widg_val > 0
then
SetWidgetValue(grp1_btn1,0)
SetWidgetValue(grp1_btn2,0)
SetWidgetLabel(lbl_msg1 , "Button 3 active")
end
end
Angehängt sind noch ein paar Screenshots und der gepackte Rackspace (zum Ausprobieren und selbst schrauben)