使用Web技术开发轻量级桌面应用程序

Web技术发展得越来越快,现在如火如荼的AJAX技术,丰富强劲的Flash技术,还有刚刚新生的Silverlight,无一不为Web的RIA(Rich Interactive Application)带来了更为强大方便的实现手段,极大地丰富了Web的应用方式。

在Web 2.0中,Web交互变得越来越多,越来越复杂,功能也越来越强大,于是出现了许多新的创意,甚至把桌面应用也搬到了Web上面,例如:Google就提供了在线文字处理和在线表格编辑器。更甚至于出现了不少基于Web的OS。

但是,我们不妨换一个方式想一想,为什么我们要把桌面的应用程序搬到Web上,而不把Web技术应用到我们的桌面上来?把桌面应用程序搬到Web上,固然有非常多的好处,但是,同样,使用Web技术,我们也可以更加方便了开发出更富互动的轻量级桌面应用程序,为桌面体验带来不一般的感觉。使用XUL和JavaScript开发的Joost在线流媒体播放软件带给了用户一种视频极致体验。我相信,使用Flash、使用Silverlight结合其他桌面软件开发技术,也能够带给用户不同寻常的体验。…

Beta版终究是Beta版

先是Silverlight升级不能正常使用,后来一冲动把Visual Studio也升级到了2008 Beta 2,然后把SilverlightTools也换成了对应的Alpha版本,再装了个最新的Silverlight 1.1,自以为没有什么问题了,建了个Silverlight项目,却发现找不到引用,摸索了半天,最后在网上搜到说要更新SivlerlightTools,微软不久前才发布了一个补丁,于是呼哧呼哧地跑过去下那个补丁,发现它的发布时间是8月10日,而我下载这个东西的日子恰好是8月9日!真是fz(发指)啊!

还好,网速比较快,没用多久,SilverlightTools下载下来了,按照要求,先装Silverlight 1.1,再装Silverlight Tools,好吧,总算装好了,引用也可以找到了,只是TNND写代码的时候没有代码提示和自动完成了……软件不可以fz到这种程度!

也许是我系统的问题,我们到测试服务器上也装一个吧,看会不会有代码提示和自动完成。还好安装的过程不需要人工干预,今天来看,已经装好了,嗯,还有代码提示,那好吧,我用远程控制………

用CSS在图片上再加一个小按钮

很简单的,嗯,就是要做成这样的:

用CSS,当然得用层了,就是在图片上再加一个层,用来放那个按钮,按钮又有两种方式可以放,一种是直接用图片img标签,一种是通过背景图片放上去。这里我们就用背景图片这个方式来做吧!

首先准备这样两张图片:
宽19px,高32px
宽120px,高90px

我们想想:底部要放图片,上面要放一个按钮,貌似需要用到绝对定位,那我们需要为图片再定义一个div样式,用来放图片和这个按钮,我们可以这样写:

.expdiv{
padding:4px;
width:120px;
border:1px solid #c8c8c8;
}

剩下的就是关键的把按钮放上去,在这里,按钮是一个链接,我们可以设置链接的显示方式为block,并设置其z-index值为2(只要比0大都可以),设置其宽高分别为19px和16px(我们只需要显示按钮图片的一半就可以了),那代码可以这么写:

