// Register sync method without communicating with Formium object.
        private JavaScriptValue Add(JavaScriptValue[] arguments)
        {
            if (arguments.Length == 2)
            {
                var retval = arguments[0].GetDouble() + arguments[1].GetDouble();

                return(JavaScriptValue.CreateNumber(retval));
            }

            return(JavaScriptValue.CreateNull());
        }
Пример #2
0
        // Example: Map the CLR objects to NanUI's JavaScript context.
        private void MapClrObjectToJavaScript()
        {
            var obj = JavaScriptValue.CreateObject();

            // Readonly property
            obj.SetValue("now", JavaScriptValue.CreateProperty(() =>
            {
                return(JavaScriptValue.CreateDateTime(DateTime.Now));
            }));

            // Value
            obj.SetValue("version", JavaScriptValue.CreateString(Assembly.GetExecutingAssembly().GetName().Version?.ToString()));

            // Readable and writable property
            obj.SetValue("subtitle", JavaScriptValue.CreateProperty(() => JavaScriptValue.CreateString(Subtitle), title => Subtitle = title.GetString()));

            // Sync method
            obj.SetValue("messagebox", JavaScriptValue.CreateFunction(args =>
            {
                var msg = args.FirstOrDefault(x => x.IsString);

                var text = msg?.GetString();

                InvokeIfRequired(() =>
                {
                    MessageBox.Show(HostWindow, text, "Message from JS", MessageBoxButtons.OK, MessageBoxIcon.Information);
                });

                return(JavaScriptValue.CreateString(text));
            }));

            // Async method
            obj.SetValue("asyncmethod", JavaScriptValue.CreateFunction((args, callback) =>
            {
                Task.Run(async() =>
                {
                    var rnd = new Random(DateTime.Now.Millisecond);

                    var rndValue = rnd.Next(1000, 2000);

                    await Task.Delay(rndValue);
                    var obj = JavaScriptValue.CreateObject();

                    obj.SetValue("delayed", JavaScriptValue.CreateNumber(rndValue));
                    obj.SetValue("message", JavaScriptValue.CreateString($"Delayed {rndValue} milliseconds"));


                    callback.Success(obj);
                });
            }));

            RegisterExternalObjectValue("tester", obj);
        }
Пример #3
0
        private JavaScriptValue GetCultureInfo(Formium owner, JavaScriptValue[] arguments)
        {
            var retval = JavaScriptValue.CreateObject();

            retval.SetValue("name", JavaScriptValue.CreateString($"{Thread.CurrentThread.CurrentCulture.Name}"));

            retval.SetValue("displayName", JavaScriptValue.CreateString($"{Thread.CurrentThread.CurrentCulture.DisplayName}"));
            retval.SetValue("englishName", JavaScriptValue.CreateString($"{Thread.CurrentThread.CurrentCulture.EnglishName}"));

            retval.SetValue("lcid", JavaScriptValue.CreateNumber(Thread.CurrentThread.CurrentCulture.LCID));

            return(retval);
        }
Пример #4
0
        private JavaScriptValue GetWindowRectangle(Formium owner, JavaScriptValue[] arguments)
        {
            var retval = JavaScriptValue.CreateObject();

            var rect = new RECT();

            User32.GetWindowRect(owner.HostWindowHandle, ref rect);

            retval.SetValue("x", JavaScriptValue.CreateNumber(rect.left));
            retval.SetValue("y", JavaScriptValue.CreateNumber(rect.top));
            retval.SetValue("width", JavaScriptValue.CreateNumber(rect.Width));
            retval.SetValue("height", JavaScriptValue.CreateNumber(rect.Height));

            return(retval);
        }