2006年1月31日 星期二
GUI程序的RAD和脚本化?
但UI怎么办呢? 当然是要求有一些常用控件的,而且有事件响应能力,脚本中也要求能够操纵这些UI元素。基于俺个人多年的爱好,最好是能够同时编辑UI和事件处理代码(我认为没有这个功能就不能叫RAD:-)。
比较理想的是像Excel/Word那样用VBA(该项目是在Windows上用MFC开发的),但似乎这方面的例子和文档都比较少,也拿不到VBA的试用版来评估一下。
从目前看到的一些东西来看,Windows下比较接近我们的需求的是Script Builder, 它是基于Delphi的,可以直接使用ActiveX或者Delphi编写的package,支持ActiveScript(也就是说可以使用 VBScript, JScript, Python和Perl了)和DelphiScript。如果我们自己的项目是用Delphi开发的,把这个集成进去应该是件很酷的事情。(这个东西实际 是基于以前见过的Dream Scripter,只是UI表现上做得更加接近了我们“用脚本写程序”的想法而已。)
再看一些其他的GUI toolkit吧:
- gtk有一个glade来编辑界面,然后我们可以在pygtk/python-glade或者gtk-perl/glade-perl来写响应代码,没法直接编辑界面代码(毕竟glade不是针对具体哪种语言的) P.S 刚刚在Planet Debian TW上看见yungyuc介绍一个新东东Gazpacho,说是"看起來是 Python+GTK 的 IDE",我还高兴了一阵,拉下来试试却发现只是一个改为完全用python写的一个glade而已。当然,我们可以以此为基础再来扩展。
- wxWidgets有个wxGlade, 是模仿Glade的,不用多说。
- Qt有Qt-Designer来编辑UI, 但这个东西也是跟glade差不多;同时它还有个Qt Script for Application,使得可以通过Qt Script(基于JavaScript)来操纵UI,不知道这两个东西是否可以接合,不过这已经很不错了。
- SpecTcl是一个tk的界面设计器,不过它可以直接生成脚本(tcl甚至perl, python, ruby)
- Java方面我用过JBuilder, 对于Borland的这种方式,用最近最红火的郭德纲的话说:“ 这个杭子,我做兴!”,简直" 要了亲命了"。只是因为java的烦琐,一个用JBuilder编写的略微复杂的界面,其创建UI部分的代码,基本上是不可手工维护的。至于Eclipse上UI设计器,还没玩过,不瞎说了。
说了这么些,有朋友会问,到底你们用的哪种?呵呵,记住我们的程序是用MFC写的,也没有买Qt这样的界面套件。最后我们用了用友华表的 Cell控件做模板来模拟UI,上面也可以放些按钮、下拉框什么的,虽然显得很不专业,但总算能对付过去。
想 想也知道为什么这种东西没有基于MFC的: 要在脚本中操纵UI控件(当然是说比较自然的方式,比如MainForm.Statubar1.SimpleText = "hello, world", 不是我见一些高手在tcl里面用c代码封装SendMessage来操纵的那种),这显然要求界面库有良好的RTTI,以便宿主程序能够很方便地将界面控 件对象加到脚本解释器当中去,否则脚本中怎么操纵它们。MFC有这些个嘛? ──除非完全自己手工来折腾。
补充:
1. 忘了gambas了,这个接近于Visual Basic,UI是用Qt写的。
2. mozilla的XUL应该是一个很不错的选择,而且传言很快将加入python支持,只是比较耗内存(似乎也没界面编辑器)。
标签: delphi, programming, python, script, ui
2006年1月28日 星期六
找出个头最大的包
dpkg-query -W --showformat='${Installed-Size} ${Package}t ${Description;50}n' | grep ^[0-9] | sort -n
rpm -qa --qf '%{NAME}t%{Size}t%{Summary}n' | sort -nk 2 | tail -20
这多可乐这个
新年来了,给大家推荐一点乐子: 《居家男人》和郭德纲的相声。
《居家男人》: 一个周末的早上在某个电视频道看见两集,然后就上网狂搜。因为总共只有20集,我只好隔上好几天看一集,免得以后没有了
。常常一个人看得呵呵地傻笑。傅彪和伍宇娟都演得相当好。

郭德纲的相声突然间就红火了起来。普遍的观点是他真正继承了(或者说"复活了"更准确了一点)传统相声,对电视上那些相声明星发起了挑战。他认为相声在电视媒体上的发展使得“传统相声1000多段,经过"努力"就剩下200多段了”。如果时间不多,先推荐这个页面里的那个精品集。
标签: life
2006年1月27日 星期五
巴人之谜
有些朋友问我的名字是什么意思,当然也有不少朋友直接从我的名字看出了我的家乡所在。不错,“巴蛮子”这个名字是从“巴蔓子”变化出来的。
晋人常璩在《华阳国志·巴志》中记载:“周之世际,巴国有乱,将军巴蔓子请师于楚,许以三城。楚王救巴,巴国既宁,楚使求城,巴蔓子曰: ‘藉楚之灵,克弥祸乱,诚许楚三城。将吾头往谢之,城不可得也。’乃自刎头授楚使。楚王乃以上卿之礼葬其头、巴国亦以上卿之礼葬其身。”在恩施城南门也有 巴墓。“巴墓在城南二里,昔有巴大栅王世葬于此,历年虽多,垒垒可辨。”(嘉庆《恩施县志》)
当然,也可以说是“巴之蛮人”![]()
标签: life
2006年1月26日 星期四
SmoothGNOME for Windows XP
呵呵。

