稳扎稳打Silverlight(30) - 2.0Tip/Trick之Silverlight.js, Silverlight.supportedUserAgent.js, 自定义启动界面, 响应鼠标滚轮事件

本文介绍了Silverlight 2.0的一些实用技巧,包括利用Silverlight.js进行插件嵌入及安装体验定制,判断浏览器对Silverlight的支持情况,自定义启动界面及加载进度显示,以及如何响应鼠标的滚轮事件。
[索引页]
[源码下载]


稳扎稳打Silverlight(30) - 2.0Tip/Trick之Silverlight.js, Silverlight.supportedUserAgent.js, 自定义启动界面, 响应鼠标滚轮事件


作者: webabcd


介绍
Silverlight 2.0 提示和技巧系列
  • Silverlight.js - 一些 js 帮助函数,用于嵌为入 Silverlight 插件以及自定义安装体验等提供帮助
  • Silverlight.supportedUserAgent.js - 就一个函数,用于判断 Silverlight 是否支持用户的浏览器
  • 自定义启动界面 - 三个参数的综合应用:splashScreenSource, onSourceDownloadProgressChanged, onSourceDownloadComplete 
  • 响应鼠标滚轮事件 - 响应并处理鼠标的滚轮事件


在线DEMO
http://www.cnblogs.com/webabcd/archive/2008/10/09/1307486.html


示例
1、Silverlight.js 和 Silverlight.supportedUserAgent.js 的常用函数的演示和说明
SilverlightDotJsDemo.html
<!--
详解 Silverlight.js 

Silverlight.js - 一些 js 帮助函数,用于嵌为入 Silverlight 插件以及自定义安装体验等提供帮助,其最新版本在如下地址下载
http://code.msdn.microsoft.com/silverlightjs

Silverlight.supportedUserAgent.js - 就一个函数,用于判断 Silverlight 是否支持用户的浏览器,其最新版本在如下地址下载
http://code.msdn.microsoft.com/SLsupportedUA
-->
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head >
    
< title > Silverlight.js </ title >

    
< script  type ="text/javascript"  src ="../Silverlight.js" ></ script >

    
< script  src ="../Silverlight.supportedUserAgent.js"  type ="text/javascript" ></ script >

</ head >
< body >
    
< div  id ="container" >
        
< href ="http://go.microsoft.com/fwlink/?LinkID=124807"  style ="text-decoration: none;" >
            
< img  src ="http://go.microsoft.com/fwlink/?LinkId=108181"  alt ="Get Microsoft Silverlight"
                style
="border-style: none"   />
        
</ a >
    
</ div >

    
< script  type ="text/javascript" >

        
// Silverlight.createObject() - 生成一个嵌入了 Silverlight 插件的 object 元素
        Silverlight.createObject(
            
"../ClientBin/Silverlight20.xap"// .xap 的地址
            document.getElementById('container'), // 包含此 object 元素的父元素
            "slPlugin"// object 元素的 id
            {
                width: 
"100%",
                height: 
"100%",
                minRuntimeVersion: 
"2.0.31005.0"
            }
// Silverlight 插件的属性数组
            {
                onLoad: onSLLoad,
                onError: onSLError,
                onSourceDownloadComplete: onSourceDownloadComplete
            }
// Silverlight 插件的事件处理程序数组
            "key1=value1,key2=value2"// 为 Silverlight 程序传递初始化参数(key=value的形式)。用“,”分隔
            "myContext" // 上下文信息,可以在插件的 onLoad 事件中获取
        );

        
function onSLLoad(plugin, userContext, sender) {
            alert(plugin.id 
+ " - " + userContext + " - " + sender.toString());
        }


        
function onSLError(sender, args) {
            
// args - Sys.UI.Silverlight.ErrorEventArgs 类型
            // ErrorEventArgs.errorType - 错误类型
            // ErrorEventArgs.errorMessage - 错误信息
            // ErrorEventArgs.errorCode - 错误代码

            
// 程序 throw 出的异常可以在此处捕获到
            alert(args.errorType + "/n" + args.errorMessage + "/n" + args.errorCode);
        }


        
function onSourceDownloadComplete(sender, args) {
            alert(
"SourceDownloadComplete");
        }



        
// Silverlight.createObjectEx(params) - 将所有参数放入一个数组中传入,其内部会解析这个数组中的参数,然后调用 Silverlight.createObject()

        
// Silverlight.default_error_handler = function (sender, args){} - onError 事件的默认处理程序,不需要的话可以将其置为 null
            
    
</ script >

    
< script  type ="text/javascript" >

        window.onload 
