新鲜、有趣,互联生活。令狐葱。

2006/11/28

BCB 中实现文件拖放操作

以前在做公交站点查询的时候,曾经用到过文件拖放的功能,是用C#实现的,代码非常简单。但是同样的功能,即拖动文件到窗体,获得文件名,在BCB 下面实现却略显繁琐,或许会有更好的方式,但是我还没发现。
 
代码如下:
 
//在.h文件里加上:
private :    // User declarations
    void __fastcall AcceptFiles (TMessage& Msg);
public :        
// User declarations
    __fastcall TForm1(TComponent* Owner);
    BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER( WM_DROPFILES, TMessage, AcceptFiles)
    END_MESSAGE_MAP(TForm)

//在.cpp文件里

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    DragAcceptFiles( this->Handle, true);
}
void __fastcall TForm1 ::AcceptFiles(TMessage& Msg)
{
    const int m_nMaxFileNameLen=255;
     int i, m_nCount;
    char m_sFileName[m_nMaxFileNameLen];
   
//ZeroMemory(m_sFileName,m_nMaxFileNameLen+1);
    m_nCount=DragQueryFile((HANDLE)Msg.WParam, 0xffffffff, m_sFileName , m_nMaxFileNameLen);
   
//ZeroMemory(m_sFileName,m_nMaxFileNameLen+1);
    for (i=0;i<m_nCount;i ++)
    {
        DragQueryFile((HANDLE )Msg.WParam, i, m_sFileName , m_nMaxFileNameLen);
        MessageBox( this->Handle,m_sFileName,"Drop File" ,MB_OK);
       
//ZeroMemory(m_sFileName,m_nMaxFileNameLen+1);
    }
    DragFinish ((HANDLE)Msg.WParam);
}

一篇不错的文章(Z)

心理学课上,周正教授正在授课:"上次下课时,一个男孩子递了张纸条:'我是个比较内向的人,又没什么特长,不会踢足球,不会打篮球……唯一的爱好是写作。进入大学后,看到周围的同学在交往、工作中左右逢源、如鱼得水、洒脱干练,很是羡慕。就要步入社会了,我该如何规划自己的前途呢?……周教授,我想我还是当一名作家比较好,一个人,也不错,您说呢?'这个问题要不要回答?"周教授扬了扬手中的纸条。

    "回――答――"同学们兴致大起,"作家梦"可是不少惮于竞争之人的救命稻草啊!

    周教授放下手中的纸条:"好,今天我就当面回答这位同学――我的态度,很简单:凡是做'作家梦'的人,都是逃避现实的、无能的人……"

    话音未落,下面已是一片嘘声。

    "我来问问你们,一支笔、一张纸的事,谁不会?当作家,就是这么简单,人人都会。我常说,一流人才在军界和商界,二流人才在政界,三流人才在学术界。对军人而言,你领十万人,我领十万人,没本事,死的十万就是你的。这里要的是综合素质,是挑战,所以军界的人是最强的。商界也是如此,投入两个亿,三个月后,可能家破人亡,你干不干?要的是同样的素质。政界就不同,他可以调整、迂回,政策不行可以再改,是有余地的,但要负责任。而学术界,一次不行两次,两次不行三次……永远不行都可以。军人和商人的成败一目了然,唯有作家可进可退,无所谓胜负成败……"有人若有所思地点头。

    "某著名作家在一所大学做讲座的时候,有同学问他怎样才能当作家?他说:'首先养活你的家,再说当作家!'"周教授认真地看着大家,眼神里自然地流露出一种深切的关爱,"《论语》中记载:有一次孔子来到卫国,见卫国人很多,就说'庶矣哉',意思是'卫国人多啊'。旁边有人问'既庶矣,又何加焉?'意思是'人多,怎么办呢?'――问题来了,有人,人多了,怎么办?我们该做点什么呢?你们认为孔子会怎么说?"

    "教之――"大家很自信,大教育家嘛。

    周教授微笑着摇摇头:"子曰:'富之。'――孔子说:'让他们富起来。'你们以为有了人就要教育,却不知道在教育之前,首先要让人富起来。旁人又问:'既富矣,又何加焉?'――'人们富足以后,又该如何?'"

    "教之――"大家会心一笑。