.expbtn{
position:absolute;

Frame里的网页不能透明?

奇怪,Frame类有个Opacity属性,设置其值为0.2一点反应都没有,又貌似没有其他属性可以设置透明度,难道是bug?如果是这样,那么Frame肯定是不能实现有透明度变化的动画了……

用Google搜了一下,找到这样两个帖子:

The animation worked when applied on other elements in a test project I made, including a Frame element with just a solid red background. I think it’s just a limitation of the Frame element when rendering HTML. It uses the WebBrowser control which is just a wrapper around the MSHTML ActiveX control, I believe.

Hmm, it might be fun to write

AS3中方法重载的一种简单实现方式

在AS3中,依然不支持方法重载,但我们可以通过在参数中指定参数初值来实现一些简单的方法重载(非真正的重载),例如:

public function myFunction(arg1:String = “”, arg2:uint = 4):String
{
//方法的主体代码
}

可以根据参数的值来执行不同的代码,样这个方法就实现了同一个方法的两次次重载,包括:

public function myFunction();
public function myFunction(arg1:String);
public function myFunction(arg1:String ,arg2:unit);

当然了,我们也可以使用在JavaScript常中的判断参数个数的方式来模拟重载,如果要求重载的方法都只有一个参数,只是类型不一样时,可以通过对参数进行类型判断来真正模拟方法的重载。…

基于P2P的FLV

工作完成了,看了一下土豆网,发现有土豆有一个FLV视频加速插件,应该是传说中的P2P加速了,会是怎么做的呢?不如看看再说。

于是下载了一个飞速Tudou,下载的时候顺便看了一下帮助说明,发现有个地方也重要——就是要给浏览器设置代理,装完飞速土豆后,IE浏览器已被设置自动代理脚本,如图所示:


再打开代理脚本看看:

function FindProxyForURL(url, host) {
if (shExpMatch(url, “*/flv/*.flv*”) || shExpMatch(url, “*crossdomain.xml*”) )
return “PROXY 127.0.0.1:9415”;
else return “DIRECT”;
}

应该是只针对土豆网本站的FLV文件做了代理,为什么要做代理呢?莫非会代理到本地?如果是这样的话再看flv的时候应该会把flv下载到本地,不出意外的话应该在飞速土豆的安装文件夹里。打开飞速土豆的安装文件夹,里面果然有个download文件夹,带开一看,里面果然有我刚才看过的flv文件!…

看《哈利波特与凤凰社》归来却进不了家门


上次一群人去和平影都看《变形金刚》,lightning大老板办了张会员卡,这次居然意外地收到了和平影都《哈利波特与凤凰社》IMAX试映的邀请,可以另带一个人,偶于是就同去了。

电影九点四十开始,片长两个小时,片子确实很精彩,乌姆里奇师太的烟火表演、邓布利多和伏地魔的终极对决等画面都十分炫丽,而哈利与斯内普教授的魔法战则更是扣人心弦,另外,这一部中终于有了哈利的初吻,和那位东方mm张秋的吻。

看完电影,没有地铁可乘了,于是打了个TAXI回来,总算是打的走了回南浦大桥,南浦大桥的几个环也没有传说中的那么长,嗯。回到家门口,拿钥匙开门,却发现门被另一个同住的兄弟反锁了,钥匙开不了,拨他手机却已经关机,按了半个小时的门铃加上不停地敲门,最终还是没能叫醒那位兄弟起来开门……

熬个通宵,明天还得继续上班………

WPF中Storyboard的奇怪问题

在设置了一个对象的Opacity动画之后,再为该对象设置一个Opacity值将会无效,奇怪的是也没有异常抛出,而且在该语句之后的语句也都不执行了。例如:

DoubleAnimation myDA = new DoubleAnimation(0.8, 0.0, new Duration(TimeSpan.FromMilliseconds(800)));

Storyboard.SetTargetName(myDA, “myObj”);
Storyboard.SetTargetProperty(myDA, new PropertyPath(Canvas.OpacityProperty));

Storyboard mySB = new Storyboard();
mySB.Children.Add(myDA);
mySB.Begin(myObj);

若在此后再设置该对象的Opacity值将会无效,例如:

myObj.Opacity

奇怪的Silverlight更新

写了两个多星期的WPF Application,今天需要在界面上增加点东西,想到用Blend 2来编辑XAML文件(画图还是比写代码方便很多),但是只有在Silverlight项目中才能方便地用Blend 2打开XAML文件,于是打开了一个最开始接触Silverlight时的几个例子,习惯性地Ctrl+F5,浏览器却给了我一个很大的惊奇:弹出了一个错误提示框:

The WPF/E installed on your system is no longer valid. Please go to
“http://go.microsoft.com/fwlink/?LinkID=81210&clcid=0x409e” for the latest version.

怏怏地跑到Silverlight官方网站去看看最新版本,找了半天还是只有Silverlight 1.1 Alpha-_-。好吧,我就当这个是最新版本了,重新下载了一遍,安装,按要求重启,打开项目,再编译运行,这次更是诡异了,浏览器一片空白,状态栏提示有JS错误。看看页面源代码,发现document.getElementById后的参数和div的id名称不一致了,我没有改过代码的呀!再开两个项目,发现还是这样,诡异的Orcas(Visual…

WPF中的定时器类

刚开始接触WPF不久,也是第一次尝试开始写C#,写定时器的时候以为C#中System.Timer中的Timer类,结果发现老是抛出个很奇怪的异常:

The calling thread cannot access this object because a different thread owns it.

后来才发现,其实WPF是有自己的定时器类的,那就是System.Windows.Threading中的Timer类,使用起来也很简单:

//构造一个DispatcherTimer类实例
DispatcherTimer dTimer = new System.Windows.Threading.DispatcherTimer();

//设置事件处理函数
dTimer.Tick += new EventHandler(dTimer_Tick);

//定时器时间间隔1s
dTimer.Interval = new TimeSpan(0,0,1);

//启动定时器