= function() {

            
// getSilverlight() - 尝试下载指定的版本,如果指定空字符串 "" 则为尝试下载最新版本
            // Silverlight.getSilverlight("2.0.31005.0");

            
// isInstalled() - 判断是否安装了指定的 Silverlight 版本
            alert(Silverlight.isInstalled("2.0.31005.0"));

            
// Silverlight.onSilverlightInstalled - 使用 Silverlight.js 时,如果客户端没有安装 Silverlight 插件,则会自动安装,然后调用此方法以刷新浏览器,可以重写此方法以自定义行为(比如在此通过 createObject() 来使新安装的插件生效,而无需刷新)。注意:如果是 Silverlight 升级,则不会调用此方法,必须重启浏览器(只刷新是不行的)

            
// supportedUserAgent(version, userAgent) - 判断 Silverlight 是否支持用户的浏览器,省略 userAgent 则为当前浏览器
            alert(Silverlight.supportedUserAgent("2.0"));
        }

    
    
</ script >

</ body >
</ html >


2、自定义 Silverlight 程序的启动界面,并显示加载进度
启动界面的 xaml 文件
SplashScreen.xaml
< Grid  xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
      xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
      Background
="Bisque"
>
    
< StackPanel  Orientation ="Horizontal"  HorizontalAlignment ="Center"  VerticalAlignment ="Center" >
        
< TextBlock  Text ="Loading"  Margin ="3"   />
        
< TextBlock  x:Name ="percent"  Text ="0%"  Margin ="3"   />
    
</ StackPanel >
</ Grid >

Silverlight 程序全部加载完成前,显示启动界面并显示加载进度
SplashScreen.html
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head >
    
< title > SplashScreen </ title >
    
< style  type ="text/css" >
        html, body
        
{
            height
: 100%;
            overflow
: auto;
        
}

        body
        
{
            padding
: 0;
            margin
: 0;
        
}

        #silverlightControlHost
        
{
            height
: 100%;
        
}

    
</ style >
</ head >
< body >
    
< div  id ="silverlightControlHost" >
        
< object  id ="xaml1"  data ="data:application/x-silverlight-2,"  type ="application/x-silverlight-2"
            width
="100%"  height ="100%" >
            
< param  name ="source"  value ="../ClientBin/Silverlight20.xap"   />
            
            
<!-- 下载 source 指定的 xap 的过程中所显示的 xaml 的地址 -->
            
< param  name ="splashScreenSource"  value ="SplashScreen.xaml"   />
            
            
<!-- 下载 source 指定的 xap 的过程中所持续调用的事件 -->
            
< param  name ="onSourceDownloadProgressChanged"  value ="onSourceDownloadProgressChanged"   />
            
            
<!-- souce 指定的 xap 被完全下载后所触发的事件 -->
            
< param  name ="onSourceDownloadComplete"  value ="onSourceDownloadComplete"   />
        
</ object >
        
< iframe  style ='visibility:  hidden; height: 0; width: 0; border: 0px' ></ iframe >
    