"对,人富足了才有条件接受教育。吃不好穿不暖的时候,教育是句空话,况且对衣食无安的人大谈教育,这种行为本身就不厚道。孔子不愧是教育大家,他这'不富不教'的意义很深远!按照心理学家马斯洛的需求层次理论,人只有满足了基本的生理需求以后,才会去考虑安全、爱与被爱的需要,才会有自我实现的需要。"

    "举例而言:勒紧腰带过日子的小两口,到了情人节,丈夫一咬牙,送爱妻一大束玫瑰,这时候妻子是什么感觉?"

    "浪漫吧?"

    "是浪费!"同学们争起来。

    "还不如送我一双毛皮手套呢!你看看,这个冬天我的手又冻了,净花冤枉钱……"周教授开玩笑似的嗔怪道,大家在嬉笑中亦有所感悟。

    "当人过日子都紧张的时候,是不会想着浪漫的,那是有钱人的享受。问你们一个常识:知道雄鸟追求雌鸟的时候,送给雌鸟的是什么?"

    "虫子。"

    "对啊,一送虫子,雌鸟就会意了:这家伙生存能力强,跟着它,今后我们的孩子不会挨饿。这是一个连鸟都明白的道理。"

    下面安静极了,生怕漏掉周教授的任何一句话。

    "'仓廪实而知礼节,衣食足而知荣辱。'自古以来,人们便说'饥寒起盗心'。能吃得好、穿得好,生活安定之后才能让晚辈过正常的生活。如果没有东西吃,连父母的东西也会抢过来吃,兄弟的就更不用提了。在人们陷入最差的生活状态时,就顾不得什么道义。这就是人类真正的本性。中国的先哲早在几千年以前,就已指出了人类的真实形貌。"

    "在衣食无法获得满足时,依然能保持礼节,这是凡人做不到的事情。"

    "如果希望这种兽性不要出现,期待我们最理想的人性流露,也为了维持社会秩序,提高道义,彼此能懂得礼貌,并以此幸福生活,就必须确保每个人都能有自己的收入。换句话说,要让大家能赚到钱。基于义务,我们必须要赚钱才行。"
必须赚钱!――看来,所谓"以人为本",我们并不比古人懂得多。

    "雄性丧失了生存能力就丧失了天赋雄性之本性。历史表明,男人的不幸、民族的不幸源于贫穷。所谓'贫病交加'、'穷凶极恶'……因此,你们必须认识到:挣钱是公德,要重视金钱。我这样告诉你们:男孩子,你可以不会踢足球,不会打篮球,可以不会作诗,不会弹钢琴,不会做饭。可以什么都不会,但是必须会挣钱。"

    周教授的话字字珠玑、鞭辟入里。我感觉很多男孩子的眼睛在放光,不知他们看到的是压力还是希望?

    "最后,再给你们一个例子,你们用心思考。比如说,快到春节了,太太说:'该过春节了,咱爸咱妈想来深圳这边,看看咱们和小外孙。'她先生立刻就说:'来啥来?根本不用来!咱已经忙得够呛了,再让他们过来,净添乱!再说,这路上,老年人多不方便!'这个男人现在是什么状态?"

    "气急败坏!"有人笑着回答。

    "记住,凡是气急败坏的男人都是穷男人。但是另外一家,太太说:'老公啊,快过春节了,老人们都想过来看看咱们,一年没见面了!'先生说:'哦,好啊好啊,应该让他们过来。这样,你让他们坐飞机过来。'这个男人就不气急败坏,他很平静。'还有,你看,咱家的房子,这三层七八间,冷冷清清的,孩子也没有人陪着玩。爷爷奶奶来了,或者姥姥姥爷来了,家里有生气,过年过节的有生气多好!'他为什么这样说?因为这个男人有钱,他不怕,他有地方住,有钱让父母过来。他有办法显示他的孝心,而且这种男人往往不会发脾气。因为他有很大的控制权,有很好的基础,任何事情到他这里都可以化解,可以平静对待。然后,一家人高高兴兴地过了春节。老人走的时候,先生问太太:'爸妈他们有什么要求没有?''没有没有,他们都很高兴,一点要求都没有。'先生说:'我听见了,他们说老三要结婚,没房子住,他们想空出房子去住老房。这怎么可以呢?这样,在老家花6万块钱,我们出3万,三弟拿3万,盖一栋两层小楼让他们住,爸妈就不用动了。'听了这话,太太抱着丈夫说不出话来,这样的老公哪个太太不爱不感激呢?好,房子盖成了,弟弟说姐夫是好人,全村羡慕,父母开心,一家生活幸福。3万块钱,只是他一个月的工资,他愿意拿出这3万块钱。"

    周教授最后说:"愿意做哪一个,你们自己选择。但是,要记住:知识不一定会带来金钱,挣钱靠的是能力。"

