Same Host, VSTi midilearn works perfectly, VST FX plugin not working
Posts
-
RE: Exported plugin don´t show midilearn popup in daw,this is normal?posted in Bug Reports
-
RE: Exported plugin don´t show midilearn popup in daw,this is normal?posted in Bug Reports
It,s something specifically for vst Fx plugin. I exported recently a VSTi and this problem don.t exist
Really , not exactli Daw just a vstHost
-
RE: Exported plugin don´t show midilearn popup in daw,this is normal?posted in Bug Reports
Off course, but this is not the problem. enableMidiLearn is set to "true" for those components.
But it,s not working.
When I export to StandAlone App, there is no problem, but the exported plugin don´t show the midiLearn popup.
Maybe there´s any relation with the popupmenu LAF I,ve used? -
Exported plugin don´t show midilearn popup in daw,this is normal?posted in Bug Reports
Exported plugin don´t show midilearn popup in daw,this is normal?
-
Getting and changing Range Start and Range end in a Waveform associated to a Convolution Reverbposted in Scripting
Re: Any Examples of AudioWaveform (RangeStart editing?)

Content.makeFrontInterface(500, 350); const var ConvolutionReverb1 = Synth.getAudioSampleProcessor("Convolution Reverb1"); const AudioWaveform1 = Content.getComponent("AudioWaveform1"); const var Label1 = Content.getComponent("Label1"); const var Label2 = Content.getComponent("Label2"); const var Label3 = Content.getComponent("Label3"); const irs = Engine.loadAudioFilesIntoPool();const var IRsComboBox = Content.getComponent("IRsComboBox"); IRsComboBox.set("items",""); for (x in irs) IRsComboBox.addItem(x.replace("{PROJECT_FOLDER}").replace(".wav")); inline function onIRsComboBoxControl(component, value) { if (value > 0) ConvolutionReverb1.setFile(irs[value -1]); }; Content.getComponent("IRsComboBox").setControlCallback(onIRsComboBoxControl); const sampleComponents = [Content.getComponent("sampleStart"), Content.getComponent("sampleEnd")]; for(c in sampleComponents) c.setControlCallback(sampleComponentsCallback); inline function sampleComponentsCallback(component, value) { local rangeStart=NumSamples*sampleComponents[0].getValue(); local rangeEnd=NumSamples * sampleComponents[1].getValue(); ConvolutionReverb1.setSampleRange(rangeStart,rangeEnd); Label2.set("text","Range start at : "+ConvolutionReverb1.getSampleStart()); Label3.set("text","Range end at : "+ AudioWaveform1.getRangeEnd()); } inline function ConvolutionReverbChanged(processor,index,value) { reg IRFile=ConvolutionReverb1.getAudioFile(0); reg NumSamples=IRFile.getNumSamples(); sampleComponents[0].changed(); Label1.set("text","TOTAL SAMPLES: " + Engine.doubleToString(NumSamples,0) ); Label2.set("text","Range start at : "+ConvolutionReverb1.getSampleStart()); Label3.set("text","Range end at : "+ AudioWaveform1.getRangeEnd()); }; // Broadcaster definition const var ConvolutionChanged = Engine.createBroadcaster({ "id": "ConvolutionChanged", "args": ["processor", "index", "value"], "tags": [] }); // attach to event Type ConvolutionChanged.attachToComplexData("AudioFile.Content", ["Convolution Reverb1"], "0", ""); // attach first listener ConvolutionChanged.addListener(ConvolutionReverb1, "AudioFile", ConvolutionReverbChanged);And the snippet for a rapid probe. I hope can be "usable" :
HiseSnippet 3005.3oc6Z8zaabbEeojVWS53TmD2VihlfwD8.oCKMon9qccDknDsYMkEKIkcRsERFs6PxMZ4NL6tTVJFtvG5gfh9An4V9DTjiEn4fJPAbOVf9EH8XOTf7Intu2tK4N6xkRTNtNsAg1Fly+d+edueyLrlIWgYYwMkhkn4g8XRwdE4FGZX2oTGplgTk0khcQ4U6qpwuGceVYtY25Ti1Lo0NrG0xhoJEK1z2DmYr3yH474qVYMpN0Pg42kjzc4ZJrpZc0r86sVwaqoqWlpxZp0UX1yUrhB2nDWm2GjpokyI0iprGsM6NTbZSIKcKpUGoXWQd1YaorTtbKUnv74nzBpT5b4YEVl0ZgVJyma4bp6NeN3OKHE6LanpYyMaXSsYVRwlYMt5gM5vengKCtqlk1t5LrQdoF.mc6tLWWEUQrWoRczzUqMvbYIADsluwaZWi2Ek2TSUaX+9FwK3L.weEhFvXSET7lNf3kWT7xIHdQHRwDDoYbEoWStghoVOa+QP44bxULrYlsnJA8ktyUZpOItbINLCC6rco6wJaBMFthTymKWFBXzSe8DfqxxlrO0j.yeetdeaMtQc19LycyStAwIVJaalsSLTCZ2d5rgRRpjBqg3snjCI5vvtVPXGRrARDPtR7t83FPiTICNsjAjopzcY5ieotCGwRl83WxrQrjBG+RJfKwaMZlVvj2vnslAKqNmp5nBk0zYVfMlWiy0Sk959zuRcKfb6xWievXYhvbPNIzLqECFWyl00JYlj3ffghj5.hlAJIoSDWbxTU0JvTScPVSVOczYm7Q0pu0uXiRMe+xaUc8Mp+3jo8GK6Co6mLMpZZF5f5PZ02PwwcxMDHKJylfVoLPfy.JldeV5DOJAgPzZQR4zl7NjbowdhGezvITQPiTJPpuu6z+Y42I80IteR73qmXBrMHU7DmRTc8cgbKohRVSe83C7WVNgsCIH57tezbxclv9XS6joyjfL1OG2x2vPMY5ct93WbBzClRAcfgEMv3oDkFFddCFHJO23l637dC+nyUn5DSr.giI3F2oeW2s7VWILQuetcPk+tHcff8HniKg.ig.YHWYDo694CRn3j3nIJdb3uiIHxkXNExR4KsYFvOjHwi6tQ2cyiM6.aXuiyJHV3jITax0HIe6HXP6ALvgpoRKPtBQPNlg5.hEJiGRo5dxDRFHd7wIF0cMhH.UcfEolp2f7rYzLTYGjw2mYxZCIUv8R2HZEXXBoTXNdm466Dtg6Rw4424.eXT9YEOABsDtobCXGZtUyUqRZr5l0ptQiqgDII4sGjdTk2GJ80j2v1TyncJeFlIWZhyd+DuPcUH6eA3qvjQIt5UIqYBo2UnVPkShJqklgFx+nqZ5427KMnXx..ABjHEteKolZRPBFcgIwDNIolssfwuexgt+jYf0fQ.3WbBBRtiyTsotScmDONsq3RssoJcH1bBXgLrIHDhDixortyqIG8y5rCVmZS8JD6DY3kcC328irD+NffjCkljA4aKHytMQWCzUClYjLVUsp2voF0gBTbnP.jeb6LPlF5iPYq6vsYaYjB2nDG1vQBOTqVQNlWFWcPvhZXDiq4wsvTF86tKyTH0pyDAbbAAGJOdvghXWUbcABSDJxAQea0iYLNDsRd9M.H4LdREfx01AF4OvCFYfvdIMUDZavsBRNJfH5eUH7.wqGFHg6d5MLrXcAMnQWnNyZHfBI+jxf9F61+VIoA4lw1W4OMkqn5HeS6Jeupm70PWSkY5HXmWVnbb.o5I2HwSWYRHw4jGVRN.A9f+3a8uFk.Wvi.CPR3IEBXKBaa9IEk1tBt6Awt6Y8AOROlosF5risNae3jStH4iKuNyZOadO3qCSvBx3o1Acfu.bwhG523RG8PMU6NC63y90E6vzZ2Q3PaZEGlVohJxzH1dKgXMGb9sWQdtYWdtkWXwYWddgAlMzHHJ36oY2oJqkcIcMk8.ceJKH3E2J6dvuXSKIn0mYBc6955S1VPWK9gE6RErCe4Jc4p.89gx2ALQTcsOloViYp.7BN4ozjwYwnEeZezGEhuhmV9Tv2y6x2y6wWmhTNr8rxtEUE3Iok.OORsXP+pj5H904J1Bh9bMzXbVKZecaIruFfH4OurEEctwOSlLW82i8yfbTTmzPwlFzh1FccsUx5fCUBKhJE6GKOZk97KuvBKsjzts8I47ySehCuDz8u+In6yJFSmRLlNrtW7CFQ2emIT2yDR2ey2j7rIU2uj7HHRJL+b4JDbKQ7y7nGczZHMwU4yoO+O+W9mXuhlos29IO6zZlJHXl9r8eIYltzktciI0L8ijCAzJ+hKs7RKDohGzD8EewSc5Mj87xW9S9cgsRmchyVKj7ntf0hXNvZIG6yf1CrTxwdKOI.Rc2SNw5lGtN0buF1IpBnxXj6AYJHanzgStETpKQWvhzuqPG047tj7N+2ZZswklvonn6nQUsLwc03voApTO2bRN4yjic1PZa7SHlXtwokeYuwokWzy5ig0MX5LEHh1fPwhL.DNcF4ZRQ6f8cWO6YOamv9kycBR57hIU4hIU+HeI8uFPR+4PqtPXpFdjIrjhqXusbqspSZdqJMxPHu2VaS1b6FMI2Z06tAY067djU2d8JaUtBjihT4N330ICuDDWnK6PtJw+RaRRHW9xWNjFtxJOcjrC9afNq7VGbXa.Jlzn2X2Ej2jq1WmZG7BDwqY0a.nXafasCuYNCKM6CEuF1v2p3LS1sJd7W54jJtulbMMakNQKuSEg7B.f9us75cGsmWdiVsfXVegcF4xu6wdgrmZQ4Dub1WefrHfexQVhFQknvAYUBdi6RR2iYKz0Qe5m9FGUEjbCk.F3Jc60W2hUkYzVDLvWshmbUwnWeaw921hsFUYu1l79FpM6.mFUM3xXpLcZ.dbKsRBz3S96EWGPDAosDmS4xM8.zNDDpOJuSwoDb.R4d7.ube3ICz47dAN5.1gvIGhM8DeY64O1KaWpNGbRFs2jBBHxd7tIfM+JL7XlFLc7vZwlByw41NG1F02FP4MmFPVvm4MXdrcLuAyOXPwv22z0n85xfAgQAkus6cW3dg9Ij8Zk+EwayzaheaFHH.wtGDBvQEWqOrGyLXuedQGVsZWHbJ.u7j75rdLp8lN3gGL3YKVu9Mg3udgWED9gIXZZBAnAhu9pU1xfA9SaQcrjI2xpEnNNzxRbnZ8gRyph83royJXefuUzqhNJX2AFCooLH.ve1NbIWS2z9SI61Nen1yFpcgPsmKT64C0dgPsWzusqAcSZOLx.ZG9ND9dSVLOPfZTPkElIfKYHwc6QL+6PyrinH7.auLe8rWp0495WV9Eyi8EefL1Py8Dn6CaKgdPY70G.VePuASQrI2f2qC2PSI3l.HntcalonrGoBsJd2c6IlMuNfIjZIrK9mVrJf+hZFbu8oxVj+T+vmQ5utjrq3Rv7Zjuc.mZ5u0Cm5qio6U8JLRbAE7+194WQ1IUNAq79Mkn9x.Vix.RA5l22ctEzXSyLvRGNmRPGpCqKFRaAfJPQBpnIZPeiAAhNmHqJGu9Twe4JDrKRM.o5wiN5u8hGcTiCMTBmzaL3Vjjp5.T0S8ExDy413COH9KmQ3Uq.xeRfW7QWunboq8..3ho0C9PNLqGrYeKMkGTei0gy5pB6Qzz2mYA3KwSdzmoaSsDgZiDyCp8Q+6KLc.n13XBPswwCC0dlIK89I7ytYluC3v2T.Gl86.N7c.G9+dfCuLJv8xfGcoJl72Ww8QHwX4y5zCn2FdWR+lXaRDuHaWHq36qnDjTirvYedWXgm2EN2y6Bm+4cgK77tvEedW3Rm7BwhVq12l20cKq2aC69qK..IJ1PN14Bt6R7W1oCCqf+zOFPZux09O+nS4Z+jUk6qqOxbvNCMuF6wdX3D7lfdg88nK9Gt4+3i+MqfWjIyzFkxEkKrXVilKb6kJs1MaWJa16tQYZtsyWq+b5J6U4l3+xt550dWse489U42tL78VYylUBx4ZpsaeD7i3iqVwkvN4Hj1r1FtXGiMD7Dz6+A.W4hwG -
RE: Fully customized pseudo backlit interface via LAF,with user selectable color themesposted in Presets / Scripts / Ideas
Here is a video where you can see better the visual details:
Fully customized pseudo backlit interface via LAF -
Fully customized pseudo backlit interface via LAF,with user selectable color themesposted in Presets / Scripts / Ideas

