积累日常生活的点滴,开发过程的心得。

HtmlHelp2 真tmd的变态

为了制作一个完善的HtmlHelp2的项目,整整花了我三个晚上,总算摸到了一点点门道,虽然不是特别完美,但总算是可以凑合着用了。HtmlHelp2真是有点复杂的变态,最烦的莫过于手工编辑MSI数据库了:(

检查DotNet Framework是否已经安装

检查注册表键是否存在 HKLM\SOFTWARE\Microsoft\,NetFramework\Policy\v1.1

检查$WinDir\Microsoft.NET\Framework\目录是否存在

创建QuickReport的自定义函数

n年没有用QuickReport了,最近要用它写报表,中间写一个复杂的报表表达式时,觉得太复杂了,决定自己写一个QuickReport的自定义函数。QuickReport的函数实现方法还是挺简单的,只要从TQREvElementFunction基类派生,并实现Calculate方法就可以了,所有传进来的参数可以通过Argument方法获取。

function TQREvAcountFunction.Calculate: TQREvResult;
var
strDeType:string;
function GetResultType:TQREvResultType;
begin
Result:=resDouble;
end;
function ZeroResult:TQREvResult;
begin
Result.Kind:=resDouble;
Result.dblResult:=0;
end;
begin
if (ArgList.Count = 2) and (Argument(0).Kind = resString) and ((Argument(1).Kind=resDouble) or (Argument(1).Kind=resInt)) then
begin
strDeType:=Trim(Argument(0).strResult);
if MatchType(strDeType) then
Result := Argument(1)
else
Result :=ZeroResult ;
end else
Result := ErrorCreate(Format(SqrExpWrongArguments, ['Account Function'])); // Do not translate
end;

const
SqrDesc = 'Returns <X> or 0 depending on the <Type>';
SqrSoft = 'Sysa';
initialization
RegisterQRFunction(TQREvEtcFunction,'Etc', 'Etc(<Type>, <Count>)|' + SqrDesc, SqrSoft, '2SN');

唯一要注意的是RegisterQRFunction的第四个参数是一个字符串,2表示统计函数,S表示第一个参数是字符串,N表示第2个参数是数字。

Norton真tmd烂

以前对Norton的印象还算不错,不过自打装了Norton2005之后,发现我的机器整个慢了一个数量级,打开Office文档的时间够我喝杯茶的,另外它带了一个Internet Security的狗屁软件,速度狂慢,每次机器开机时,这东西加载数据要花5分钟。我今天实在是忍无可忍,无须再忍,将他们彻底从我的机器上清除了出去。经过这回不愉快的经历,我发现还是瑞星的杀毒和防火墙好一些,系统资源的占用小多了。

百度没有前途

以前我的网站来自百度的访问量大概有10-20%,但是后来直线下降,一直不明白为什么。最近上百度搜索医院,突然发现一个熟悉的小医院排名居然排在第一位,我老婆是做在线广告的,告诉我该医院买了百度的搜索排名的服务,所以能排在前面,联想到很久以前一些知名的搜索引擎厂商就因为卖搜索排名,把自己的名声搞臭了,结果Google异军突起。联想到现在的百度,老这么搞的话,我担心下场好不了。

 

FireFox越来越流行了

我的个人网站访问者,中firefox的用户从2%增加到了4%

 昨天看了一个流量在1200独立ip的欧洲网站的统计,firefox的用户在20%以上了。ie的用户才50%(不算myie这类工具)

不过maxthon和myie在国外用的还不是很多,虽然在国内占了20%左右。



 

 

把Bbclone升级了一下

感觉除了界面漂亮了一点之外,别的没什么新东西

.Net Framework中一个拙劣的设计

Toolbar响应按钮点击事件不是为每个Button定义一个OnClick事件,而是要求你在ButtonClick事件中统一进行处理,这会导致一种很糟糕的编程风格:

if (e.Button==btn1)
do1;
else if (e.Button==btn2)
do 2;
....

可以想像如果你的工具条上有20多个按钮,你的ButtonClick事件中会堆满了一堆乱草 Sad

其实,原来我对这个糟糕的设计并不是那么气愤,真正让我气愤的是因为微软那个傻X工程师的设计间接导致我写的一个控件对于ToolbarButton的绑定无效。这个意外又将花费我一些时间去研究,强烈鄙视作者!

使用Infopath和SharePoint进行信息采集

部门中经常需要让大家填写工作周报、日报等等,填写完之后进行汇总是一个比较麻烦的事情。

今天试验着用InfoPath和SharePoint做了一下,感觉不错。首先就是用InfoPath建一个表单,然后发布到SharePoint的表单库。建好后,发一个Email给大家,让大家填写。填写后,用Merge Form的功能就可以将这些表单进行汇总。另外,SharePoint还支持对InfoPath的过滤,全文检索,分组等功能,还可以对某个表单的修改监视。

.Net Component组件把我给恶心着了

今天写一个派生于Component的组件,想在组件中判断是否是在设计时,如果是在运行时,则调用我的初始化代码,对DesignMode属性的判断是在构造函数中的,结果发现在构造函数中DesignMode永远是返回false,结果我的运行时代码在设计时被执行了 :-(。

于是想找一下Component组件的方法中是否有类似于Delphi的Loaded方法可以在组件加载后判断是否在DesignMode。结果发现,Component组件没有这样的方法,真是Shit :sick

同步内容