2006/11/22

解决php中Cannot send session cache limiter 的问题

今天在使用php 的session 的时候,出现了以前就遇见但是又解决不了的问题,在页面上出现如下提示:
 
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at E:\php\code\admin.php:1) in E:\php\code\logolist\adminlogo.php on line 2
 
上网搜了一下,有人说是因为在session_start(); 语句之前有其他的html代码,但是我的session_start(); 已经在做前面了。
还有的说是因为没有设置session 保存路径,需要修改php.ini中的session.save_path = "C:/phpsession" [后边的路径自己设置,并且要保证存在。php.ini 文件一般应位于系统盘/Windows 目录下面]
 
但是我做如上设置之后还是会有这个提示。后来经过反复测试,终于解决问题。
解决办法:
修改php.ini中的session.auto_start = 0 session.auto_start = 1

C#中运行本地文件

Example:
OpenDoc("C:\\SomeDocumentation.pdf");
OpenDoc("C:\\AWebPage.htm", "EDIT");
OpenDoc("C:\\Test.txt", "PRINT");
System.Diagnostics.Process doc = OpenDoc("C:\\WebPage.htm");


public System.Diagnostics.Process OpenDoc(String Filename, String Verb)
{
        System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo( );
        info.FileName = Filename;
        info.UseShellExecute = true ;
        info.Verb = Verb;
        info.WindowStyle = System.Diagnostics .ProcessWindowStyle.Normal;
        return System. Diagnostics.Process.Start(info);
}

public System.Diagnostics.Process OpenDoc (String Filename)
{
        return OpenDoc (Filename, "OPEN");
}

使用XPathDocument 读取XML文件

一般比较常用的读取xml 好像用DOM,不过使用XPathDocument  效果也不错。

        public string GetXMLString(string xmlFilename, string xpath)
        {
            string xmlString = null;

            XPathDocument doc = new XPathDocument(xmlFilename);
            XPathNavigator nav = doc.CreateNavigator();
            XPathNodeIterator iter = nav.Select(xpath);
            iter.MoveNext();
            xmlString = iter.Current.Value;
            xmlString = iter.Current.GetAttribute("name", "");
            iter = null;
            nav = null;
       
            return xmlString;
        }
详细可参见MSDN

2006/11/21

Snap:生成缩略图的搜索引擎

 
 
Snap 是一个很有创意的搜索引擎,它在用户搜索的时候就可以及时地给出一个预览图,用起来很是方便,可以让用户较快的找到自己的东西。以前好象见过一个浏览器的插件,可以在google 上给搜索结果生成缩略图,悬浮显示,也很不错,可惜忘记名字了:〉
 

2006/11/20

任务管理器菜单不显示的解决办法