世界變了
and clearlooks 2006年1月22日 星期日
Tencent不让gaim登录QQ了?
继前几天gaim登录不上MSN之后,这两天连QQ也不能登录了。不同的是,我这里切到Windows下用MSN Messenger自己也登录不上MSN,但QQ却可以。所以也不知道是不是Tencent不让登录了,因为近来似乎QQ的客户端越来越多了:
2006年1月17日 星期二
Awesome firefox XUL example!
也许以后的“客户端”都应该用XUL来做

P.S: Fun with Firefox Chrome URLs
(no subject) 2006年1月14日 星期六
麦兜3: 春田花花同学会?
小猪“麦兜”今年推出它的第三部电影。这只动画明星猪与一大群真人明星合作,上演一幕《春田花花同学会》。
该片由《金鸡》导演赵良骏 执导,陈可辛及“麦唛、麦兜”故事原作者谢立文担任监制。影片的主角仍然是那只可爱的小猪,两岸38位明星全是配角。故事讲述这38名“春天花花幼稚园” 的小朋友毕业长大后在各行各业中经历的酸甜苦辣,让人捧腹之余,故事希望引发观众去关注到底这些小朋友小时候的志愿,长大了能否实现;长大后的他们,其实 和小时候别无两样。
问题是:我实在不喜欢周xx,单是那个补血广告就让我“顶唔顺”了。