If anyone might be interested, please let me know so I can share the necessary code.
-
RE: It´s possible to change Popup Data in execution time?posted in Scripting
@ustk Thank you very much. i,ve created a similar solution a few hours ago. I don´t use Broadcaster just the proper scriptSlider callback ,a "InlineStyleSheet" for the valuePopup Label and a Timer:
Content.makeFrontInterface(400, 200 ); const var Label1 = Content.getComponent("Label1"); const var lblCss = Content.createLocalLookAndFeel(); Label1.set("text", "ValuePopup"); const var valuePopupTimer=Engine.createTimerObject(); valuePopupTimer.setTimerCallback(function(){ Label1.set("visible", false) ; valuePopupTimer.stopTimer(); }); // Label Laf lblCss.setInlineStyleSheet(" * { letter-spacing: 1px; font-weight: bold; font-size: 12; } /** Render the default appearance. */ label { background-color: var(--bgColour); color: var(--textColour); border-radius: 5px; border-size: 1px text-align: centred; text-shadow: 2px 2px 5px rgba(0,0,0,0.6); } /** If you edit the text, it will use this selector. */ input { text-align: left; padding-top: 0.5px; padding-left: 50px; padding-right: 20px; caret-color: white; font-weight: bold; } /** Style the text selection with this selector. */ ::selection { background: #50FFFFFF; color: white; } "); Label1.setLocalLookAndFeel(lblCss); inline function onKnob1Control(component, value) { Label1.set("visible",true); Label1.set("text", Engine.doubleToString(component.getValue(), 1) +" "+ component.get("suffix")); Label1.set("width", Engine.getStringWidth(Label1.get("text"),Label1.get("fontName"), Label1.get("fontSize"), 0.15)); Label1.set("x",component.get("x")-(Label1.get("width")/2)+(component.get("width")/2)); Label1.set("y",component.get("y")-20); valuePopupTimer.startTimer(1100); }; Content.getComponent("Knob1").setControlCallback(onKnob1Control); Content.getComponent("Knob2").setControlCallback(onKnob1Control);Probably the best solution is a combination of yours and mine. Thank you very much again.