今天发现,自己的任务管理器不见了菜单和状态栏,看起来像个秃头和尚,很不爽,上网搜了一下,原来解决办法是如此之简单,纳闷我在乱试的时候怎么老想着右键菜单而没想到这个方法呢?太BT了?
 
解决办法:在任务管理器的最左边或者最右边双击,即可显示菜单项。
 
 
 

二进制整数运算

n位无符号整数的范围0~2n - 1
n位有符号整数范围-1 * 2(n - 1)~2(n - 1) - 1
以8位为例,无符号整数二进制表示如下(0~255):
Decimal Binary
0 00000000
1 00000001
2 00000010
3 00000011
...
252 11111100
253 11111101
254 11111110
255 11111111
有符号整数二进制表示如下(-128~127):
Decimal Binary
127 01111111
126 01111110
125 01111101
124 01111100
...
3 00000011
2 00000010
1 00000001
0 00000000
-1 11111111
-2 11111110
-3 11111101
-4 11111100
...
-125 10000011
-126 10000010
-127 10000001
-128 10000000
注意:
1. 加法运算
91 01011011
+ 31 + 00011111
122 01111010
直接相加即可,注意无符号和有符号混合运算,这样也可以得到正确结果,前提是:溢出的一位要丢弃。
7  00000111
+ -5   +  11111011
2 100000010
2. 计算一个有符号整数的相反数的方法是取反加一。
比如 1 二进制00000001,取反11111110,加一,11111111(就是-1了)
同样,对0也是适用的。
有一个特殊情况:
3. 对-128,由于不存在值128的8位整数,所以利用取反加一得到:
-128(10000000),取反,01111111,加一,10000000(又得到它本身,也就是说-128 * -1 == -128
T.MinValue * -1 == T.MinValue.这种结果对求绝对值的运算也是一样。
在C运行时环境,abs(-2147483648) == -2147483648.
但是在C#中,求最小数的绝对值运算Abs会抛出异常,但是直接乘-1不会有异常,结果同上所述。
可以做如下测试:
int negativeOne = -1;
int minValue = int.MinValue;

Console.WriteLine(minValue);
Console.WriteLine(negativeOne * minValue);
 

C#中的==和Equals()

class Program
     {
        public static bool EqualityTest1( object o1, object o2)
        {
            return o1.Equals(o2);
        }

        public static bool EqualityTest2(object o1 , object o2)
        {
            return o1 == o2;
        }
        static void Main(string[] args)
        {
             int i1 = 4;
             int i2 = 4;
            string s1 = "Hello!" ;
            string s2 = "Hello!";
            string s3 = new string (new char[] { 'H', 'e', 'l' , 'l', 'o', '!' });
            
//Now let's look at some simple methods to compare equality.


            Console.WriteLine(EqualityTest1 (i1, i1));
            Console. WriteLine(EqualityTest2(i1, i1));

            
// Compare i1 to i2
             Console.WriteLine(EqualityTest1(i1, i2 ));
            Console.WriteLine(EqualityTest2(i1, i2));

            
// Compare s1 to s2
            Console.WriteLine(EqualityTest1 (s1, s2));
            Console. WriteLine(EqualityTest2(s1, s2));

            
// Compare s2 to s3
             Console.WriteLine(EqualityTest1(s2, s3 ));
            Console.WriteLine(EqualityTest2(s2, s3));
        }
     }
运行结果有点出人意料,但是还是解释的通的。

2006/11/19

SearchMash:google 的分类集成搜索

SearchMash 是Google 推出的一种新的搜索方式,这种所谓的web2.0 的搜索模式简单的说就是对搜索结果重新进行集成和整合,从而让用户可以更容易的找到它需要的结果。目前国内的bbmao 和这种理念比较一致。
 
SearchMash 自10月3日正式推出以来,一直在不断的改进和更新它的界面和功能,所以以后的样子也确实让人期待。最近,发现他又增加了Blog和Video搜索,现在右边的分类就有image、blog、video、wikipedia四种了,可以想象,会有更多的:〉
 
 
 
 

 

2006/11/15

.NET快捷键

快捷键         功能
CTRL + SHIFT + B生成解决方案
CTRL + F7  生成编译
CTRL + O        打开文件
CTRL + SHIFT + O打开项目
CTRL + SHIFT + C显示类视图窗口
F4       显示属性窗口
SHIFT + F4显示项目属性窗口
CTRL + SHIFT + E显示资源视图
F12        转到定义
CTRL + F12转到声明
CTRL + ALT + J对象浏览
CTRL + ALT + F1帮助目录
CTRL + F1 动态帮助 
F1        帮助
SHIFT + F1当前窗口帮助
CTRL + ALT + F3帮助-搜索
SHIFT + ALT + ENTER全屏显示
CTRL + -向后定位
CTRL + SHIFT + -向前定位
CTRL + F4关闭文档窗口
CTRL + PAGE DOWN光标定位到窗口上方
CTRL + PAGE UP光标定位到窗口下方
CTRL + F6
CTRL + TAB下一个文档窗口
CTRL + SHIFT + F6
CTRL + SHIFT + TAB上一个文档窗口
ALT + F6下一个面板窗口
CTRL + K, CTRL + L取消remark
CTRL + K, CTRL + C注释选择的代码
CTRL + K, CTRL + U取消对选择代码的注释
CTRL + M, CTRL + O折叠代码定义
CTRL + M, CTRL + L展开代码定义
CTRL + DELETE删除至词尾
CTRL + BACKSPACE删除至词头
SHIFT + TAB取消制表符
CTRL + U转小写
CTRL + SHIFT + U转大写
CTRL + SHIFT + END选择至文档末尾
CTRL + SHIFT + HOME选择至文档末尾开始
SHIFT + END选择至行尾
SHIFT + HOME选择至行开始处
SHIFT + ALT + END垂直选择到最后尾
SHIFT + ALT + HOME垂直选择到最前面
CTRL + A全选
CTRL + W选择当前单词
CTRL + SHIFT + PAGE UP选择至本页前面
CTRL + SHIFT + PAGE DOWN选择至本页后面
CTRL + END文档定位到最后
CTRL + HOME文档定位到最前
CTRL + G转到…
CTRL + K, CTRL + P上一个标签
CTRL + K, CTRL + N下一个标签
ALT + F10调试-ApplyCodeChanges 
CTRL + ALT+ Break停止调试
CTRL + SHIFT + F9 取消所有断点
CTRL + F9允许中断
CTRL + SHIFT + F5调试-重新开始
F5运行调试
CTRL + F5运行不调试
F10跨过程序执行
F11单步逐句执行
CTRL + J列出成员 
CTRL + PAGE DOWN下一个视图
CTRL + B格式-粗体
CTRL + SHIFT + T格式-文字缩进  
 
 
链接:

2006/11/13

自由穿梭虚拟世界:微软推出3D建模工具

 

微软在上周末推出了一个它在7月预览过程序的技术预览版,它能够处理同一个地点或物体的数百张相片并建立一个三维模型,用户可以像身处虚拟世界一样在其中自由穿梭。 

这个程序称为PhotoSynth,在SIGGRAPH 2006首次亮相。微软把它描述成"幻灯片与游戏体验的混合体,用户可以进行放大以获得更多细节或缩小来获得更大范围的景观。"官方网站

遗憾的是,这个软件的硬件要求比较高,而且它只支持Windows XP SP2或Windows Vista,而且对显卡的要求也挺高,要求支持DirectX 9和WDDM驱动程序,128MB显存,32位每象素。
 
新闻来源:Pconline。


2006/11/11

光棍节

又是一年光棍节!
看着四个1那么立着这让人寒!
 
 祝天下的有情人终成眷属!

2006/11/10

公交车查询系统(存在问题)

前几日闲来无事做了个"公交车查询"系统,使用Xml作为数据源。难点主要在换乘线路的查询和显示。主要代码如下:
 
public void GetLinesBetweenStops(String stopOne, String stopTwo)
        {
             List<Line> linesOne = new List<Line>();
            List<Line> linesTwo = new List< Line>();
            List<Line> linesOneAfter = new List<Line>();

            linesDisplay.Clear ();

            foreach (Line line in lines) {
                 bool isInLinesOne = false;
                foreach (String stop in line.Stops) {
                    if (stopOne == stop) {
                        linesOne.Add(line);
                        isInLinesOne = true;
                        break;
                     }

                
}
                if (!isInLinesOne) {
                    foreach (String stop in line.Stops) {
                        if (stopTwo == stop) {
                            linesTwo.Add(line);
                             break;
                        }
                    }
                }
             }

            foreach (Line line in linesOne) {
                 bool isOneLine = false;
                foreach (String stop in line.Stops) {
                    if (stopTwo == stop) {
                        linesDisplay.Add(line);
                        isOneLine = true;
                        break;
                     }
                }
                 if (!isOneLine) {
                    linesOneAfter.Add(line);
                }
            }
            
//中转
            linesDisplay .Add(null);
             foreach (Line line1 in linesOneAfter) {
                foreach (String stop1 in line1.Stops ) {
                    foreach (Line line2 in linesTwo) {
                        foreach (String stop2 in line2.Stops ) {
                            if (stop1 == stop2) {
                                colorStops .Add(stop1);
                                linesDisplay.Add( line1);
                                linesDisplay.Add(line2);
                                break;
                             }
                        }
                     }
                }
            }
        }
 
程序显示界面如下:
 
程序中数据的保存使用List<string>,虽然说遍历什么的还比较方便,不过也造成了程序的硬伤。程序中还提供了"转换文件"功能,可以由固定合适的txt文本文件生成本程序使用的xml数据源。程序下载请到我的EDisk。压缩包内有西安市公交线路数据库,来源为西安公交网 (很好的公交车查询网站)。若需添加其他城市数据,放入相应的xml数据源即可,格式需要严格要求。若有好的建议,请于我联系。代码索取随时恭候。
 
目前来看上不让人满意的地方还很多,主要有:
1. 由于数据结构设计的不合理,造成查询不是很方便,且多处使用循环嵌套,资源消耗较大。估计使用数据库的话应该会好一些。
2. 换乘线路应该成对出现,由于设计时使用list,显示的时候按次序显示,故看起来很不方便。
3. 换乘站点应该以特殊字体颜色显示,尚未解决。

QQ好友号码备份器

使用QQ,有时候想保存下来自己的好友号码,但是QQ自己导出来的地址簿显得杂乱不堪,看起来十分郁闷。正好在看 C#的文件处理,所以自己做了一个分析QQ导出的文件,整理出QQ昵称和号码的简单程序,在VS2005 上编译通过。下载请到我的EDisk
 
使用方法:1.QQ->菜单 ->好友与资料->好友管理器。
         2.所有分组 右键 导出地址簿
         3.把导出的文件拖到软件上,或者使用软件的打开按钮。
         4.执行。
         注意:生成文件保存在原始文件同目录。
         
没什么技术含量,不过写的过程中获益颇多:

1.
拖动文件到程序上:
   
private void Form1_DragEnter(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent (DataFormats.FileDrop)) {
            e.Effect = DragDropEffects .Link;
        } else {
            e.Effect = DragDropEffects.None;
        }
    }

    private void Form1_DragDrop( object sender, DragEventArgs e)
    {
       
//其中textBox1.Text显示的就是拖进文件的文件名;
        textBox1 .Text = ((System. Array)e.Data.GetData(DataFormats.FileDrop)).GetValue( 0).ToString();
    }