链接:
2006年1月13日 星期五
闲话UI: 对话框不应该可调整大小?
今日在公司阅读其他人给出的一份界面可用性“规范”,里面看见一条“对话框不应可调整大小”,不仅哑然失笑:这是那门子的规矩。
Windows下的这些程序喜欢将控件固定放在第(x,y)象素,所以调整窗口大小的时候,移动窗口上控件的位置就是一件相当麻烦的事情了,因为要自己写代码来计算各个控件的相对位置,决定是固定大小、随着某边延长还是固定距离某边多宽。
我最受不了MFC的就是这个。
2006年1月12日 星期四
smiley in shell prompt
| bamanzi@limi808 ~/qref $ :) dir qref.sourceforge.net bamanzi@limi808 ~/qref $ :) false bamanzi@limi808 ~/qref $ :( |
Add the following in your ~/.bashrc
smiley() {
if [ $? -eq 0 ]; then
echo ":) "
else
echo ":( ";
fi
}
export PS1="$PS1\$(smiley)"
interesting
(no subject)
Re: dearvoid 标签: shell_script, unix
2006年1月10日 星期二
Quiz: How do people see you?
Slow and Steady |
![]() Your friends see you as painstaking and fussy. They see you as very cautious, extremely careful, a slow and steady plodder. It'd really surprise them if you ever did something impulsively or on the spur of the moment. They expect you to examine everything carefully from every angle and then usually decide against it. |
标签: life
2006年1月9日 星期一
xv - 老奶奶的顶针
问题是这样的: 我只需要针对一个窗口截图,但GNOME就只提供了抓取整屏,怎么办?我们常常只需要对图片做一点旋转、锐化(sharpen),用什么工具?
我的要求是不是很简单?但奇怪的是,我一直没有找到一个合适的工具。当然我们有GIMP,但为了几个简单的功能就要我们安装一个gimp么? 当然很多操作也可以用ImageMagick来做,但你没法“所见即所得”(WYSWYG)地看到效果(比如裁剪出图片的一部分)。
最后我找到了xv,它可以对图片进行简单编辑(裁剪、旋转以及模糊等简单特效)。
让我感慨的是这个工具还是跟当年在Slackware 3.4里面看见的一样,没有什么变化。那时的X程序还都是OpenLook或者Motif风格。
BTW: 这个程序不是完全免费的,所以Debian不可能收录它。但网上总是可以找到别人做好的包(自己编译的话还得打一大堆补丁)。
BTW2: cygwin port
2006年1月5日 星期四
让Dictionary Tooltip支持"爱词霸"
修改了一下Dictionary Tooltip(详见前一篇帖子),使得它支持"爱词霸"了
BTW: jar其实用的是zip打包,java的jar好像只是打包而不压缩,但mozilla/firefox用的jar用zip/unzip就可以了实现方法:
修改一下dictionarytipOverlay.js和dictionarytipFunctions.js即可。过滤器代码如下(完整补丁在这里: firefox-dicttip-iciba.patch):
function icibaFilter(ftDoc)
{
var headingSpan = "www.iciba.com
";
var lists = ftDoc.getElementsByTagName("div");
if (lists.length > 0)
{
var result = "";
var found = false;
for (i = 0; i < color="#008a8c">{
if ( lists[i].className == "t15 dicttitle" )
{
result = lists[i].parentNode.cloneNode(true);
found = true;
break;
}
}
if ( !found )
{
lists = ftDoc.getElementsByTagName("ul");
if (lists.length >= 3)
{
result = lists[2].cloneNode(true);
}
}
ftDoc.body.innerHTML = headingSpan;
ftDoc.body.appendChild(result);
}
else
{
ftDoc.body.innerHTML = headingSpan;
ftDoc.body.innerHTML += spanNoResults;
}
}
2006年1月4日 星期三
让firefox即指即译
现在我已经懒得装金山词霸或者stardict了,碰到认识的单词,常常是直接到google或者“爱词霸”网站去查。
不过如果是firefox上,现在有两个解决方法:
1. 装一个google toolbar (google自己提供的那个,而不是原来那个googlebar)
它实际是下载了一个大约1.5M的小词典,所以功能也比较简单,但速度不错。

2. 装Dictinary Tooltip插件。
这是今天在diggdot.us上看见的这篇The Best Firefox Extensions of 2005里面介绍的。它实际是到各种在线词典去查,然后从返回的网页上摘取需要的部分。所以功能丰富一些,但速度上有不太理想。

2006年1月2日 星期一
闲话UI: 选择目录对话框

这用ShBrowserForFolder这个Windows API可以实现。
WINSHELLAPI LPITEMIDLIST WINAPI SHBrowseForFolder(
LPBROWSEINFO lpbi
);
在Delphi中有下面这个函数可以使用:
function SelectDirectory(const Caption: string; const Root: WideString; out Directory: string): Boolean; overload; (1)
但我更喜欢用这个(在一些简单的场合):
function SelectDirectory(var Directory: string; Options: TSelectDirOpts; HelpCtx: Longint): Boolean; overload; (2)

但很多朋友不愿意,认为后面这个太难看。但在我看来,第一个对话框在可用性上是存在很大问题的:
* 不能设置(并展开到)缺省的选择
* 不能手工输入,这使得要进入一个层次深一点的目录非常麻烦
* 不能新建目录
其 实就ShBrowserForFolder这个API而言,第一个问题是很容易解决的,不过M$提供的是一种挺麻烦的方式: 你必须得编写回调函数(BrowseCallbackProc),在BFFM_INITIALIZED消息里面发送BFFM_SETSELECTION消 息。(我觉得Delphi在提供SelectDirectory(1)这个函数时就应该包装这个功能。)
对于第二个问题, 如果你的shell32.dll版本大于或等于4.71, 就可以有个手工输入路径的编辑框了, 只要在flags中包含BIF_EDITBOX;
对 于第三个问题, 如果你的shell32.dll版本大于或等于5.0, 就可以有个"新建文件夹"按钮了, 只要在flags中包含BIF_NEWDIALOGSTYLE (而且这个版本有其他一些特性: 对话框大小可调, 目录可拖动, 目录有context menu(这可以带来其他一些功能)。

BTW:
1. lazarus中有TSelectDirectoryDialog控件,功能上等于Delphi的SelectDirectory(1)函数加上设置缺省目录功能。
2. DFS套件(Torry.Net上的信息)里面有一个dfsBrowseDirectoryDlg控件,支持shell32 5.0的NewDialogStyle,对这个功能包装得比较完整(其实上面的第三个图用得就是这个控件),要添加新版本的特性(比如6.0的BIF_NOTRANSLATETARGETS等)也很容易。
相亲记
唯一的问题是,我没有feel。
回来的路上,我老想起米兰-昆德拉大叔的《生命中不能承受之轻》里托马斯后来回忆他跟特瑞莎的结识:我怎么能忍受一个陌生人就这样走进我的生活了呢?
===============================================
新年快乐
生命不能承受之轻
关于feel和陌生
我后来想明白了...
还在想这事儿啊?呵呵……
想了半个月才明白,原来自己是个俗人,^_^!
To Cabbage
好嘛 父母来了,不大在外面晃荡了。
嘿嘿
(no subject)
(no subject) 标签: life
2006年1月1日 星期日
又一年
去年的新年夜,我一个人在看《麦兜故事II: 菠萝油王子》。当时的感觉就一个字可以形容:孤独,非常孤独。
这次,新年钟声敲响的时候,我在跟Sophia在网上闲聊。
至少这一刻,我是快乐的。
也祝福她快乐。
User Comments
干嘛评论也要标题啊?
标签: life
订阅 帖子 [Atom]