</ div >

    
< script  type ="text/javascript" >
    
        
function onSourceDownloadProgressChanged(sender, args) {
            
// progress 属性 - 下载进度(0 - 1 之间)
            sender.findName("percent").Text = Math.round(args.progress * 10000/ 100 + "%";            
        }


        
function onSourceDownloadComplete(sender, args) {
            sender.findName(
"percent").Text = "100%";
        }


    
</ script >

</ body >
</ html >


3、响应并处理鼠标的滚轮事件
Wheel.xaml
< UserControl  x:Class ="Silverlight20.Tip.Wheel"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" >
    
< StackPanel >
        
< TextBox  x:Name ="lblMsg"   />
    
</ StackPanel >
</ UserControl >

Wheel.xaml.cs
/*
 * 如何响应鼠标滚轮事件,可以参看 Deep Zoom Composer 生成的 MouseWheelHelper.cs
 
*/


using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;

using  System.Windows.Browser;

namespace  Silverlight20.Tip
{
    
public partial class Wheel : UserControl
    
{
        
public Wheel()
        
{
            InitializeComponent();

            
this.Loaded += new RoutedEventHandler(Wheel_Loaded);
        }


        
void Wheel_Loaded(object sender, RoutedEventArgs e)
        
{
            HtmlPage.Window.AttachEvent(
"DOMMouseScroll", OnMouseWheel);
            HtmlPage.Window.AttachEvent(
"onmousewheel", OnMouseWheel);
            HtmlPage.Document.AttachEvent(
"onmousewheel", OnMouseWheel);
        }


        
private void OnMouseWheel(object sender, HtmlEventArgs args)
        
{
            args.PreventDefault();

            
double mouseDelta = 0;
            ScriptObject eventObj 
= args.EventObject;

            
// Mozilla and Safari  
            if (eventObj.GetProperty("detail"!= null)
            
{
                mouseDelta 
= ((double)eventObj.GetProperty("detail"));
            }


            
// IE and Opera   
            else if (eventObj.GetProperty("wheelDelta"!= null)
            
{
                mouseDelta 
= ((double)eventObj.GetProperty("wheelDelta"));
            }


            
// IE浏览器:mouseDelta == 120 向上滚动;mouseDelta == -120 向下滚动
            
// FF浏览器:mouseDelta == -3 向上滚动;mouseDelta == 3 向下滚动
            lblMsg.Text += mouseDelta.ToString();
        }

    }

}



OK
[源码下载]
内容概要:本文提出了一种基于非合作博弈理论的居民负荷分层调度模型,并结合双层鲸鱼优化算法(Two-level Whale Optimization Algorithm)进行高效求解,模型与算法均通过Matlab代码实现。研究针对电力系统中居民侧用电负荷的复杂调度问题,引入非合作博弈机制刻画各用户之间的利益竞争关系,实现负荷的分层优化分配;同时设计双层优化架构,上层优化资源配置,下层模拟用户自主决策行为,提升了模型的实用性与合理性。通过智能优化算法求解多层级、非凸非线性的博弈模型,有效提高了调度方案的收敛性与全局寻优能力,适用于现代智能电网中的需求侧管理与能源优化场景。; 适合人群:具备电力系统基础理论知识和Matlab编程能力,从事智能电网、能源优化调度、需求侧管理、博弈论应用等方向的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于居民区电力负荷的分层优化调度系统设计与仿真分析;②为非合作博弈在多主体能源系统建模中的应用提供方法论支持;③利用双层鲸鱼算法解决具有嵌套结构的复杂双层优化问题,提升求解效率与调度方案的可行性。; 阅读建议:建议读者结合提供的Matlab代码深入理解模型构建逻辑与算法实现流程,重点关注博弈模型的效用函数设计、纳什均衡求解思路以及双层优化结构的迭代机制,宜配合实际用电数据开展复现实验以验证模型有效性与鲁棒性。
内容概要:本文围绕基于自适应神经模糊推理系统(ANFIS)智能控制器的可再生能源微电网功率管理系统展开研究,结合Simulink仿真实现,深入探讨了微电网中功率的智能调控与经济机组组合调度问题。通过引入ANFIS控制器,有效应对风能、光伏等可再生能源出力的波动性与不确定性,提升系统运行的稳定性与电能质量。研究内容涵盖微电网多源协调控制策略、功率平衡管理、优化调度模型构建及仿真验证,实现了对分布式电源、储能系统和负荷的协同优化,兼顾经济性与可靠性目标,并通过仿真平台验证了所提方法的有效性与优越性。; 适合人群:具备电力系统、自动化或新能源相关专业背景,熟悉Matlab/Simulink仿真环境,从事微电网能量管理、智能控制、能源优化等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高比例可再生能源接入场景下的微电网能量管理系统研发与教学实践;②为实现微电网功率稳定控制与经济高效运行提供先进的智能控制解决方案;③支撑高水平学术论文复现、科研课题攻关及实际工程项目的仿真验证与方案优化。; 阅读建议:建议结合提供的Simulink模型与相关代码进行动手实践,重点关注ANFIS控制器的设计流程、规则库构建与参数调优方法,并通过与传统PID或MPC控制策略的对比实验,深入理解其在动态响应与鲁棒性方面的优势。同时可进一步拓展文中提出的优化调度逻辑,应用于多目标、多约束的复杂实际应用场景中。
内容概要:本文档聚焦于“直流电机双闭环控制Matlab仿真”,系统阐述了基于Matlab/Simulink平台实现直流电机双闭环控制系统(主要包括速度环与电流环)的设计与仿真全过程。通过构建直流电机的数学模型,结合PI控制器进行调控,实现对电机转速和电枢电流的高精度动态控制,验证控制策略的稳定性与响应性能。文档详细介绍了仿真模型的搭建流程、关键参数的整定方法、系统动态波形的分析手段以及仿真结果的有效性验证,体现了经典自动控制理论在实际电机系统中的工程应用,是电机控制与电力电子技术相结合的典型研究案例。; 适合人群:具备自动控制原理、电机与拖动基础、电力电子技术和Matlab/Simulink仿真能力的电气工程、自动化、机电一体化等专业的本科生、研究生及从事电机驱动系统研发的工程技术人员。; 使用场景及目标:①作为高校课程设计或实验教学材料,帮助学生深入理解双闭环调速系统的工作机理与工程实现;②服务于科研项目,为新型电机控制算法(如滑模、模糊PID等)的开发与性能对比提供基础仿真验证平台;③作为工业界产品前期设计的仿真工具,用于评估不同控制策略在动态响应、抗干扰能力和稳态精度方面的可行性。; 阅读建议:建议读者在学习过程中紧密结合自动控制理论知识,亲手在Simulink环境中搭建完整的双闭环仿真模型,通过反复调整PI控制器的比例与积分参数,观察并分析转速、电流的阶跃响应曲线,从而深刻理解反馈控制的本质、系统稳定性条件以及参数整定对动态性能的影响,进而掌握电机控制系统的设计精髓。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值