2.
打开外部文件
   
System.Diagnostics .Process.Start(resultFileName);
此函数有几种重载方式,可以设置执行程序等。
3. ToolTip
控件的使用
   
toolTip1.SetToolTip(label1, "使用方法:\r\n\r\n1.QQ->菜单->好友与资料->好友管理器。" +
                                         "\r\n2.所有分组 右键 导出地址簿 " +
                                        "\r\n3.把导出的文件拖到软件上,或者使用软件的打开按钮。" +
                                        "\r\n4.执行。" +
                                        "\r\n注意:生成文件保存在原始文件同目录。" );
换行使用"\r\n"。

2006/11/07

可汉可英电子邮件

 
 
10月31日,荷兰Chinglish BV公司正式推出Chinglish.com可汉可英网站),这是全球首个自动提供电子邮件中英文互译服务的网站。干什么用的?自己来看吧。 demo
 

contactoffice:又一个Online Office

 
 
contactoffice 提供了一系列实用的在线办公工具,目前包括的服务有:日历创建/邮件的收发转发/ 群组内的短消息服务 /基本格式的文件上传服务-5MB/ 便条记事本/ 书签/ 群组维基/ 群组论坛/群组聊天/SMS等个性服务。

mypictr:制作你的网络头像

Snap a Picture
 