-
RE: It´s possible to change Popup Data in execution time?posted in Scripting
@ustk Specifically ValuePopups for sliders? Maybe using ScriptSlider.setValuePopupFunction ?
I,m afraid this way only affects the proper text returned value but not the text formating and color.
What way can you propose me? -
RE: It´s possible to change Popup Data in execution time?posted in Scripting
Every object colors are OK (in real time) except in ValuePopups, that preserves the colours from the last initialization...
Maybe the solution would be somethig like "laf.registerFunction("drawValuePopup", function(g, obj)" ... if posible...
-
RE: It´s possible to change Popup Data in execution time?posted in Scripting
This is that seems in real time


-
RE: It´s possible to change Popup Data in execution time?posted in Scripting
Really I have a function to try change color for all objects via LAF, but Content.sePopupData don´t take effect until reinitialize o recompile:
inline function changeColourScheme(textColour,ButtonTextColour,sliderBackLight)
{
SliderBackLight=sliderBackLight;
buttonTextColor=ButtonTextColour;
mainTextColour=textColour;
for(c in Content.getAllComponents(""))
{
c.set("textColour",textColour);
c.sendRepaintMessage();} for(i=0;i<53;i++){ Engine.setKeyColour(i,Colours.withAlpha(textColour, 0.35 ));} for(i=53;i<127;i++){ Engine.setKeyColour(i,Colours.withAlpha(textColour, 0.04 ));}// set the popup styling
Content.setValuePopupData({
"fontName":"Oxygen",
"fontSize": 14,
"borderSize": 0.5,
"borderRadius":4,
"margin":2,
"bgColour":BGColour ,
"itemColour":Colours.withAlpha(BGColour , 0.8) ,
"itemColour2":Colours.withAlpha(BGColour, 1),
"textColour": Colours.withAlpha(textColour, 0.35
)
}); -
RE: It´s possible to change Popup Data in execution time?posted in Scripting
@David-Healey Because user can change colour theme after init
-
It´s possible to change Popup Data in execution time?posted in Scripting
When we use Content.setPopupData() is always on init function, but you can,t change really PopupData in execution time , so you need to restart plugiin(or standalone app ) to changes take effect. It,s possible to make in other way?
-
RE: Turn off keyboard MIDI input for Keyboard Componentposted in General Questions
It,s really a bit hacky as you say...

-
RE: Turn off keyboard MIDI input for Keyboard Componentposted in General Questions
Better option is add to interface a new empty label with textColour and bgColour properties set to a totally transparent colour and "editable" property set to "enabled" in order to receive focus without any perceptible change. In this way;
OnInit
{
const var Label1= Content.getComponent(("Label1");
//(change colours and editable properties in editor)
/./ any code...
}function onNoteOn()
{
Label1.grabFocus();
/./ any code...
{function onNoteOff()
{
Label1.grabFocus();
/./ any code...
{AnyWay , can you explain why do you need that ?
-
RE: Turn off keyboard MIDI input for Keyboard Componentposted in General Questions
When keyboard (floatingTIle keyboard) lost focus , computer keyboard incoming messages don´t affect to it . So if you grabFocus in any another component floatingTIle keyboard don´t recevive the computer keyboard pulse.
use the grabFocus() function every time you need keyboard don,t receive computer keyboard key eventfunction onNoteOn()
{
anyComponent.grabFocus();
}function onNoteOff()
{
anyComponent.grabFocus();
}This make floatingTile keyboard only receives mouse pulsations !!!
-
It´s possible to use Juce::MidiOut class and member functions in Hise ?posted in Scripting
As somebody know, Juce has a MidiOut class with some member functions that could be very usefull in Hise (getAvailableDevices(), openDevice(), sendMessageNow() ) ...
HISE , at the moment, can,t really access any MidiOutput object(device) and when you use Messsage.sendtoMidiOut() no midi message is really sended to any real midi device since you can ´t previously create o access any.
It is not within my current possibilities find how to wrapp this Juce class or writte the code to do that. Anyway I would be very grateful. if somebody could show any way to do that.
I`m working now in an App-plugin that need to access to midi Out devices to take his full functionality:

Thanks everybody.
-
RE: Replicable custom UI components via namespacesposted in Presets / Scripts / Ideas
Thanks Ulrik . A few hours before I can see your reply I´ve found for myself a solution for the problem in my custom NumericUpDown control. Anyway some of the ideas you apply in your code was been usefull to complete my code. I´ve resolved the problem by other way, in a manner easier for me. My code is now perfectly working and improved with your ideas. Thanks you very much.
This is the full code for the CustomNumericUpDown namespace:
namespace customNumericUpDown { const emptyLaf = Content.createLocalLookAndFeel(); emptyLaf.registerFunction("drawRotarySlider", function(g, obj) {}); inline function createFromPanel( panel,stepSize,sufix,fontSize,fontName,showGainFactorAsDecibels,showNormalizedPercentage) { const var Action=[]; Action.push("increase"); Action.push("decrease"); reg p=Content.getComponent(panel); p.data.fontSize=fontSize; p.data.sufix=sufix; p.data.stepSize=stepSize; p.data.fontName=fontName; p.data.showGainFactorAsDecibels=showGainFactorAsDecibels; p.data.showNormalizedPercentage=showNormalizedPercentage; p.data.action=""; p.data.activeArrow=""; Content.setPropertiesFromJSON(panel, { "saveInPreset": 1, "allowCallbacks": "Clicks, Hover & Dragging", "opaque": 0, // "stepSize": stepSize, }); // *****Add child knob to panel reg pKnob = Content.addKnob(panel+"Knob", 0, 0); pKnob.setLocalLookAndFeel(emptyLaf); Content.setPropertiesFromJSON(panel+"Knob",{"parentComponent": panel}); pKnob.setRange(p.get("min"),p.get("max"),stepSize); //************************************************ //***set knob control callback******************** pKnob.setControlCallback(onKnobControl); //****************************************************** p.setPaintRoutine(function(g) { reg kn=this.getChildComponents()[0]; kn.setPosition(1, 1, this.getWidth()-26,this.getHeight()-1); // set Knob bounds at panel resizing var decimals; var textToShow; if(this.data.stepSize<1 && this.data.stepSize>0.09) decimals=1; if(this.data.stepSize<0.1 ) decimals=2; if(this.data.stepSize<0.01 ) decimals=3; if(this.data.showGainFactorAsDecibels==true) {textToShow= Engine.doubleToString(Engine.getDecibelsForGainFactor(this.getValue()),2)+ " dB";} else { if(this.data.stepSize<1) textToShow=Engine.doubleToString(this.getValue(),decimals)+" "+this.data.sufix; else textToShow= parseInt(this.getValue(),10)+" "+this.data.sufix; } if (this.data.showNormalizedPercentage==true) textToShow=parseInt(Engine.doubleToString(this.getValue()*100.0,2),10)+ " %"; var a = [2,0,this.getWidth()-19,this.getHeight()]; //area to draw text g.setFont(this.data.fontName, this.data.fontSize); g.setColour(this.get("bgColour")); g.fillRoundedRectangle(this.getLocalBounds(0.7),6); g.setColour(this.get("textColour")); g.drawRoundedRectangle(this.getLocalBounds(1.0),6, 0.45); g.drawAlignedText(textToShow , a, "centred"); if(this.data.activeArrow=="up" ){ g.setColour(Colours.withBrightness(this.get("textColour"),100)); g.drawTriangle([this.getWidth()-18,this.getHeight()/2-10,9,7], 0.0, 1.0) ; } else{ g.setColour(this.get("textColour")); g.drawTriangle([this.getWidth()-18,this.getHeight()/2-10,9,7], 0.0, 0.8) ; } if(this.data.activeArrow=="down" ){ g.setColour(Colours.withBrightness(this.get("textColour"),100)); g.drawTriangle([this.getWidth()-18,this.getHeight()/2+2,9,7], 45.0, 1.0) ; } else{ g.setColour(this.get("textColour")); g.drawTriangle([this.getWidth()-18,this.getHeight()/2+2,9,7], 45.0, 0.8) ; } }); p.setMouseCallback(function(event) { reg k=this.getChildComponents()[0]; if(event.clicked) { if(event.y>(this.getHeight()/2)-14 && event.y<this.getHeight()/2 && event.x> this.getWidth()-18 ) { this.data.action=Action[0]; //increase this.data.activeArrow="up"; k.setValue(k.getValue()+this.data.stepSize); if(k.getValue()>this.get("max")) k.setValue(this.get("max")); k.changed(); this.repaint(); this.startTimer(500); this.setTimerCallback(function() { this.startTimer(200); if((this.data.action==Action[0])) { k.setValue(k.getValue()+this.data.stepSize); if(k.getValue()>this.get("max")) k.setValue(this.get("max")); k.changed(); this.repaint(); } }); } if(event.y>(this.getHeight()/2)+2 && event.y<this.getHeight()/2+14 && event.x> this.getWidth()-18 ) { this.data.action=Action[1]; //decrease this.data.activeArrow="down" ; k.setValue(k.getValue()-this.data.stepSize); if(k.getValue()<this.get("min")) k.setValue(this.get("min")); k.changed(); this.repaint(); this.startTimer(500); this.setTimerCallback(function() { this.startTimer(200); if((this.data.action==Action[1])) { k.setValue(k.getValue()-this.data.stepSize); if(k.getValue()<this.get("min")) k.setValue(this.get("min")); k.changed(); this.repaint(); } }); } } if(event.mouseUp) { this.data.action=""; this.data.activeArrow=""; this.stopTimer(); } }); } inline function onKnobControl(component, value) { p=Content.getComponent(component.get("parentComponent")); p.setValue(value); p.changed(); p.repaint(); }; inline function setValue(p, value) { p.setValue(value); p.repaint(); } }And the HiseSnippet if you want to test the project or make some suggestion. Thank you .
HiseSnippet 3142.3ocuZs0ababElqsYRHahiCbaQQ.ZwTBz.xH506tRNwtJqstY0rN9hpjrcKbMBnHmcEs3RxRxUVJKV.2eB8w7VA5eh1GBP9OzG5iI.4oh9ReoOmdlY3kg21KJxkPPK4Lm4Lm47cluyLjyNAdl3vPu.gFR6epOVnwaKt2otQGt4gF1tB81RnwOQbyQgQdCe3ng3.ayG6uk2KcE13TeivPrkPiFW72PDsgzkDfq+4e8auyFFNFtl3jhHWOwy1Dee6g1QYktyZelsiy1FV38sGxI8Jq0yzycSOGuQfYcQwVB9FlGYL.+PChXWPTnwabWK6Huf8hLhvgBMtzFdVmt2gD6hJ+SrCsOvASdnsvdfhXEusmiEwhIkJr4g1NV6jL7CE.srSly3hLmwOV7A1V1okm4TtBsBTVK38GMtPdy6h4Lu17lWKNyqBS5hblzkXlz6ItmYfseTVMD64GI1yMBGz2.b67lBSVgK7m9Eha5AR3F0bnwQ3sCfGRagZmVszQK2pk1pxv0wFAnH.QB5hP20cfsKtoY.FFJDXJ3QG7BrYjp1pHD55WGsNSTTjGxvLZjgi8WfQ.7EE34fLhPV3P6AtTgjkPLgaFFYDDQ0l5Mn8ZVMXV4aZ33b.f5p8G4ZFY64ppQDZrrjDpuWfpMx1EkLhFfiV2wYSug9dtvygpJ6X3hc9PEMsw18U+k1DI5Yop0jXX.DBR7YtdG.0iraFf8ghh5MbH1xFFkNmBCtIjdah1pv+QRxW+5e3qgqWSpEU5R1El3DBSh.jo7TY4wTYjk.mSXDBOzO5z6azG0M0+xP+66YZ3beOuiV20ZaL1QkfaIRCdwA1gP7z1I3khUfwK20CP5S2yw1BGnniRAyA5HuCdgFZL3hkI8tjrsqCDokJBh0oPf5PJXph7I+nC8g+dPLld3n91mn2GLQ5ijaH7C5gv7LBgz1P3nWv5gagMsO.6DRq3gdACognV6fCLgwFvpnISiqXidRr+5TCn6ydNL9X22zeT3gpJ1tDiJDqvLZTtJsvYUJIKi.GBB42kKFMM.UkNTXg84Ap7E32zxHxnYxXraxMqVsbTORW5+qShXmW2jaVs9dj3L6lbSc5qFec25pXJ5oJnoacUrZMtJCFzonrZ80eLd8f.uWVgP4dj7PB3ArR.cqONHxFGRBIu2dO5gLTTmJHeCGyWPtJUBMNF2ycm.LnPkeMpsd9pANOuWlv7EBBnroiMbmN5S8NF3X+.zVAFC.B4AJEZomuwebDFZQqbU.7yJIPMTY5bmhlL4ZBKdrhPRPKThk0srPljTTni.xSBiO0CTtIrXejOgikiFwvxhTByusDiAVGrXTbF.p7DecIllDVFlbyApjn8wJ9FAfroS8.u.UfIE5xcMbGfU8ISSUUFZ6pnom7fwIvCItNZyn9jElsWhEMPaIziLmXRlRyXTu5Vlz1TycSVyRyR54RpItThMdVSs.8kO0wRRItq2nHfSNKG7.MVxhocQv9ib6FcncHkziDvvkZV6YsdNi8b5WG4RMCuPaZO2VGlsfRT5SsshNTU6Zc9H8jh9Tr8fCgkkbs1vJSfHVhGlF+cf2HWqPxRQXQqvjO6u.lBMaafjK.X0sA1GBwkzTELBeRz9djE4MUQgkiPs3bzweRazG7Anxke6VMacKsTana6yfpa0rMhSEcHLmKtNZkSIKuHJotTDciBFA4dmhdPiybpcSVIpk2HXoyPgQA.HpFWJD.jn3s8Bx5O0jvimX3LBqpoo2QaIjBxZCExR7lReCZBOciCpcJUWCPqwEnzs5gTASVOwsqsjBRYINkFmneViB9dDlCDDBofhJ0KsaUq9qW8SHj8kG4nB3eko1Y3OuwkZayke4Ca2BhKA7jZ5.l9qf74xRj4hFPRmm0QukdQ9h12pDewyIrEPNBCDIgFYMqTSRlMvFPHg11KwekawQ5n7kEmdHsYrMvlZ1pJGLfUDrsCvsNnYeX2u6RXmvV6BaoBx.4fSEmlCbCJ2kZqlerl9GwZTUJlXvbplYArkeOGZucyVf1grvMW4F4Z85NvN2vV6CZWMClP5HCcjBAFCvVIKENW3N+pr5pLxWAoMtjeg8SXyWZGc3FADvvE1NaMiJ.iakensefMaH8rRf7MKAxWuy0Z2R+V5e7yICSXEGjwLZUFFOQNYlxXzb4ekNOrfVMuIwBlPRtOEmmErAMp6S57v8IcVceK0I11W4F7tOIp6SZwbeDusz4gUj5BkkI6TWlsxkG3MJDW90GfOFBXgkuHKmtHkYrFEBrPaUSSxpvwVbIq3I+SE6zaqV1lggxJjr6wh7IkkHq1StMpre.ow0WiQbOjOlA11Ca+nDiG3zR1rZsMHcePvDT9zHGQ7hLR1i33aWpb5LM9lUwdGh8N7Z41YgEzEVqw2cEqaNTuDzdyCIKd2h7JoliFP6j324iZttfVS4WMUg5mxKnpxkITUJxp5sNzdqZil3EUKA2Y3slVcMbrbM9gECkesfsyIhNm3XMNfIU68mvPVojM4FeKWY7wRSjqr3YLyeoNSeh+R7LCydtOO4yL14RcLCsoLCIuop4XWX0QYvRKka94r3Ot1r3OxVnYg3pOgK1gry75hqn0UkJ4Cnpn55YDRtqtFMExhj6V.5iJ8EUPmLOxUC8RE12BS2zlP2LmJZb0Bt.DRyaXy7QQ8CNTZwSCMiFN6fuZn0lqnfIyNbtZJtRrmxnhjdCIKz5w9Yo833kjqkIh7VWmA4RQIBi77YAwZqV1dl.KfVNcvJKKWzzS9s3GXH26LS0LY4e5niIQCoCKoXnarTwRp806mpKVzTwWAoV1vfSUYwgr9ujLR97zXkqLWtvbUNYUIdmQQGQZG6WXrOVl+EnWm8QqrTmOg20KyfC5lpq3KP0r325g886ZqP2qTaX2lVa.2C6I.o7nSNc.1Edh75CzQ8MfMdP6z4WucxzaIsR0GS4KnVWVg9JJop7VUnxyhktRrNCipyPS0J02B+wEd+PuH7iHIVfIlxf+uXU86WYcwyHbHy2pn53Yh02PU2QCO.GjFKEKnPiKk+qhKV+WEm+i1axlgwInmaOW6nG4icq6S4KDOsTPnwaEaUfnQzue96j78yINXAaKPDQV3l.0f4OHCBEa7kiaL6KZRa8aG2ZBYxbngZ69N4ar1e3aVjtuS4tuRMTa2ub9FKHzZsEn6Wtb2WoFps6WoXiUWjtekp5dPCOt2VP1EHJnQb.Q12KBJaK7w1lX1opPRbKb3QPhFHLMkoFz+LiYNIqC6s1oYOb60dIYY7oE7pms1gzU9yKRxaDDJ6Mt7ke2ugTZ1aKgT56+UeyWQJk+KGRJuQ74pI+mLTnw6KV2mLTvOYBROq5NTOPlJig3HLUj2PjctdZv4Ody4aZ.3TDaPLwSStoPNPNGXraRrw9fXItHwF+bA5z34FI5viD2iCId0SJfDB+9YfDW8pW8uUFIdyW7ce+qCj3Jh6YOz2Ai1EVVUvAsyCBxhOEGcenFmEDH5rf.QmLf3dSEHt7LIRx.hudW9oDlEAhdy.HfquuLPbo+7UokNL6PmIH7etyPiS3odNugoep3C5sUOzlvJvHeEw8vQ.BU.rdWQSV0OjlALOhIOebnkQrjs8javN0wdcX7xYX7O6GDFuBGF+pOiCiW6EEo8dxLv3qbkqTAF+ee5s+Gkv3a904Fm27bGieGw8CLbC88BKAsuWVUqCa7g3jVHvckyJ3VZPWG3tRF3tVYvs7Qa7cEiikYgxzSQXMA44NaiWbtOaism5YajaMZMliL8EmaUdsFkOpjuMGdRGe4AX9gUIzMaUDKvo4bFi3xV3UDefm0HGin7msTRh23JfkVmyPIGZS2P6nS4iXN2NvoyqI9dh6XGYdX013EpvFAT90gMFGK+Nh2seerYTlAdIws+culNStM1ozYl9xw4vYoviAwBo04Mlc87FxMq+u7ke4+5NaYLzmvHwJZskW96tSVp+rUzuUvo7k8p+8u8auyS4nbo5Z6.L9Kv.5v0C+86b9M0kcvfF7.in.aBmFLmbOf41DGybP1cWiKPliydtE4YxHXOrqE8guGthqrcBWHox1IU9+k9XngYf2mGeFrHX6aQKAF2tziZtj3CHOiR2ZnnXqlsfrRV1etoIIJ6Zv1OqtMcNCsY4yPaV4LzlabFZyGcFZyGeFZyMmZaHm590GAabgw5.Eryco6wqQi65Z.Quz4WB+O.nrovcB -
Replicable custom UI components via namespacesposted in Presets / Scripts / Ideas

Here are many examples of custom UI components ,based on panel component , as expected.. I,ve include an external scritp and use te namespace in it to create many of them in a example project. This all work fine ,for the moment, but dont allow the posibility to use mouseWheel event.
Recently I,m trying to create one that can use mouseWheel event based on already create code, but for the moment I can´t find the way to replicate it in a project without problems . So I send you a Snippet of the actual project expecting someone can make any suggestion to solute this problems:

Here is the HiseSnippet where you can see the problem and, if you want , use the code for your own projects:HiseSnippet 3643.3oc2b07ababEmqsocVZqDmhbnH.EX5BTicinWuKoksSUVqOsbTi+PURItAFAATjiVwXtjaI4ZaYAAjCA8R+KH2JPOTzK8ZaO0.z+AZOUzbnHE8RCZOTf9GP5algeL7ykq7Ja0rwQVbl27du48l4Mu2OuC2v0QG6443JTq916ODKT6Bhasus+dqrmlosv5qJTSRbkQd9NCdeSgk2enlmG1PnVsSeaR+0peFAAgewm+4+0EVVyRyVGGzD8yG3Xpiui4.S+3V2Xw2yzxZMMC71lC3n9pKttti8JNVNi.c4zhcDFpo+Hs936oQH6ThB0N6sLL8cb2xWyG6IT6LK6Xr+V647DaF8efom4NVXxCcE1BXDq40brLHZLoUgU1yzxXiv4rm.vkMhs.mlYAdCw6ZZXF0drk3hzNPwif2dT6TIUuSmP85xqdc3TubToSwoRmgoRut3V5tlC8i6gnOmWbcaer6tZfYmWUXzJbpu75hq3.TX62df1ivq4BODMhlJc5HifezZdI3yi0bQ9fGwsGBcK69l1315tXXpPbSt2emOAq62r07HD5JWAsDiTjuCRS2ejlk4yvHv8465Xgz7QFXOy91ThjpiXD21yWy0mxslyQkZbOXV6qnYYsC30at6HaceSG6lsHDcfT85nccbaZhLsQgyn9X+krrVwYvPGa3YulM1PyFa8VMZ05.yca98MITrtQyVsIJF3BAJdOamcf9QlscwCgl7Wev.rgILKs1GlbGRj1gslG9IptzUtxacL74XhsnLejrgMNdvlHvyP2+duQfI1T+8GtJrlT5.JMR0AiimOBOXn+92QaWTuH6Ky6eGGcMq6337nkrMVCisZR7agTCVw9ldv5o0B8WMLb0dxlNfmd+srLMvtMjQQNy9xHmc9jVnCNjrjqtjosErLKpeDShvpzATOYSzPxeICBX3VvBLYuQ6Z9T4cA8i9H4WHAGj8fMYjnQqAqEcbWxaUrt4NXKOZG2ywc.c8owFXWcXhAgTZIQVTgPr4NYk+vdbKqhVS0jp.rUpIssIaXXaCMes1gZVuveY97oiNO5Q+YQTDLk6E9KyWrDIlfdg+RQ7q.KTuh5nD9jmAsWQcLO0TQ9+P6KrWGBhMD65ah8H95ezV2+dLCsLkPdAe.eCI5rgm1iwqaugKFXXieHpqbxtgHINOILdhGPPiUrLgeSF8tNOFhbcIzptZ8gvb8ajZjNC09oivvH5jnCHpWiPuAzYzhxzpL4ygrkL4rpA3Bc65RFFHcRfezifPRj3nTKP1gffsXngj3VbaM0LLHsvrZyxhpIC5KJHpJkdhkNyt2vctL5pfOIj6GzXnlKPazdCvFPI3vThbSM693lCI6iZ1XfociVxgOn8T3gPCGcXTKxDGAMXEEcjfDYlvvSezC744OxvwFotqvFVzION1jdBZkniG0v0frFRMrjiY1zYjODpK9bs9sXAfK6iz3HfF4x.1wBa6H6XqWJg93m5usCIgjRIEN5zeOSujwgdmtnKcIT11uYm1cd6VQ5PutGAV2ocWDGKTHgLlbdzIASTmDlTTrwd9tifiJJgOnChMp8ByZxvYDjlGznuKDcoYPqvNfPFuliar7XJBz6GnYMB2rUKYkVyhZfLVtAIcjRjMvIb4JGzaIcWfitE2Bkd4OkRoxxgl8VyxwvfS2F2LfWZP.EWOHnteFIzsSt7tXVeXdaeL2Ekxum6YYL+NuhEoWUxd7Vc6.qGA+HUsAe4OnAIcGxdPMHH9CUj6HGNjGXZ3uWyVWVYtnldWrY+8fTs+n4gHbPLWMD43ARdUTURhK30FNdlzvIckgC.QYX50xvzK2sEgsHRXS5gJ63Lx1vijyN6.H37TymASJp0qOQHq4D5PRjxgLJYaAwziFFqRtHaSyF6zm0Dj+M3652dWnLvMIRGarITaAbrgENhb5AWKS0slcZe8VxWiMn7XLwpvwZlFvxCsBbua6N.2giNaqNGSFjgtsqIaHOLsQs6MxXTuhxk61Q9sku9GQXC4X312nEhDB5HwrYUB30UmimYgbaIKnzJrw1vrtY7ZTjLRSF0frF1Eaz.lIj5XjXmAcWmQd3rEWgeLPMbPjTcHV.8g15jjjvFbQ83ihDQ192rYV8FlNWkbLQ.IuSVJh68o2Dk0VfZwIKpbCeHZEOaKF6w3cbylMPVq44GOn3oGyMiW.QSLoUZgjte9fYQYPnuGIcGilbhiWtTdDTpYyDb3Pteu5V3YUJ2.OKuGX713bcxU1pe4hr5YXTd1+2gy9RxRrL6Os+7XcdNgTjTrKnHeQbqv+EkOO7IpiTInktN1D4P1TOLiYYHMLqQzhOCVDwpQ3f5b7JrQRIWQlB13lOMM0GxO0y1I2rNUmGNec9IQ5IPrKOkNefDeIgEoezNyH7C4MYRLyX7eNdPEo.nRjhK7mhzfBWsUIp+mAojBIbZ7PHN2tENBZujATdwUAzkacUgRkrriRVhy56PqziQRhS6U3aMLlPjlOQH7LFcOP+NdqWeIKKTbCUqH8DknSJJHcu5vNRqGrGLMIh.aqA4wYznnZ3mF3bE4.KqV7.+V0nhFwktkqGLES1bDDTJc32Nh3ogA+TCREFERRH9SDaXBpPokFE9oFKoqY7G+0CL0cZTL4EVo0tPwC3xGWtYpSRTO4vjJn74XCL63b4tsluXBfyaj6v66XfZDu6JDYCThln3ajnonUij8gYOlfQZwGTb.4TmCi2Nlero7gwHAuImek+oTcKS5wFkjw4CZm6vmfV3B5CpsToQHKF8ktbZ8zYtGOQJOU3vvX0kxYQzI9rjiVtx7VrGmrrjSOlLYImRFiIIYF0eqNI4wXzmrjjSO5rIIWr8uvjjyyILESRtdx+EQn4JyEENdqWwHgJUcTNmQZBP4rPJylU0zGAkxzzmSPVmbVmEj0iBOx.xZ0YRAG82pLNbr.uZ2X3UKU1DvIKW4lQ5EM7pMPMx.C5LRSEHVKj4kiwZczIJTVyQclozfK0GOVkigCHFdiSLZlUhqk.+ZdnuNVdNdglXY6dj+oR60CVzxalX+kW6mX5u2cGY4aNzxDarrKI9nM1yq.nYk61tybvIXUYlSV11bZHyNse6VsphwdJX5BPcNEvrxOrSN382M6AKeTUWpM0vm93RZ4CfcEj1QC294lig1sTEgwJNciRfvJC.VGR+5xPRsg7yT.HoVN.RpYAPRoT.jTpH.RJkAfjZD.RJEAfjZt.HolB.oJAGj5Ic3fNgfET0P4QcbTckqDPWtnAolBMntWKKTOpIPCxyuQwjDhFTdPAoNYPAodDgBRcLoSjy3JEKHUNrfTtZq4KlBBXPWlRRj6iCNH0rvAolENH0pCGj5yEbPpkBIh5XgCRYrvAoV.bPpYfCRs5vAoTFbPJUDNnpO2imHeaGNHkjHSnbDfCRYbvAoLQvAo7se3fJwnO4vAoLV3fTlb3fTd4BGj5TCNnoFZPJG2eeZNF+F2ME9B2MM9918bhDzKQffjF6Wytx+V18xGEniSPf9+eLfdtg.5XAAniA.fFGKOI.+yKdzeFqDetMaSAnedgh7yKTfeN1w8QJm62T6zWlHVMBcaHy9dgfHe+GfS4ANwWwJbnODRBpemTNIvZtxitmiO99jajFDwW5PIT5t1c2b6KnrCKratcytObkLvl1iFrC1kqLLJgB0NSxqanXwW2P9aCoNq9INBcrW21z+9Cw1EcGIEBJ5RPn1YCzJfTe5ESblvKlHw5JXZHT6UDYVZApByeCQERO3WMXvLXSni9BAiljLUE3PghWIdv+6e7u6uA+oRh+bhz+oAqvfKTxpITa3Syun5RVImA+9quJDMFL90B7CwXvAssJ9wl5X1sDst3pXuG46LDDTT0wfMcrtpmFIvO8VKterzmewviAg1NK74qIsFGikz5E9s29OQZkGQOR60BtDvIgxSn1aJVzMwR3IjfKwpxCWbOZnkX84lKNLbc45FItYxPhCvgh9XZ6mUjc4jqwYDNW0VxAVBwZDUe+veIE7pbVs.0Ur11.YgppXsum.cKSD8yL1kpEY92dwjVDgLVjOckES5Mdye9e3Kyyp+ZhI.PUf2ud9yegOqLOXXdqDodva7at8e+Ye1BI7CWTbKyACsvnMgpncgsOI7FRhO.BgC8XUUOR3tvrNiHS9lIL4WpD+jRBmwqM1cuE3L9TsEqvxSdy54N249USxFiztnjN1+6G14aR4Lh3z.5Mw+r+yug8YfFYNb1uaPuIbUyHtsqls2PGOraJ+zqG20RCfCa8S5tN+XCcU88Npks2gTt.ISpkcdJ4xrOH50L.74FeA+hQVa+mEXS3PRVTH68m+BbSa5UmOocf+xymwHDGJdBth+cK8J9miFdQw65XLxRyO4Kb.RfrfNfzBRnnjaxusmo+97lho1agfpphut3Fl956kuNdpbzQxK3fiAcL3c2vLh2Z2cgDHiUvyHt1O4EvKpgf2dFuZPnPVjv.mXpni7JylNNC3VNCY470Krp1fgjiCYMsnp5+Xg3Hnz19JRJIq5tOeaB+ke4WsvC3BQQ40ZtX7yvf2gSB+9Epc5o0BYF.d8uqFTfNY+OjD9VPDKcL3.rgc5jLSqcJxAhrm6PdlnsagsMnOPhXEzY2v3FjN6F1IuW9UhdGkPMo2NzIGZ1QjV5Vz6oju5m8u9yKrJ1RKwxwGj7L1ObwbdSlrtM3572vwRyM8h4okoLwahjx2wQlRnSzQE9NhTy7Ickj55OYqjWjbh4KIU7Ewl6WDxXfltqyGG7FBfrU6Uns.yaa5KWn5h2k7LJptOQwNs6.oUYX9w55jiPtLTWb9iQ4HLF0ivXt5QXLycDFy0NBi45GgwbiRGC48rzRifR6Xq4gF13VzpfqU6VrunFjk+B+OzKKOpA