mypictr 可以让你轻松制作在别的网站上需要使用的头像,上传你的照片后mypictr会自动捕捉到你的脸部,并设置最佳大小方便你的剪切。而且现在还提供了好多web2.0网站默认的头像大小,如:digg,  myspace, last-fm, flickr, technorati, youtube等。
 

Quintura:搜索引擎新体验?

Quintura 被称为新一代的搜索引擎,其实只是因为它大量使用了Ajax 以及形象化现实搜索结果,有兴趣的可以玩一下,个人感觉比较一般,还不如google 提供给Vol 那个用着舒服。另外,虽然使用了ajax,但是用户体验并不像想象中的那么理想,比如我搜索一个东西,结果出来之后我点一个进去,想在回到搜索页面几乎是无计可施!
 

 

2006/11/06

BCB中使用EhLib控件的几个技巧

说明:最近在使用BCB做项目,所以适当的学习了一些其上的控件,在找一些资料的时候感觉困难不小,所以好不容易找出来的东西也希望能解某些人的燃眉之急。
 
//**********************************
//* 点击columns 的title 实现自动排序
//* 针对EhLib 的DbGridEh
//**********************************
void __fastcall TForm_LineInfo::DBGridEh1TitleClick(TColumnEh *Column)
{
    
//TADOQuery * query =  DBGridEh1->DataSource->DataSet;

    if(!query ->IsEmpty()){
        TBookmark SavePlace;
        SavePlace = query-> GetBookmark();
        if (query->Sort != Column->FieldName ){
            query->Sort = Column->FieldName;
        } else {
             query->Sort = Column->FieldName + "   DESC  ";
        }
        query->GotoBookmark( SavePlace);
        query->FreeBookmark(SavePlace);
   }
}
//**********************************
//* 让DBGrid自适应列宽
//* 针对EhLib 的DbGridEh
//**********************************
void AdjustDBGrid(TDBGridEh *DBGrid )
{
      for( int i = 0; i <= DBGrid->Columns->Count - 1; i++){
           DBGrid->Columns->Items[i]->Title->Alignment   =   taCenter;
          DBGrid ->Columns->Items[i]->Title->Font->Name   =   "宋体";
          DBGrid->Columns->Items[i]->Title->Font-> Size     =   10 ;
          DBGrid->Columns->Items[i]->Width = this->Canvas ->TextWidth(DBGrid->Columns->Items[i]->Title->Caption )   +   30 ;
      }
//for的结束
}
//**********************************
//* 随窗口变化调整控件位置
//* 当然也可以直接设置控件为Align属性为alClient
//**********************************
void __fastcall TForm_LineInfo::FormResize(TObject *Sender)
{
    int midLoc = Width / 2;
    TControl * ChildControl;
     for (int i = 0; i < this->ControlCount; i++) {
        
//遍历Controls数组,ControlCount是数组元素个数
        ChildControl = Controls[i];
        
//ChildControl->Left = midLoc-ChildControl->Width / 2;

        if (ChildControl == GroupBox1) {
            
//若控件是GroupBox,对其子控件进行操作
            int SubMidLoc = GroupBox1->Width / 2;
             for(int j = 0;j < GroupBox1->ControlCount; j++) {

            
//遍历GroupBox1的Controls数组。ControlCount是数组元素个数
            ChildControl = GroupBox1->Controls[j];
            ChildContro1->Left = SubMidLoc-ChildControl->Width / 2;
            }
        }
    }
}

2006/11/02

Vox: Bloger的新选择

 
 
VoxSixApart 公司在推出Moveabletype、TypaPad、Livejournal以后的又一力作,Vox是一个以Blog为基础的SocialNetworking(以video、books、audio为媒介,通过vox的博客平台,把用户聚集在一起。

Vox支持OpenID,一种所谓的通用网络账号。其实OpenID就是SixApart提出来的,在MT、TypePad、Livejournal上得到广泛应用。

Google 终于收购了JotSpot

 
 
为什么用终于?呵呵,其实很早以前第一次看到JotSpot 的时候感觉他就和Google的online office 的构思不谋而合,还有另外一个让我又类似印象的网站是:Zoho Show
 
就在前几天,我刚刚介绍过JotSpot 的Wiki 自助建站(代理访问连接):
 
JotSpot 提供一种建立你自己的Wiki 的服务,很是全面,几乎包括了所有Online Office 的服务:网页、Calendar、File Carbinets(文件柜,可以上传文件)、SpreadSheet、To-Do Lists等等,都很不错。而且这些以wiki 的形式展现出来,更是体现了Online Office 的特色:便于分享和协同编辑。
 
当时就觉得很是不错,特别是里面的好多功能,都和google 已经推出的服务很相似:Calendar、SpreadSheet等等,不晓得google 这次收购它是看中了什么呢?难道是简单的为了减少一个竞争对手?不管怎么说,我都觉得,google 绝对是个赢家,因为不管JotSpot 的已有东西是否对google 有用,google 都既争取到了JotSpot 原有的用户又获得了JotSpot 强大的技术人才资源,如此一举夺得,何乐不为?
 

2006/11/01

FeedPath:不错的在线Rss阅读器



feedpath是于今年1月份刚刚上线的一个在线RSS阅读器,Made in Japan。feedpath 提供基本的feed订阅,还支持OPML导入/导出。
值得说明的是,feedpath和我们刚刚介绍过的FeedXs有一个共同的理念,那就是将博客编辑与feed管理的巧妙的结合在一起,feedpath 让你可以在不登入自己博客后台的情况下,通过博客程序API,直接将日志发布到你的blog,目前支持的博客程序有:blogger,worldpress,mixi,gree等。虽然说不算什么新功能(writely早就有此功能),但是用起来还不错,因为feedpath 的界面做的很是清爽,看上去比较舒服,而且速度还可以,遗憾的是是小日本开发的,只提供英日界面,切换方式是ComboBox式,和FeedXs的Tab式有所不同。

两个网站其实没什么关系,配色风格大相径庭,但是总感觉似乎又关系紧密,呵呵


FeedXs:烧制属于自己的Feed

烧制属于自己的Feed,应该不算是什么新鲜的服务了,像feedburner,feedsky等就是专门提供这种服务的网站。

FeedXs 的特别之处在于它 可以跳过blog而直接发布RSS feed,并且可以直接通过MSN来发布Post到自己的Feed,只要你在FeedXs注册完帐号以后,将“msn@feedxs.com”加为好友,就可以直接发布内容到你的feed。

个人感觉FeedXs 真是“看问题看实质”的坚决拥护者,把feed 从blog上剥离出来感觉也不觉得有什么不妥:〉不过感觉其实还是一个blog,只不过看问题的角度不一样了,不是从blog的角度,而是从feed本身来看了。

网站提供两种语言,切换方式采用Tab标签式,与下面将要介绍的feedpath.com不同:〉遗憾的是,目前定制出来的feed对中文的支持不太好。