<feed version="0.3" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns="http://purl.org/atom/ns#" xml:lang="zh-CHS"><title>Softdream</title><link rel="alternate" type="text/html" href="http://softdream.cndev.org/" /><tagline type="text/html">       ----     BT乐园</tagline><id>http://softdream.cndev.org/</id><author><name>棒棒糖</name><url>http://softdream.cndev.org/</url></author><generator url="http://scottwater.com/blog" version=".Text Version 0.95.2004.101">.Text</generator><modified>2008-06-19T17:40:22Z</modified><entry><title>FR  经验</title><link rel="alternate" type="text/html" href="http://softdream.cndev.org/archive/2008/06/19/59052.aspx" /><id>http://softdream.cndev.org/archive/2008/06/19/59052.aspx</id><created>2008-06-19T17:40:00Z</created><issued>2008-06-19T09:40:00+08:00</issued><modified>2008-06-19T17:40:00Z</modified><content type="text/html" mode="escaped">Fastreport使用经验(转) 在Delphi程序中访问报表对象
最基本的方法就是frxReport1.FindObject。然后把返回的对象强制转换成它的类型，当然，在报表中必须真的有这么个东东。如改变一个

Tfrxmemoview的内容，可以这样写TfrxMemoView(frxReport1.FindObject('memo1')).Text:='jade';

还可以用TfrxReportPage的FindBand方法，这个方法的参数是Band类，如报表抬头就可以直接使用这个方法，因为抬头一个页中只有一个，如

果有多个同样的类。则不能使用这种方法。如果要使用TfrxreportPage，一般可以用这样的代码
TfrxReportPage(frxReport1.Pages[0])。当然，如果你的这个页是对话框型的，则不行了。但一般都是报表型的。

******使用上下标
在Fastreport中使用上下标是很简单的，只要用一个Tfrxmemoview，把AllowHTMLTags属性设为真，就可以使用网页标签来实现上下标了，如

12&lt;sup&gt;2&lt;/sup&gt;与24&lt;sub&gt;3&lt;/sub&gt;。就分别是2为上标，3为下标。

******打印页码
打印页码是很简单的，只要加入一些常量即可，如打印第几页共几页就可以使用
第[Page#]页   共[TotalPages#]页
这里要注意的一点是如果想正确显示总页数，必须选中二次报表。


******动态建立变量及变量组
建立变量组名
frxreport1.Variables.Add.Name:=' '+变量组名;
建立变量名
frxreport1.Variables.AddVariable('组名，如果为不存的组或空，则为默认组，这里不需要空格',变量名,变量初始值);
例如要建立变量组Yuan,二个变量Yuan1,Yuan2，则为
frxreport1.Variables.Add.Name:=' Yuan';注意前面是空格
frxreport1.Variables.AddVariable('Yuan',Yuan1,初始值)
frxreport1.Variables.AddVariable('Yuan',Yuan2,初始值)

******共用TFrxreport及TfrxDBDataSet
一个程序中，不管多么大的程序，只要打印或预览时是模式的，则完全可以共用一个TFrxreport变量及几个TfrxDBDataSet。只不过，要注意完

成一个报表程序的步骤，主要是下面几步
1)清除报表，得到一个全新的报表内容。
Frxreport1.clear。
2)设置要使用的TfrxDBDataSet的别名，如果不需要可以省略这一步，但一般最好不同的报表用不同的别名。
注意这一步要在加载报表文件之前，因为一般设计报表文件时已经包含了别名信息。
frxDBDataSet1.UserName:=别名;
3)加载报表或动态建立一个TfrxReportPage。
Frxreport1.LoadFromFile(报表文件的完整文件名);
4)关联TfrxDBDataSet与TDataset，并设置要使用哪些TfrxDBDataSet。
Frxreport1.DataSets.Clear;//先清除原来的数据集
frxDBDataSet1.DataSet:=dataset1;//关联Fastreport的组件与TDataset数据集。
Frxreport1.DataSets.Add(frxDBDataSet1);//加载关联好的TfrxDBDataSet到报表中。
经过这几步后，就可以像单独使用一个Tfrxreport一样使用共用的报表组件了。


******加入自定义函数
Fastreport可以自己加入需要的函数，来实现特定的功能。过程就是：
1)添加函数到报表中。
frxreport1.AddFunction('完整的函数声明');
如有一个自定义函数，为GetName(Old:String):String;这个函数通过数据集的一个字段，得到另一个返回值。
则语句为：frxreport1.AddFunction('Function GetName(Old:String):String;');
2)脚本中使用函数。
在脚本中或报表中使用自定义函数，就像使用其它Fastreport内置函数一样。
3)程序中处理函数。
使用函数是通过frxreport1的OnUserFunction函数来实现的。
OnUserFunction的声明如下：Function(const MethodName: String;var Params: Variant): Variant;
比如上面的函数，首先要有一个函数，这个函数是GetName的实现部分。如有一个在程序中实现的函数。
function RealGetName(Old:String):String;这个函数名是无所谓的，也可以是GetName。
在OnUserFunction的事件处理中有如下代码即可完成自定义函数在报表中的使用。
if CompareText(MethodName,'GetName')=0 then Result:=RealGetName(VarToStr(Params[0]));
我一般都是使用CompareText来比较函数名，因为我发现二个版本的Fastreport，一个是MethodName全部自动变成了小写，一个是全部自动变成

了大写，所以干脆用CompareText来比较，肯定不会出错。

如果有多个参数，则依次传递Params[0],Params[1]即可，要保持顺序一致。
这里要注意一点，如果参数为指针，则不能直接使用Pointer(Integer(Params[0]))。因为实际传递过来的是指针的整数值，可以使用Pointer

(StrToInt(VarToStr(Params[0])))。


******使用脚本，脚本中使用变量
很多时候，我们希望把对报表的控制放到报表的脚本中，通常我这样做有二个原因：
1)能够根据字段内容的变化而使用不同的设置，因为如果想在程序中实现这样功能，就不得不用自定义函数，函数的实现要放到程序中，函数

可能需要传递很多参数，效率低下。
2)把不同报表的控制放到脚本中，可以实现报表的模块化，程序只是简单的设置数据集的关系，并加载硬盘上的报表文件，不同报表的不同实

现方式，显示方式，均放到报表文件中，程序简洁，易维护，易升级。
当然，这样的缺点就是程序中加载报表时的数据集别名必须与设计报表时的别名一致。
脚本的使用与通常程序的使用并没有太多的区别，就是像正常的程序那样引用控件的名称即可。
但注意对变量的使用，需要把变量名或表达式用&lt;&gt;括起来。

******在脚本中根据字段名改变Tfrxmemoview的内容
假设有数据表&amp;#8220;用户&amp;#8221;，字段ID为用户标识，Name为用户名，打印时要求，如果用户名为空，则打印&amp;#8220;无用户名&amp;#8221;，否则打印出&amp;#8220;用户名：实

际的用户&amp;#8221;，则可以在ID的Tfrxmemoview控件的OnAfterData事件中写如下脚本。
if &lt;frxDBDataSet1."Name"&gt;='' then
Memo2.Text:='无用户名'
else
Memo2.Text:='用户名：[frxDBDataSet1."Name"]'
Memo2是放置用户名称数据的Tfrxmemoview控件。
这里注意，要在脚本中访问变量需要把变量用&lt;&gt;包括起来。


******实现连续打印
很多人认为Fr不能实现连续打印，以为只能通过自己写函数调用打印函数来实现连续打印，实际上，Fr可以轻易的实现连续打印，同时，实现

时又是非常简单，你甚至可以在你的程序的打印设置中简单的让客户选择是否连续打印，其它都可以保持不变。

function PelsTomm(Pels:Extended):Extended;
begin      
Result:=Pels/Screen.PixelsPerInch*25.4;
end;

procedure PrintSerial(Frx:TFrxReport;SequencePage:Byte=0);
var
P:TfrxReportPage;
R,R1:Extended;
begin
{必须是二遍报表，否则无法计算总页数。
下面的方法只适用于没有页脚的情况，因为如果有页脚的话
FreeSpace就始终为0了。可以用报表脚来代替。
因为是连续打印，也可以看作只有一页，报表脚也就相当于页脚了}
if not Frx.Engine.DoublePass then Exit;
//SequencePage指要连续打印的页面，普通报表就是0
P:=TfrxReportPage(Frx.Pages[SequencePage]);
R1:=P.TopMargin+P.BottomMargin;
while Frx.PrepareReport do
begin
    if (Frx.Engine.TotalPages&lt;=1) then Break;
    R:=Pelstomm(Frx.Engine.TotalPages*Frx.Engine.PageHeight-
      Frx.Engine.FreeSpace)+R1;
    P:=TfrxReportPage(Frx.Pages[SequencePage]);
    P.PaperHeight:=R;
end;
{必须用上面的循环代码来得到准确的空白区域
不能用通过计算总页数减去各页的页边距的方法来获得空白区域
因为如果碰到一条记录过宽的情况导致换页，就不准确了。}
R:=Pelstomm(Frx.Engine.TotalPages*Frx.Engine.PageHeight-
    Frx.Engine.FreeSpace)+R1;
P:=TfrxReportPage(Frx.Pages[SequencePage]);
P.PaperHeight:=R;
end;

在预览或打印前先调用PrintSerial即可。


也谈为Delphi中数据库报表加网格开发者在线 Builder.com.cn 更新时间:2007-11-02作者：佚名 来源:中国计算机报社
本文关键词： delphi 数据库 报表 网格
看了贵报第63期《为Delphi 3.0中数据库报表加上网格线》一文，笔者发现原文中的程序在不同分辨率的打印机（如180dpi的针式打印机和

600dpi的激光打印机）上打印表格，效果会完全不同。如作者以针打作为他的输出打印机设计的程序，在激光打印机上输出，就会发现表格和

文字错位，而且表格会打印得很小。而且原文中打印坐标的确定，必须靠反复的试验才能达到比较满意的效果。

　　针对原目标，笔者设计了一段程序。首先在窗体上添加一个DBGrid来显示我们所要打印的数据，在这里，DBGrid不只是起到显示数据的作

用，而且用户对DBGrid作的调整，例如改变了各字段的排列顺序，各字段的显示宽度等，都将直接反映到打印结果中去，也就是说，我们实际

上就是要把DBGrid的内容直接输出到打印机。以下程序在Win 98+Delphi 4下编译通过，代码如下：

procedure TForm1.Button2Click(Sender: TObject);
const
　　 LeftBlank=1; //定义页边距，单位厘米
　　 RightBlank=1;
　　 TopBlank=1;
　　 BottomBlank=1;
var
　　 PointX,PointY:integer;
　　 PointScale,PrintStep:integer;
　　 s:string;
　　 x,y:integer;
　　 i:integer;
begin //获取当前打印机的分辨率
PointX:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)/2.54);
　　PointY:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSY)/2.54);

　　//根据打印机和屏幕的分辨率计算出从屏幕转换到打印机的比例　
PointScale:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)
/Screen.PixelsPerInch+0.5); //横向打印
　 printer.Orientation:=poLandscape;

　　 //打印的字体和大小
　　printer.Canvas.Font.Name:=′宋体′;
　　printer.canvas.Font.Size:=10;

　　 //根据字体的大小确定每行的高度
　　s:=′漳州市刑警支队′;
　　PrintStep:=printer.canvas.TextHeight(s)+16;

　　 //打印的起点位置
　　x:=PointX*LeftBlank;
　　y:=PointY*TopBlank;

　　 //DataSource1是DBGrid1所连接的数据源

　　if ((DataSource1.DataSet).Active=true) and ((DataSource1.DataSet).RecordCount〉0) then
　　begin
　　printer.BeginDoc;
　　(DataSo e1.DataSet).First;
　　while not (DataSource1.DataSet).Eof do
　　begin //打印DBGrid中的所有列
　　 for i:=0 to DBGrid1.FieldCount－1 do
　　 begin
　　//假如所要打印的列超出了打印范围，则忽略该列
　　if (x+DBGrid1.Columns.Items[i].Width*PointScale)〈=(Printer.PageWidth－PointX*RightBlank) then
　　 begin //画表格线
//每页的第一行打印表头
　 Printer.Canvas.Rectangle(x,y,x+DBGrid1.Columns.
Items[i].Width*PointScale,y+PrintStep);
　 if y=PointY*TopBlank then
　　 Printer.Canvas.TextOut(x+8,y+8,DBGrid1.Columns[i].Title.Caption)
　　 else
　　 Printer.Canvas.TextOut(x+8,y+8,DBGrid1.Fields[i].asString);
　　end; //计算下一列的横坐标

　　 x:=x+DBGrid1.Columns.Items[i].Width*PointScale;
　　end;

　 if not (y=PointY*TopBlank) then
(DataSource1.DataSet).next;

　　 x:=PointX*LeftBlank;
　 y:=y+PrintStep; //换页
　 if (y+PrintStep)〉(Printer.PageHeight－PointY*BottomBlank) then
　 begin
　　 Printer.NewPage;
　　 y:=PointY*TopBlank;
　　 end;
　 end;

　 printer.EndDoc;
　　 (DataSource1.DataSet).First;
　　 Application.MessageBox(′打印完成′,′打印′,32);
　　end;
end;&lt;img src ="http://softdream.cndev.org/aggbug/59052.aspx" width = "1" height = "1" /&gt;</content><wfw:comment>http://softdream.cndev.org/comments/59052.aspx</wfw:comment><slash:comments>0</slash:comments><wfw:commentRss>http://softdream.cndev.org/comments/commentRss/59052.aspx</wfw:commentRss><trackback:ping>http://softdream.cndev.org/services/trackbacks/59052.aspx</trackback:ping></entry><entry><title>终于见到了程序员美女</title><link rel="alternate" type="text/html" href="http://softdream.cndev.org/archive/2008/05/06/58811.aspx" /><id>http://softdream.cndev.org/archive/2008/05/06/58811.aspx</id><created>2008-05-06T13:11:00Z</created><issued>2008-05-06T05:11:00+08:00</issued><modified>2008-05-06T13:11:00Z</modified><content type="text/html" mode="escaped">终于见到了程序员美女，哦，这么多年了，头一回啊。头一回。

只是跟男生一样，不太注意形象&amp;#8230;&amp;#8230;
男的么，感觉正常，女的么，感觉是这种工作不适合她。&lt;img src ="http://softdream.cndev.org/aggbug/58811.aspx" width = "1" height = "1" /&gt;</content><wfw:comment>http://softdream.cndev.org/comments/58811.aspx</wfw:comment><slash:comments>0</slash:comments><wfw:commentRss>http://softdream.cndev.org/comments/commentRss/58811.aspx</wfw:commentRss><trackback:ping>http://softdream.cndev.org/services/trackbacks/58811.aspx</trackback:ping></entry><entry><title>０８年春　</title><link rel="alternate" type="text/html" href="http://softdream.cndev.org/archive/2008/01/24/58066.aspx" /><id>http://softdream.cndev.org/archive/2008/01/24/58066.aspx</id><created>2008-01-24T15:09:00Z</created><issued>2008-01-24T07:09:00+08:00</issued><modified>2008-01-24T15:09:00Z</modified><content type="text/html" mode="escaped">一、一个中心：一切以健康为中心。 
二、两个基本点： 
遇事潇洒一点，看世糊涂一点。 
三、三个忘记： 
忘记年龄，忘记过去，忘记恩怨。 
四、四个拥有： 
无论你有多弱或多强，一定要拥有真正爱你的人，拥有知心朋友，拥有向上的事业，拥有温暖的住所。 
五、五个要： 
要唱，要跳，要俏，要笑，要苗条。 
六、六个不能： 
不能饿了才吃，不能渴了才喝，不能困了才睡，不能累了才歇，不能病了才检查，不能老了再后悔！ 
&lt;img src ="http://softdream.cndev.org/aggbug/58066.aspx" width = "1" height = "1" /&gt;</content><wfw:comment>http://softdream.cndev.org/comments/58066.aspx</wfw:comment><slash:comments>0</slash:comments><wfw:commentRss>http://softdream.cndev.org/comments/commentRss/58066.aspx</wfw:commentRss><trackback:ping>http://softdream.cndev.org/services/trackbacks/58066.aspx</trackback:ping></entry><entry><title>设计的两种境界</title><link rel="alternate" type="text/html" href="http://softdream.cndev.org/archive/2007/12/18/57636.aspx" /><id>http://softdream.cndev.org/archive/2007/12/18/57636.aspx</id><created>2007-12-18T15:06:00Z</created><issued>2007-12-18T07:06:00+08:00</issued><modified>2007-12-18T15:06:00Z</modified><content type="text/html" mode="escaped">有两种方式构建软件设计：一种是把软件做得很简单以至于明显找不到缺陷；另一种是把它做得很复杂以至于找不到明显的缺陷。&lt;img src ="http://softdream.cndev.org/aggbug/57636.aspx" width = "1" height = "1" /&gt;</content><wfw:comment>http://softdream.cndev.org/comments/57636.aspx</wfw:comment><slash:comments>0</slash:comments><wfw:commentRss>http://softdream.cndev.org/comments/commentRss/57636.aspx</wfw:commentRss><trackback:ping>http://softdream.cndev.org/services/trackbacks/57636.aspx</trackback:ping></entry><entry><title>关于浮沉</title><link rel="alternate" type="text/html" href="http://softdream.cndev.org/archive/2007/11/21/57078.aspx" /><id>http://softdream.cndev.org/archive/2007/11/21/57078.aspx</id><created>2007-11-21T10:40:00Z</created><issued>2007-11-21T02:40:00+08:00</issued><modified>2007-11-21T10:40:00Z</modified><content type="text/html" mode="escaped">记得中学时代曾经过看一部新加坡的片子，名字叫《浮沉》。
    看的时候，处于懵懂时期，只是跟着看个热闹；而没有去品味。现在想来，世事皆如此；总会随着时间起起落落，最终老去。

莫非偶已看破红尘？真的可以六根清净了？出家当和尚去。

呵呵，话归正题。

在我们个人金融投资的时候，总有那么些不如意：股市大跌，被深度套牢；基金玩家的净值也会随着基金公司股票市值的缩水而痛苦&amp;#8230;&amp;#8230;
这是正常现象。而我们要做的，就是把握股市大节奏，在自己掌握的最大程度上为自己减少损失就可以了。
一、不管股民还是基民，首先要克服的，就是贪心。
    利益的诱惑是赤裸裸的，能够做到平静地面对它，不是件容易的事儿。
二、见好就收。
    当N多人都在叫嚣到&amp;#8220;顶&amp;#8221;的时候，往往还没有顶的出现。当大家都在挣的欢儿的时候，顶就是这么突然地出现了。
三、该出手时就出手。
    有些经验的人知道在逢跌补仓。可是何是介入是个问题。究竟什么时候是个底呢？外界面N多评论看得人两眼发花也理不出个头绪出来。
其实可以这样操作：前提是，对后市看好的情况下，可以分时、分段补仓。这样可以把风险相对控制的较小，同时又可以获得相对可观的收益。不要计较一点一滴地得与失。

结尾：在全面通胀时代到来的背景下，我等小民就是被待宰的羔羊，看着手中的人民币不断的缩水却无可奈何&amp;#8230;&amp;#8230;那就尽自己最大努力博一下下吧。

各位好运！

&lt;img src ="http://softdream.cndev.org/aggbug/57078.aspx" width = "1" height = "1" /&gt;</content><wfw:comment>http://softdream.cndev.org/comments/57078.aspx</wfw:comment><slash:comments>0</slash:comments><wfw:commentRss>http://softdream.cndev.org/comments/commentRss/57078.aspx</wfw:commentRss><trackback:ping>http://softdream.cndev.org/services/trackbacks/57078.aspx</trackback:ping></entry><entry><title>生活</title><link rel="alternate" type="text/html" href="http://softdream.cndev.org/archive/2007/08/21/54096.aspx" /><id>http://softdream.cndev.org/archive/2007/08/21/54096.aspx</id><created>2007-08-21T22:32:00Z</created><issued>2007-08-21T14:32:00+08:00</issued><modified>2007-08-21T22:32:00Z</modified><summary type="text/html">看堂前花开花落，听左右风吹雨打。</summary><content type="text/html" mode="escaped">态度：
看堂前花开花落，听左右风吹雨打。
　　呵呵，听起来超然物外，众人皆醉我独醒。
其实，到最后，还是身在红尘中啊。&lt;img src ="http://softdream.cndev.org/aggbug/54096.aspx" width = "1" height = "1" /&gt;</content><wfw:comment>http://softdream.cndev.org/comments/54096.aspx</wfw:comment><slash:comments>1</slash:comments><wfw:commentRss>http://softdream.cndev.org/comments/commentRss/54096.aspx</wfw:commentRss><trackback:ping>http://softdream.cndev.org/services/trackbacks/54096.aspx</trackback:ping></entry><entry><title>backup and restore</title><link rel="alternate" type="text/html" href="http://softdream.cndev.org/archive/2007/06/18/52233.aspx" /><id>http://softdream.cndev.org/archive/2007/06/18/52233.aspx</id><created>2007-06-18T14:12:00Z</created><issued>2007-06-18T06:12:00+08:00</issued><modified>2007-06-18T14:12:00Z</modified><content type="text/html" mode="escaped">A. 还原完整数据库


说明 MyNwind 数据库仅供举例说明。


下例显示还原完整数据库备份。

RESTORE DATABASE MyNwind
FROM MyNwind_1

B. 还原完整数据库备份和差异备份
下例还原完整数据库备份后还原差异备份。另外，下例还说明如何还原媒体上的另一个备份集。差异备份追加到包含完整数据库备份的备份设备上。

RESTORE DATABASE MyNwind
FROM MyNwind_1
WITH NORECOVERY
RESTORE DATABASE MyNwind
FROM MyNwind_1
WITH FILE = 2

C. 使用 RESTART 语法还原数据库
下例使用 RESTART 选项重新启动因服务器电源故障而中断的 RESTORE 操作。

-- This database RESTORE halted prematurely due to power failure.
RESTORE DATABASE MyNwind
FROM MyNwind_1
-- Here is the RESTORE RESTART operation.
RESTORE DATABASE MyNwind
FROM MyNwind_1 WITH RESTART

D. 还原数据库并移动文件
下例还原完整数据库和事务日志，并将已还原的数据库移动到 C:\Program Files\Microsoft SQL Server\MSSQL\Data 目录下。

RESTORE DATABASE MyNwind
FROM MyNwind_1
WITH NORECOVERY,
MOVE 'MyNwind' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.mdf',
MOVE 'MyNwindLog1' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.ldf'
RESTORE LOG MyNwind
FROM MyNwindLog1
WITH RECOVERY

E. 使用 BACKUP 和 RESTORE 创建数据库的复本
下例显示使用 BACKUP 和 RESTORE 语句创建 Northwind 数据库的复本。MOVE 语句使数据和日志文件还原到指定的位置。RESTORE FILELISTONLY 语句用于确定待还原数据库内的文件数及名称。该数据库的新复本称为 TestDB。有关更多信息，请参见 RESTORE FILELISTONLY。

BACKUP DATABASE Northwind
TO DISK = 'c:\Northwind.bak'
RESTORE FILELISTONLY
FROM DISK = 'c:\Northwind.bak'
RESTORE DATABASE TestDB
FROM DISK = 'c:\Northwind.bak'
WITH MOVE 'Northwind' TO 'c:\test\testdb.mdf',
MOVE 'Northwind_log' TO 'c:\test\testdb.ldf'
GO

F. 使用 STOPAT 语法还原到即时点和使用多个设备进行还原
下例将数据库还原到其在 1998 年 4 月 15 日中午 12 点时的状态，并显示涉及多个日志和多个备份设备的还原操作。

RESTORE DATABASE MyNwind
FROM MyNwind_1, MyNwind_2
WITH NORECOVERY
RESTORE LOG MyNwind
FROM MyNwindLog1
WITH NORECOVERY
RESTORE LOG MyNwind
FROM MyNwindLog2
WITH RECOVERY, STOPAT = 'Apr 15, 1998 12:00 AM'

G. 使用 TAPE 语法还原
下例显示从 TAPE 备份设备还原完整数据库备份。

RESTORE DATABASE MyNwind
FROM TAPE = '\\.\tape0'

H. 使用 FILE 和 FILEGROUP 语法还原
下例还原一个包含两个文件、一个文件组和一个事务日志的数据库。

RESTORE DATABASE MyNwind
FILE = 'MyNwind_data_1',
FILE = 'MyNwind_data_2',
FILEGROUP = 'new_customers'
FROM MyNwind_1
WITH NORECOVERY
-- Restore the log backup.
RESTORE LOG MyNwind
FROM MyNwindLog1

I. 将事务日志还原到标记处
下例显示将事务日志还原到名为"RoyaltyUpdate"的标记处。

BEGIN TRANSACTION RoyaltyUpdate
WITH MARK 'Update royalty values'
GO
USE pubs
GO
UPDATE roysched
SET royalty = royalty * 1.10
WHERE title_id LIKE 'PC%'
GO
COMMIT TRANSACTION RoyaltyUpdate
GO
--Time passes. Regular database
--and log backups are taken.
--An error occurs.
USE master
GO

RESTORE DATABASE pubs
FROM Pubs1
WITH FILE = 3, NORECOVERY
GO
RESTORE LOG pubs
FROM Pubs1
WITH FILE = 4,
STOPATMARK = 'RoyaltyUpdate'&lt;img src ="http://softdream.cndev.org/aggbug/52233.aspx" width = "1" height = "1" /&gt;</content><wfw:comment>http://softdream.cndev.org/comments/52233.aspx</wfw:comment><slash:comments>0</slash:comments><wfw:commentRss>http://softdream.cndev.org/comments/commentRss/52233.aspx</wfw:commentRss><trackback:ping>http://softdream.cndev.org/services/trackbacks/52233.aspx</trackback:ping></entry><entry><title>成长中必须知道的20个故事 [转]</title><link rel="alternate" type="text/html" href="http://softdream.cndev.org/archive/2007/06/02/51942.aspx" /><id>http://softdream.cndev.org/archive/2007/06/02/51942.aspx</id><created>2007-06-02T14:24:00Z</created><issued>2007-06-02T06:24:00+08:00</issued><modified>2007-06-02T14:24:00Z</modified><content type="text/html" mode="escaped">&lt;SPAN id=showcontent&gt;&lt;BR&gt;&amp;nbsp;&lt;BR&gt;1、断箭&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;不相信自己的意志，永远也做不成将军。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 春秋战国时代，一位父亲和他的儿子出征打战。父亲已做了将军，儿子还只是马前卒。又一阵号角吹响，战鼓雷鸣了，父亲庄严地托起一个箭囊，其中插着一只箭。父亲郑重对儿子说：&amp;#8220;这是家袭宝箭，配带身边，力量无穷，但千万不可抽出来。&amp;#8221;&amp;nbsp;那是一个极其精美的箭囊，厚牛皮打制，镶着幽幽泛光的铜边儿，再看露出的箭尾。一眼便能认定用上等的孔雀羽毛制作。儿子喜上眉梢，贪婪地推想箭杆、箭头的模样，耳旁仿佛嗖嗖地箭声掠过，敌方的主帅应声折马而毙.&amp;nbsp;果然，配带宝箭的儿子英勇非凡，所向披靡。当鸣金收兵的号角吹响时，儿子再也禁不住得胜的豪气，完全背弃了父亲的叮嘱，强烈的欲望驱赶着他呼一声就拔出宝箭，试图看个究竟。骤然间他惊呆了。&amp;nbsp;一只断箭，箭囊里装着一只折断的箭。&amp;nbsp;我一直刳着只断箭打仗呢！儿子吓出了一身冷汗，仿佛顷刻间失去支柱的房子，轰然意志坍塌了。&amp;nbsp;结果不言自明，儿子惨死于乱军之中。&amp;nbsp;拂开蒙蒙的硝烟，父亲拣起那柄断箭，沉重地啐一口道：&amp;#8220;不相信自己的意志，永远也做不成将军。&amp;#8221;&amp;nbsp;把胜败寄托在一只宝箭上，多么愚蠢，而当一个人把生命的核心与把柄交给别人，又多么危险！比如把希望寄托在儿女身上；把幸福寄托在丈夫身上；把生活保障寄托在单位身上&amp;#8230;&amp;#8230;&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：自己才是一只箭，若要它坚韧，若要它锋利，若要它百步穿杨，百发百中，磨砺它，拯救它的都只能是自己。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;2、生命的价值&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;不要让昨日的沮丧令明天的梦想黯然失色！&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在一次讨论会上，一位著名的演说家没讲一句开场白，手里却高举着一张20美元的钞票。&amp;nbsp;面对会议室里的200个人，他问：&amp;#8220;谁要这20美元？&amp;#8221;一只只手举了起来。他接着说：&amp;#8220;我打算把这20美元送给你们中的一位，但在这之前，请准许我做一件事。&amp;#8221;他说着将钞票揉成一团，然后问：&amp;#8220;谁还要？&amp;#8221;仍有人举起手来。&amp;nbsp;他又说：&amp;#8220;那么，假如我这样做又会怎么样呢？&amp;#8221;他把钞票扔到地上，又踏上一只脚，并且用脚碾它。尔后他拾起钞票，钞票已变得又脏又皱。&amp;nbsp;&amp;#8220;现在谁还要？&amp;#8221;还是有人举起手来。&amp;nbsp;&amp;#8220;朋友们，你们已经上了一堂很有意义的课。无论我如何对待那张钞票，你们还是想要它，因为它并没贬值，它依旧值20美元。人生路上，我们会无数次被自己的决定或碰到的逆境击倒、欺凌甚至碾得粉身碎骨。我们觉得自己似乎一文不值。但无论发生什么，或将要发生什么，在上帝的眼中，你们永远不会丧失价值。在他看来，肮脏或洁净，衣着齐整或不齐整，你们依然是无价之宝。&amp;#8221;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：生命的价值不依赖我们的所作所为，也不仰仗我们结交的人物，而是取决于我们本身！我们是独特的&amp;#8212;&amp;#8212;永远不要忘记这一点！&lt;BR&gt;&lt;BR&gt;&amp;nbsp;3、昂起头来真美&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;别看它是一条黑母牛，牛奶一样是白的。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 珍妮是个总爱低着头的小女孩，她一直觉得自己长得不够漂亮。有一天，她到饰物店去买了只绿色蝴蝶结，店主不断赞美她戴上蝴蝶结挺漂亮，珍妮虽不信，但是挺高兴，不由昂起了头，急于让大家看看，出门与人撞了一下都没在意。&amp;nbsp;珍妮走进教室，迎面碰上了她的老师，&amp;#8220;珍妮，你昂起头来真美！&amp;#8221;老师爱抚地拍拍她的肩说。&amp;nbsp;那一天，她得到了许多人的赞美。她想一定是蝴蝶结的功劳，可往镜前一照，头上根本就没有蝴蝶结，一定是出饰物店时与人一碰弄丢了。&amp;nbsp;自信原本就是一种美丽，而很多人却因为太在意外表而失去很多快乐。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：无论是贫穷还是富有，无论是貌若天仙，还是相貌平平，只要你昂起头来，快乐会使你变得可爱&amp;#8212;&amp;#8212;人人都喜欢的那种可爱。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;4、为生命画一片树叶&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;只要心存相信，总有奇迹发生，希望虽然渺茫，但它永存人世。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 美国作家欧；亨利在他的小说《最后一片叶子》里讲了个故事：病房里，一个生命垂危的病人从房间里看见窗外的一棵树，在秋风中一片片地掉落下来。病人望着眼前的萧萧落叶，身体也随之每况愈下，一天不如一天。她说：&amp;#8220;当树叶全部掉光时，我也就要死了。&amp;#8221;一位老画家得知后，用彩笔画了一片叶脉青翠的树叶挂在树枝上。&amp;nbsp;最后一片叶子始终没掉下来。只因为生命中的这片绿，病人竟奇迹般地活了下来。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：人生可以没有很多东西，却唯独不能没有希望。希望是人类生活的一项重要的价值。有希望之处，生命就生生不息！&lt;BR&gt;&lt;BR&gt;&amp;nbsp;5、飞翔的蜘蛛&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;信念是一种无坚不催的力量，当你坚信自己能成功时，你必能成功。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 一天，我发现，一只黑蜘蛛在后院的两檐之间结了一张很大的网。难道蜘蛛会飞？要不，从这个檐头到那个檐头，中间有一丈余宽，第一根线是怎么拉过去的？后来，我发现蜘蛛走了许多弯路--从一个檐头起，打结，顺墙而下，一步一步向前爬，小心翼翼，翘起尾部，不让丝沾到地面的沙石或别的物体上，走过空地，再爬上对面的檐头，高度差不多了，再把丝收紧，以后也是如此。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：蜘蛛不会飞翔，但它能够把网凌结在半空中。它是勤奋、敏感、沉默而坚韧的昆虫，它的网制得精巧而规矩，八卦形地张开，仿佛得到神助。这样的成绩，使人不由想起那些沉默寡言的人和一些深藏不露的智者。于是，我记住了蜘蛛不会飞翔，但它照样把网结在空中。奇迹是执着者造成的。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;6、阴影是条纸龙&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;人生中，经常有无数来自外部的打击，但这些打击究竟会对你产生怎样的影响，最终决定权在你手中。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 祖父用纸给我做过一条长龙。长龙腹腔的空隙仅仅只能容纳几只蝗虫，投放进去，它们都在里面死了，无一幸免！祖父说：&amp;#8220;蝗虫性子太躁，除了挣扎，它们没想过用嘴巴去咬破长龙，也不知道一直向前可以从另一端爬出来。因而，尽管它有铁钳般的嘴壳和锯齿一般的大腿，也无济于事。&amp;nbsp;&amp;#8221;当祖父把几只同样大小的青虫从龙头放进去，然后关上龙头，奇迹出现了：仅仅几分钟，小青虫们就一一地从龙尾爬了出来。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：命运一直藏匿在我们的思想里。许多人走不出人生各个不同阶段或大或小的阴影，并非因为他们天生的个人条件比别人要差多远，而是因为他们没有思想要将阴影纸龙咬破，也没有耐心慢慢地找准一个方向，一步步地向前，直到眼前出现新的洞天。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;7、成功并不像你想像的那么难&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;并不是因为事情难我们不敢做，而是因为我们不敢做事情才难的。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1965 年，一位韩国学生到剑桥大学主修心理学。在喝下午茶的时候，他常到学校的咖啡厅或茶座听一些成功人士聊天。这些成功人士包括诺贝尔奖获得者，某一些领域的学术权威&amp;nbsp;和一些创造了经济神话的人，这些人幽默风趣，举重若轻，把自己的成功都看得非常自然和顺理成章。时间长了，他发现，在国内时，他被一些成功人士欺骗了。那些人为了让正在创业的人知难而退，普遍把自己的创业艰辛夸大了，也就是说，他们在用自己的成功经历吓唬那些还没有取得&amp;nbsp;成功的人。&amp;nbsp;作为心理系的学生，他认为很有必要对韩国成功人士的心态加以研究。1970年，他把《成功并不像你想像的那么难》作为毕业论文，提交给现代经济心理学的创始人威尔&amp;nbsp; 布雷登教授。布雷登教授读后，大为惊喜，他认为这是个新发现，这种现象虽然在东方甚至在世界各地普遍存在，但此前还没有一个人大胆地提出来并加以研究。惊喜之余，他写信给他的剑桥校友--当时正坐在韩国政坛第一把交椅上的人--朴正熙。他在信中说，&amp;#8220;我不敢说这部著作对你有&amp;nbsp;多大的帮助，但我敢肯定它比你的任何一个政令都能产&amp;nbsp;生震动。&amp;#8221;&amp;nbsp;后来这本书果然伴随着韩国的经济起飞了。这本书鼓舞了许多人，因为他们从一个新的角度告诉人们，成功与&amp;#8220;劳其筋骨，饿其体肤&amp;#8221;、&amp;#8220;三更灯火五更鸡&amp;#8221;、&amp;#8220;头悬梁，锥刺股&amp;#8221;没有必然的联系。只要你对某一事业感兴趣，长久地坚持下去就会成功，因为上帝赋予你的时间和智慧够&amp;nbsp;你圆满做完一件事情。后来，这位青年也获得了成功，他成了韩国泛业汽车公司的总裁。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：人世中的许多事，只要想做，都能做到，该克服的困难，也都能克服，用不着什么钢铁般的意志，更用不着什么技巧或谋略。只要一个人还在朴实而饶有兴趣地生活着，他终究会发现，造物主对世事的安排，都是水到渠成的。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;8、永远的坐票&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;生活真是有趣：如果你只接受最好的，你经常会得到最好的。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 有一个人经常出差，经常买不到对号入坐的车票。可是无论长途短途，无论车上多挤，他总能找到座位。&amp;nbsp;他的办法其实很简单，就是耐心地一节车厢一节车厢找过去。这个办法听上去似乎并不高明，但却很管用。每次，他都做好了从第一节车厢走到最后一节车厢的准备，可是每次他都用不着走到最后就会发现空位。他说，这是因为像他这样锲而不舍找座位的乘客实在不多。经常是在他落座的车厢里尚余若干座位，而在其他车厢的过道和车厢接头处，居然人满为患。&amp;nbsp;他说，大多数乘客轻易就被一两节车厢拥挤的表面现象迷惑了，不大细想在数十次停靠之中，从火车十几个车门上上下下的流动中蕴藏着不少提供座位的机遇；即使想到了，他们也没有那一份寻找的耐心。眼前一方小小立足之地很容易让大多数人满足，为了一两个座位背负着行囊挤来挤去有些人也觉得不值。他们还担心万一找不到座位，回头连个好好站着的地方也没有了。与生活中一些安于现状不思进取害怕失败的人，永远只能滞留在没有成功的起点上一样，这些不愿主动找座位的乘客大多只能在上车时最初的落脚之处一直站到下车。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：自信、执着、富有远见、勤于实践，会让你握有一张人生之旅永远的坐票。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;9、心中的顽石&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;阻碍我们去发现、去创造的，仅仅是我们心理上的障碍和思想中的顽石。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 从前有一户人家的菜园摆着一颗大石头，宽度大约有四十公分，高度有十公分。到菜园的人，不小心就会踢到那一颗大石头，不是跌倒就是擦伤。&amp;nbsp;儿子问：&amp;#8220;爸爸，那颗讨厌的石头，为什么不把它挖走？&amp;#8221;&amp;nbsp;爸爸这么回答：&amp;#8220;你说那颗石头喔？从你爷爷时代，就一直放到现在了，它的体积那么大，不知道要挖到到什么时候，没事无聊挖石头，不如走路小心一点，还可以训练你的反应能力。&amp;#8221;&amp;nbsp;过了几年，这颗大石头留到下一代，当时的儿子娶了媳妇，当了爸爸。&amp;nbsp;有一天媳妇气愤地说：&amp;#8220;爸爸，菜园那颗大石头，我越看越不顺眼，改天请人搬走好了。&amp;#8221;&amp;nbsp;爸爸回答说：&amp;#8220;算了吧！那颗大石头很重的，可以搬走的话在我小时候就搬走了，哪会让它留到现在啊？&amp;#8221;&amp;nbsp;媳妇心底非常不是滋味，那颗大石头不知道让她跌倒多少次了。&amp;nbsp;有一天早上，媳妇带着锄头和一桶水，将整桶水倒在大石头的四周。&amp;nbsp;十几分钟以后，媳妇用锄头把大石头四周的泥土搅松。&amp;nbsp;媳妇早有心理准备，可能要挖一天吧，谁都没想到几分钟就把石头挖起来，看看大小，这颗石头没有想像的那么大，都是被那个巨大的外表蒙骗了。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：你抱着下坡的想法爬山，便无从爬上山去。如果你的世界沉闷而无望，那是因为你自己沉闷无望。改变你的世界，必先改变你自己的心态。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;10、追求忘我&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;不要把自己当做鼠，否则肯定被猫吃。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1858 年，瑞典的一个富豪人家生下了一个女儿。然而不久，孩子染患了一种无法解释的瘫痪症，丧失了走路的能力。&amp;nbsp;一次，女孩和家人一起乘船旅行。船长的太太给孩子讲船长有一只天堂鸟，她被这只鸟的描述迷住了，极想亲自看一看。于是保姆把孩子留在甲板上，自己去找船长。孩子耐不住性子等待，她要求船上的服务生立即带她去看天堂鸟。那服务生并不知道她的腿不能走路，而只顾带着她一道去看那只美丽的小鸟。奇迹发生了，孩子因为过度地渴望，竟忘我地拉住服务生的手，慢慢地走了起来。从此，孩子的病便痊愈了。女孩子长大后，又忘我地投入到文学创作中，最后成为第一位荣获诺贝尔文学奖的女性，也就是茜尔玛拉格萝芙。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：忘我是走向成功的一条捷径，只有在这种环境中，人才会超越自身的束缚，释放出最大的能量。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;11、乐观者与悲观者&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;乐观者在每次危难中都看到了机会，而悲观的人在每个机会中都看到了危难。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 父亲欲对一对孪生兄弟作&amp;#8220;性格改造&amp;#8221;，因为其中一个过分乐观，而另一个则过分悲观。一天，他买了许多色泽鲜艳的新玩具给悲观孩子，又把乐观孩子送进了一间堆满马粪的车房里。&amp;nbsp;第二天清晨，父亲看到悲观孩子正泣不成声，便问：&amp;#8220;为什么不玩那些玩具呢？&amp;#8221;&amp;nbsp;&amp;#8220;玩了就会坏的。&amp;#8221;孩子仍在哭泣。&amp;nbsp;父亲叹了口气，走进车房，却发现那乐观孩子正兴高采烈地在马粪里掏着什么。&amp;nbsp;&amp;#8220;告诉你，爸爸。&amp;#8221;那孩子得意洋洋地向父亲宣称，&amp;#8220;我想马粪堆里一定还藏着一匹小马呢！&amp;#8221;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：乐观者与悲观者之间，其差别是很有趣的：乐观者看到的是油炸圈饼，悲观者看到的是一个窟窿。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;12、勇于冒险&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;对于那些害怕危险的人，危险无处不在。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 有一天，龙虾与寄居蟹在深海中相遇，寄居蟹看见龙虾正把自己的硬壳脱掉，只露出娇嫩的身躯。寄居蟹非常紧张地说：&amp;#8220;龙虾，你怎可以把唯一保护自己身躯的硬壳也放弃呢？难道你不怕有大鱼一口把你吃掉吗？以你现在的情况来看，连急流也会把你冲到岩石去，到时你不死才怪呢？&amp;#8221;&amp;nbsp;龙虾气定神闲地回答：&amp;#8220;谢谢你的关心，但是你不了解，我们龙虾每次成长，都必须先脱掉旧壳，才能生长出更坚固的外壳，现在面对的危险，只是为了将来发展得更好而作出准备。&amp;#8221;&amp;nbsp;寄居蟹细心思量一下，自己整天只找可以避居的地方，而没有想过如何令自己成长得更强壮，整天只活在别人的护荫之下，难怪永远都限制自己的发展。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：每个人都有一定的安全区，你想跨越自己目前的成就，请不要划地自限，勇于接受挑战充实自我，你一定会发展得比想像中更好。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;13、再试一次&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;什么东西比石头还硬，或比水还软？然而软水却穿透了硬石，坚持不懈而已。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 有个年轻人去微软公司应聘，而该公司并没有刊登过招聘广告。见总经理疑惑不解，年轻人用不太娴熟的英语解释说自己是碰巧路过这里，就贸然进来了。总经理感觉很新鲜，破例让他一试。面试的结果出人意料，年轻人表现糟糕。他对总经理的解释是事先没有准备，总经理以为他不过是找个托词下台阶，就随口应道：&amp;#8220;等你准备好了再来试吧&amp;#8221;。&amp;nbsp;一周后，年轻人再次走进微软公司的大门，这次他依然没有成功。但比起第一次，他的表现要好得多。而总经理给他的回答仍然同上次一样：&amp;#8220;等你准备好了再来试。&amp;#8221;就这样，这个青年先后5次踏进微软公司的大门，最终被公司录用，成为公司的重点培养对象。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：也许，我们的人生旅途上沼泽遍布，荆棘丛生；也许我们追求的风景总是山重水复，不见柳暗花明；也许，我们前行的步履总是沉重、蹒跚；也许，我们需要在黑暗中摸索很长时间，才能找寻到光明；也许，我们虔诚的信念会被世俗的尘雾缠绕，而不能自由翱翔；也许，我们高贵的灵魂暂时在现实中找不到寄放的净土&amp;#8230;&amp;#8230;那么，我们为什么不可以以勇敢者的气魄，坚定而自信地对自己说一声&amp;#8220;再试一次！&amp;#8221;&amp;nbsp;再试一次，你就有可能达到成功的彼岸！&amp;nbsp;&lt;BR&gt;&lt;BR&gt;14、天道酬勤&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;没有人能只依靠天分成功。上帝给予了天分，勤奋将天分变为天才。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 曾国藩是中国历史上最有影响的人物之一，然他小时候的天赋却不高。有一天在家读书，对一篇文章重复不知道多少遍了，还在朗读，因为，他还没有背下来。这时候他家来了一个贼，潜伏在他的屋檐下，希望等读书人睡觉之后捞点好处。可是等啊等，就是不见他睡觉，还是翻来复去地读那篇文章。贼人大怒，跳出来说，&amp;#8220;这种水平读什么书？&amp;#8221;然后将那文章背诵一遍，扬长而去！&amp;nbsp;贼人是很聪明，至少比曾先生要聪明，但是他只能成为贼，而曾先生却成为毛泽东主席都钦佩的人：&amp;#8220;近代最有大本夫源的人。&amp;#8221;&amp;nbsp;&amp;#8220;勤能补拙是良训，一分辛苦一分才。&amp;#8221;那贼的记忆力真好，听过几遍的文章都能背下来，而且很勇敢，见别人不睡觉居然可以跳出来 &amp;#8220;大怒&amp;#8221;，教训曾先生之后，还要背书，扬长而去。但是遗憾的是，他名不经传，曾先生后来启用了一大批人才，按说这位贼人与曾先生有一面之交，大可去施展一二，可惜，他的天赋没有加上勤奋，变得不知所终。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：伟大的成功和辛勤的劳动是成正比的，有一分劳动就有一分收获，日积月累，从少到多，奇迹就可以创造出来。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;15、好学不倦&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;只有一个洞穴的老鼠很快被捉。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;在一个漆黑的晚上，老鼠首领带领着小老鼠出外觅食，在一家人的厨房内，垃圾桶之中有很多剩余的饭菜，对于老鼠来说，就好像人类发现了宝藏。&amp;nbsp;正当一大群老鼠在垃圾桶及附近范围大挖一顿之际，突然传来了一阵令它们肝胆俱裂的声音，那就是一头大花猫的叫声。它们震惊之余，更各自四处逃命，但大花猫绝不留情，不断穷追不舍，终于有两只小老鼠走避不及，被大花猫捉到，正要向它们吞噬之际，突然传来一连串凶恶的狗吠声，令大花猫手足无措，狼狈逃命。&amp;nbsp;大花猫走后，老鼠首领施施然从垃圾桶后面走出来说：&amp;#8220;我早就对你们说，多学一种语言有利无害，这次我就因而救了你们一命。&amp;#8221;&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：&amp;#8220;多一门技艺，多一条路。&amp;#8221;不断学习实在是成功人士的终身承诺。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;16、居安思危&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;洪水未到先筑堤，豺狼未来先磨刀。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 一只野狼卧在草上勤奋地磨牙，狐狸看到了，就对它说：&amp;#8220;天气这么好，大家在休息娱乐，你也加入我们队伍中吧！&amp;#8221;野狼没有说话，继续磨牙，把它的牙齿磨得又尖又利。狐狸奇怪地问道：&amp;#8220;森林这么静，猎人和猎狗已经回家了，老虎也不在近处徘徊，又没有任何危险，你何必那么用劲磨牙呢？&amp;#8221;野狼停下来回答说：&amp;#8220;我磨牙并不是为了娱乐，你想想，如果有一天我被猎人或老虎追逐，到那时，我想磨牙也来不及了。而平时我就把牙磨好，到那时就可以保护自己了。&amp;#8221;&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 温馨提示：做事应该未雨绸缪，居安思危，这样在危险突然降临时，才不至于手忙脚乱。&amp;#8220;书到用时方恨少&amp;#8221;，平常若不充实学问，临时抱佛脚是来不及的。也有人抱怨没有机会，然而当升迁机会来临时，再叹自己平时没有积蓄足够的学识与能力，以致不能胜任，也只好后悔莫及。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;17、困境即是赐予&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;一个障碍，就是一个新的已知条件，只要愿意，任何一个障碍，都会成为一个超越自我的契机。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 有一天，素有森林之王之称的狮子，来到了天神面前：&amp;#8220;我很感谢你赐给我如此雄壮威武的体格、如此强大无比的力气，让我有足够的能力统治这整座森林。&amp;#8221;&amp;nbsp;天神听了，微笑地问：&amp;#8220;但是这不是你今天来找我的目的吧！看起来你似乎为了某事而困扰呢！&amp;#8221;&amp;nbsp;狮子轻轻吼了一声，说：&amp;#8220;天神真是了解我啊！我今天来的确是有事相求。因为尽管我的能力再好，但是每天鸡鸣的时候，我总是会被鸡鸣声给吓醒。神啊！祈求您，再赐给我一个力量，让我不再被鸡鸣声给吓醒吧！&amp;#8221;&amp;nbsp;天神笑道：&amp;#8220;你去找大象吧，它会给你一个满意的答复的。&amp;#8221;&amp;nbsp;狮子兴匆匆地跑到湖边找大象，还没见到大象，就听到大象跺脚所发出的&amp;#8220;砰砰&amp;#8221;响声。&amp;nbsp;狮子加速地跑向大象，却看到大象正气呼呼地直跺脚。&amp;nbsp;狮子问大象：&amp;#8220;你干嘛发这么大的脾气？&amp;#8221;&amp;nbsp;大象拼命摇晃着大耳朵，吼着：&amp;#8220;有只讨厌的小蚊子，总想钻进我的耳朵里，害我都快痒死了。&amp;#8221;&amp;nbsp;狮子离开了大象，心里暗自想着：&amp;#8220;原来体型这么巨大的大象，还会怕那么瘦小的蚊子，那我还有什么好抱怨呢？毕竟鸡鸣也不过一天一次，而蚊子却是无时无刻地骚扰着大象。这样想来，我可比他幸运多了。&amp;#8221;&amp;nbsp;狮子一边走，一边回头看着仍在跺脚的大象，心想：&amp;#8220;天神要我来看看大象的情况，应该就是想告诉我，谁都会遇上麻烦事，而它并无法帮助所有人。既然如此，那我只好靠自己了！反正以后只要鸡鸣时，我就当做鸡是在提醒我该起床了，如此一想，鸡鸣声对我还算是有益处呢？&amp;#8221;&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：在人生的路上，无论我们走得多么顺利，但只要稍微遇上一些不顺的事，就会习惯性地抱怨老天亏待我们，进而祈求老天赐给我们更多的力量，帮助我们度过难关。但实际上，老天是最公平的，就像它对狮子和大象一样，每个困境都有其存在的正面价值。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;18、永远的一课&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;面对困难，许多人戴了放大镜，但和困难拼搏一番，你会觉得，困难不过如此。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 那天的风雪真暴，外面像是有无数发疯的怪兽在呼啸厮打。雪恶狠狠地寻找袭击的对象，风呜咽着四处搜索。&amp;nbsp;大家都在喊冷，读书的心思似乎已被冻住了。一屋的跺脚声。&amp;nbsp;鼻头红红的欧阳老师挤进教室时，等待了许久的风席卷而入，墙壁上的《中学生守则》一鼓一顿，开玩笑似的卷向空中，又一个跟头栽了下来。&amp;nbsp;往日很温和的欧阳老师一反常态：满脸的严肃庄重甚至冷酷，一如室外的天气。&amp;nbsp;乱哄哄的教室静了下来，我们惊异地望着欧阳老师。&amp;nbsp;&amp;#8220;请同学们穿上胶鞋，我们到操场上去。&amp;#8221;&amp;nbsp;几十双眼睛在问。&amp;nbsp;&amp;#8220;因为我们要在操场上立正五分钟。&amp;#8221;&amp;nbsp;即使欧阳老师下了&amp;#8220;不上这堂课，永远别上我的课&amp;#8221;的恐吓之词，还是有几个娇滴滴的女生和几个很横的男生没有出教室。&amp;nbsp;操场在学校的东北角，北边是空旷的菜园，再北是一口大塘。&amp;nbsp;那天，操场、菜园和水塘被雪连成了一个整体。&amp;nbsp;矮了许多的篮球架被雪团打得&amp;#8220;啪啪&amp;#8221;作响，卷地而起的雪粒雪团呛得人睁不开眼张不开口。脸上像有无数把细窄的刀在拉在划，厚实的衣服像铁块冰块，脚像是踩在带冰碴的水里。&amp;nbsp;我们挤在教室的屋檐下，不肯迈向操场半步。&amp;nbsp;欧阳老师没有说什么，面对我们站定，脱下羽绒衣，线衣脱到一半，风雪帮他完成了另一半。&amp;#8220;在操场上去，站好！&amp;#8221;欧阳老师脸色苍白，一字一顿地对我们说。&amp;nbsp;谁也没有吭声，我们老老实实地到操场排好了三列纵队。&amp;nbsp;瘦削的欧阳老师只穿一件白衬褂，衬褂紧裹着的他更显单薄。&amp;nbsp;后来，我们规规矩矩地在操场站了五分多钟。&amp;nbsp;在教室时，同学们都以为自己敌不过那场风雪，事实上，叫他们站半个小时，他们顶得住，叫他们只穿一件衬衫，他们也顶得住。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：正如生命中的许多伤痛一样，其实并不如自己想像的那么严重。如果不把它当回事，它是不会很痛的。你觉得痛，那是因为你自以为伤口在痛，害怕伤口的痛。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;19、大海里的船&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;在大海上航行的船没有不带伤的。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 英国劳埃德保险公司曾从拍卖市场买下一艘船，这艘船1894年下水，在大西洋上曾138次遭遇冰山，116次触礁，13次起火，207次被风暴扭断桅杆，然而它从没有沉没过。&amp;nbsp;劳埃德保险公司基于它不可思议的经历及在保费方面给带来的可观收益，最后决定把它从荷兰买回来捐给国家。现在这艘船就停泊在英国萨伦港的国家船舶博物馆里。&amp;nbsp;不过，使这艘船名扬天下的却是一名来此观光的律师。当时，他刚打输了一场官司，委托人也于不久前自杀了。尽管这不是他的第一次失败辩护，也不是他遇到的第一例自杀事件，然而，每当遇到这样的事情，他总有一种负罪感。他不知该怎样安慰这些在生意场上遭受了不幸的人。&amp;nbsp;当他在萨伦船舶博物馆看到这艘船时，忽然有一种想法，为什么不让他们来参观参观这艘船呢？于是，他就把这艘船的历史抄下来和这艘船的照片一起挂在他的律师事务所里，每当商界的委托人请他辩护，无论输赢，他都建议他们去看看这艘船。&amp;nbsp;它使我们知道：在大海上航行的船没有不带伤的。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：虽然屡遭挫折，却能够坚强地百折不挠地挺住，这就是成功的秘密。&lt;BR&gt;&lt;BR&gt;20、驴的哲学&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;人生必须渡过逆流才能走向更高的层次，最重要的是永远看得起自己。&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 有一天某个农夫的一头驴子，不小心掉进一口枯井里，农夫绞尽脑汁想办法救出驴子，但几个小时过去了，驴子还在井里痛苦地哀嚎着。&amp;nbsp;最后，这位农夫决定放弃，他想这头驴子年纪大了，不值得大费周章去把它救出来，不过无论如何，这口井还是得填起来。于是农夫便请来左邻右舍帮忙一起将井中的驴子埋了，以免除它的痛苦。&amp;nbsp;农夫的邻居们人手一把铲子，开始将泥土铲进枯井中。当这头驴子了解到自己的处境时，刚开始哭得很凄惨。但出人意料的是，一会儿之后这头驴子就安静下来了。农夫好奇地探头往井底一看，出现在眼前的景象令他大吃一惊：&amp;nbsp;当铲进井里的泥土落在驴子的背部时，驴子的反应令人称奇──它将泥土抖落在一旁，然后站到铲进的泥土堆上面！&amp;nbsp;就这样，驴子将大家铲倒在它身上的泥土全数抖落在井底，然后再站上去。很快地，这只驴子便得意地上升到井口，然后在众人惊讶的表情中快步地跑开了！&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;温馨提示：就如驴子的情况，在生命的旅程中，有时候我们难免会陷入&amp;#8220;枯井&amp;#8221;里，会被各式各样的&amp;#8220;泥沙&amp;#8221;倾倒在我们身上，而想要从这些&amp;#8220;枯井&amp;#8221;脱困的秘诀就是：将&amp;#8220;泥沙&amp;#8221;抖落掉，然后站到上面去！&lt;/SPAN&gt;&lt;img src ="http://softdream.cndev.org/aggbug/51942.aspx" width = "1" height = "1" /&gt;</content><wfw:comment>http://softdream.cndev.org/comments/51942.aspx</wfw:comment><slash:comments>3</slash:comments><wfw:commentRss>http://softdream.cndev.org/comments/commentRss/51942.aspx</wfw:commentRss><trackback:ping>http://softdream.cndev.org/services/trackbacks/51942.aspx</trackback:ping></entry><entry><title>不是拜金主义者</title><link rel="alternate" type="text/html" href="http://softdream.cndev.org/archive/2007/01/29/50590.aspx" /><id>http://softdream.cndev.org/archive/2007/01/29/50590.aspx</id><created>2007-01-29T10:32:00Z</created><issued>2007-01-29T02:32:00+08:00</issued><modified>2007-01-29T10:32:00Z</modified><content type="text/html" mode="escaped">The only key to the door of happness isn't money,but if you have enough money ,then you can order a key.

金钱不是幸福之门的唯一钥匙，但是如果你拥有足够的金钱，你就掌握了一把钥匙。


&lt;img src ="http://softdream.cndev.org/aggbug/50590.aspx" width = "1" height = "1" /&gt;</content><wfw:comment>http://softdream.cndev.org/comments/50590.aspx</wfw:comment><slash:comments>3</slash:comments><wfw:commentRss>http://softdream.cndev.org/comments/commentRss/50590.aspx</wfw:commentRss><trackback:ping>http://softdream.cndev.org/services/trackbacks/50590.aspx</trackback:ping></entry><entry><title>Delphi的组件读写机制(1)[转载]</title><link rel="alternate" type="text/html" href="http://softdream.cndev.org/archive/2007/01/27/50583.aspx" /><id>http://softdream.cndev.org/archive/2007/01/27/50583.aspx</id><created>2007-01-27T20:34:00Z</created><issued>2007-01-27T12:34:00+08:00</issued><modified>2007-01-27T20:34:00Z</modified><content type="text/html" mode="escaped">Delphi 的消息

目  录
===============================================================================
  一个 GUI Application 的执行过程：消息循环的建立
  TWinControl.Create、注册窗口过程和创建窗口
  补充知识：TWndMethod 概述
  VCL 的消息处理从 TWinControl.MainWndProc 开始
  TWinControl.WndProc
  TControl.WndProc
  TObject.Dispatch
  TWinControl.DefaultHandler
  TControl.Perform 和 TWinControl.Broadcast
  TWinControl.WMPaint
  以 TWinControl 为例描述消息传递的路径
===============================================================================

 

正  文
===============================================================================
  一个 GUI Application 的执行过程：消息循环的建立
===============================================================================
通常一个 Win32 GUI 应用程序是围绕着消息循环的处理而运行的。在一个标准的 C 语言 Win32 GUI 程序中，主程序段都会出现以下代码：

while (GetMessage(&amp;msg, NULL, 0, 0))  // GetMessage 第二个参数为 NULL，
                                      // 表示接收所有应用程序产生的窗口消息
{
    TranslateMessage(&amp;msg);      // 转换消息中的字符集
    DispatchMessage(&amp;msg);       // 把 msg 参数传递给 lpfnWndProc
}

lpfnWndProc 是 Win32 API 定义的回调函数的地址，其原型如下：
int __stdcall WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

Windows 回调函数(callback function) 也通常被称为窗口过程(window procedure)，本文随意使用这两个名称，代表同样的意义。

应用程序使用 GetMessage 不断检查应用程序的消息队列中是否有消息到达。如果发现了消息，则调用 TranslateMessage。TranslateMessage 主要是做字符消息本地化的工作，不是关键的函数。然后调用 DispatchMessage(&amp;msg)。DispatchMessage(&amp;msg) 使用 msg 为参数调用已创建的窗口的回调函数(WndClass.lpfnWndProc)。lpfnWndProc 是由用户设计的消息处理方法。

当 GetMessage 在应用程序的消息队列中发现一条 WM_QUIT 消息时，GetMessage 返回 False，消息循环才告结束，通常应用程序在这时清理资源后也结束运行。

使用最原始的 Win32 API 编写的应用程序的执行过程是很容易理解的，但是用 Delphi VCL 组件封装消息系统，并不是容易的事。首先，Delphi 是一种面向对象的程序设计语言，不但要把 Win32 的消息处理过程封装在对象的各个继承类中，让应用程序的使用者方便地调用，也要让 VCL 组件的开发者有拓展消息处理的空间。其次，Delphi 的对象模型中所有的类方法都是对象相关的(也就是传递了一个隐含的参数 Self)，所以 Delphi 对象的方法不能直接被 Windows 回调。Delphi VCL 必须用其他的方法让 Windows 回调到对象的消息处理函数。

让我们跟踪一个标准的 Delphi Application 的执行过程，查看 Delphi 是如何开始一个消息循环的。

program Project1;
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

在 Project1 的 Application.Initialize 之前，Delphi 编译器会自动插入一行代码：
SysInit._InitExe。_InitExe 主要是初始化 HInstance 和模块信息表等。然后 _InitExe 调用 System._StartExe。System._StartExe 调用 System.InitUnit；System.InitUnit 调用项目中所有被包含单元的 Initialization 段的代码；其中有 Controls.Initialization 段，这个段比较关键。在这段代码中建立了 Mouse、Screen 和 Application 三个关键的全局对象。

Application.Create 调用 Application.CreateHandle。Application.CreateHandle 建立一个窗口，并设置 Application.WndProc 为回调函数(这里使用了 MakeObjectInstance 方法，后面再谈)。Application.WndProc 主要处理一些应用程序级别的消息。

我第一次跟踪应用程序的执行时没有发现 Application 对象的创建过程，原来在 SysInit._InitExe 中被隐含调用了。如果你想跟踪这个过程，不要设置断点，直接按 F7 就发现了。

然后才到了 Project1 的第 1 句： Application.Initialize;
这个函数只有一句代码：

  if InitProc &lt;&gt; nil then TProcedure(InitProc);

也就是说如果用户想在应用程序的执行前运行一个特定的过程，可以设置 InitProc 指向该过程。(为什么用户不在 Application.Initialize 之前或在单元的 Initliazation 段中直接运行这个特定的过程呢？一个可能的答案是：如果元件设计者希望在应用程序的代码执行之前执行一个过程，并且这个过程必须在其他单元的 Initialization 执行完成之后执行[比如说 Application 对象必须创建]，则只能使用这个过程指针来实现。)

然后是 Project1 的第 2 句：     Application.CreateForm(TForm1, Form1);
这句的主要作用是创建 TForm1 对象，然后把 Application.MainForm 设置为 TForm1。

最后是 Project1 的第 3 句：     Application.Run;
TApplication.Run 调用 TApplication.HandleMessage 处理消息。Application.HandleMessage 的代码也只有一行：

  if not ProcessMessage(Msg) then Idle(Msg);

TApplication.ProcessMessage 才真正开始建立消息循环。ProcessMessage 使用 PeekMessage API 代替 GetMessage 获取消息队列中的消息。使用 PeekMessage 的好处是 PeekMessage 发现消息队列中没有消息时会立即返回，这样就为 HandleMessage 函数执行 Idle(Msg) 提供了依据。

ProcessMessage 在处理消息循环的时候还特别处理了 HintMsg、MDIMsg、KeyMsg、DlgMsg 等特殊消息，所以在 Delphi 中很少再看到纯 Win32 SDK 编程中的要区分 Dialog Window、MDI Window 的处理，这些都被封装到 TForm 中去了(其实 Win32 SDK 中的 Dialog 也是只是 Microsoft 专门写了一个窗口过程和一组函数方便用户界面的设计，其内部运作过程与一个普通窗口无异)。

function TApplication.ProcessMessage(var Msg: TMsg): Boolean;
var
  Handled: Boolean;
begin
  Result := False;
  if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then  // 从消息队列获取消息
  begin
    Result := True;
    if Msg.Message &lt;&gt; WM_QUIT then
    begin
      Handled := False;  // Handled 表示 Application.OnMessage 是否已经处理过
                         // 当前消息。
                         // 如果用户设置了Application.OnMessage 事件句柄，
                         // 则先调用 Application.OnMessage
      if Assigned(FOnMessage) then FOnMessage(Msg, Handled);
      if not IsHintMsg(Msg) and not Handled and not IsMDIMsg(Msg) and
        not IsKeyMsg(Msg) and not IsDlgMsg(Msg) then
                         // 思考：not Handled 为什么不放在最前？
      begin
        TranslateMessage(Msg);                // 处理字符转换
        DispatchMessage(Msg);                 // 调用 WndClass.lpfnWndProc
      end;
    end
    else
      FTerminate := True;                     // 收到 WM_QUIT 时应用程序终止
                                              // (这里只是设置一个终止标记)
  end;                                                        
end;

从上面的代码来看，Delphi 应用程序的消息循环机制与标准 Win32 C 语言应用程序差不多。只是 Delphi 为了方便用户的使用设置了很多扩展空间，其副作用是消息处理会比纯 C Win32 API 调用效率要低一些。

===============================================================================
  TWinControl.Create、注册窗口过程和创建窗口
===============================================================================
上面简单讨论了一个 Application 的建立到形成消息循环的过程，现在的问题是 Delphi 控件是如何封装创建窗口这一过程的。因为只有建立了窗口，消息循环才有意义。

让我们先回顾 Delphi VCL中几个主要类的继承架框：
  TObject           所有对象的基类 
  TPersistent       所有具有流特性对象的基类
  TComponent        所有能放在 Delphi Form Designer 上的对象的基类
  TControl          所有可视的对象的基类
  TWinControl       所有具有窗口句柄的对象基类

Delphi 是从 TWinControl 开始实现窗口相关的元件。所谓窗口，对于程序设计者来说，就是一个窗口句柄 HWND。TWinControl 有一个 FHandle 私有成员代表当前对象的窗口句柄，通过 TWinControl.Handle 属性来访问。

我第一次跟踪 TWinControl.Create 过程时，竟然没有发现 CreateWindow API 被调用，说明 TWinControl 并不是在对象创建时就建立 Windows 窗口。如果用户使用 TWinControl.Create(Application) 以后，立即使用 Handle 访问窗口会出现什么情况呢？

答案在 TWinControl.GetHandle 中，Handle 是一个只读的窗口句柄：

  property TWinControl.Handle: HWnd read GetHandle;

TWinControl.GetHandle 代码的内容是：一旦用户要访问 FHandle 成员，TWinControl.HandleNeeded 就会被调用。HandleNeeded 首先判断 TWinControl.FHandle 是否是等于 0 (还记得吗？任何对象调用构造函数以后所有对象成员的内存都被清零)。如果 FHandle 不等于 0，则直接返回 FHandle；如果 FHandle 等于 0，则说明窗口还没有被创建，这时 HandleNeeded 自动调用 TWinControl.CreateHandle 来创建一个 Handle。但 CreateHandle 只是个包装函数，它首先调用 TWinControl.CreateWnd 来创建窗口，然后生成一些维护 VCL Control 运行的参数(我还没细看)。CreateWnd 是一个重要的过程，它先调用 TWinControl.CreateParams 设置创建窗口的参数。(CreateParams 是个虚方法，也就是说程序员可以重载这个函数，定义待建窗口的属性。) CreateWnd 然后调用 TWinControl.CreateWindowHandle。CreateWindowHandle 才是真正调用 CreateWindowEx API 创建窗口的函数。

够麻烦吧，我们可以抱怨 Borland 为什么把事情弄得这么复杂，但最终希望 Borland 这样设计自有它的道理。上面的讨论可以总结为 TWinControl 为了为了减少系统资源的占用尽量推迟建立窗口，只在某个方法需要调用到控件的窗口句柄时才真正创建窗口。这通常发生在窗口需要显示的时候。一个窗口是否需要显示常常发生在对 Parent 属性 (在TControl 中定义) 赋值的时候。设置 Parent 属性时，TControl.SetParent 方法会调用 TWinControl.RemoveControl 和 TWinControl.InsertControl 方法。InsertControl 调用 TWinControl.UpdateControlState。UpdateControlState 检查 TWinControl.Showing 属性来判断是否要调用 TWinControl.UpdateShowing。UpdateShowing 必须要有一个窗口句柄，因此调用 TWinControl.CreateHandle 来创建窗口。

不过上面说的这些，只是繁杂而不艰深，还有很多关键的代码没有谈到呢。

你可能发现有一个关键的东西被遗漏了，对，那就是窗口的回调函数。由于 Delphi 建立一个窗口的回调过程太复杂了(并且是非常精巧的设计)，只好单独拿出来讨论。

cheka 的《VCL窗口函数注册机制研究手记，兼与MFC比较》一文中对 VCL 的窗口回调实现进行了深入的分析，请参考：http://www.delphibbs.com/delphibbs/dispq.asp?lid=584889

我在此简单介绍回调函数在 VCL 中的实现：

TWinControl.Create 的代码中，第一句是 inherited，第二句是

  FObjectInstance := Classes.MakeObjectInstance(MainWndProc);

我想这段代码可能吓倒过很多人，如果没有 cheka 的分析，很多人难以理解。但是你不一定真的要阅读 MakeObjectInstance 的实现过程，你只要知道：

MakeObjectInstance 在内存中生成了一小段汇编代码，这段代码的内容就是一个标准的窗口过程。这段汇编代码中同时存储了两个参数，一个是 MainWndProc 的地址，一个是 Self (对象的地址)。这段汇编代码的功能就是使用 Self 参数调用 TWinControl.MainWndProc 函数。

MakeObjectInstance 返回后，这段代码的地址存入了 TWinControl.FObjectInstance 私有成员中。

这样，TWinControl.FObjectInstance 就可以当作标准的窗口过程来用。你可能认为 TWinControl 会直接把 TWinControl.FObjectInstance 注册为窗口类的回调函数(使用 RegisterClass API)，但这样做是不对的。因为一个 FObjectInstance 的汇编代码内置了对象相关的参数(对象的地址 Self)，所以不能用它作为公共的回调函数注册。TWinControl.CreateWnd 调用 CreateParams 获得要注册的窗口类的资料，然后使用 Controls.pas 中的静态函数 InitWndProc 作为窗口回调函数进行窗口类的注册。InitWndProc 的参数符合 Windows 回调函数的标准。InitWndProc 第一次被回调时就把新建窗口(注意不是窗口类)的回调函数替换为对象的 TWinControl.FObjectInstance (这是一种 Windows subclassing 技术)，并且使用 SetProp 把对象的地址保存在新建窗口的属性表中，供 Delphi 的辅助函数读取(比如 Controls.pas 中的 FindControl 函数)。

总之，TWinControl.FObjectInstance 最终是被注册为窗口回调函数了。

这样，如果 TWinControl 对象所创建的窗口收到消息后(形象的说法)，会被 Windows 回调 TWinControl.FObjectInstance，而 FObjectInstance 会呼叫该对象的 TWinControl.MainWndProc 函数。就这样 VCL 完成了对象的消息处理过程与 Windows 要求的回调函数格式差异的转换。注意，在转换过程中，Windows 回调时传递进来的第一个参数 HWND 被抛弃了。因此 Delphi 的组件必须使用 TWinControl.Handle (或 protected 中的 WindowHandle) 来得到这个参数。Windows 回调函数需要传回的返回值也被替换为 TMessage 结构中的最后一个字段 Result。

为了使大家更清楚窗口被回调的过程，我把从 DispatchMessage 开始到 TWinControl.MainWndProc 被调用的汇编代码(你可以把从 FObjectInstance.Code 开始至最后一行的代码看成是一个标准的窗口回调函数)：

DispatchMessage(&amp;Msg)    // Application.Run 呼叫 DispatchMessage 通知
                         // Windows 准备回调

Windows 准备回调 TWinControl.FObjectInstance 前在堆栈中设置参数：
            push LPARAM
            push WPARAM
            push UINT
            push HWND
            push (eip.Next)             ; 把Windows 回调前下一条语句的地址
                                        ; 保存在堆栈中
            jmp FObjectInstance.Code    ; 调用 TWinControl.FObjectInstance

FObjectInstance.Code 只有一句 call 指令:
call ObjectInstance.offset  
            push eip.Next
            jmp InstanceBlock.Code      ; 调用 InstanceBlock.Code

InstanceBlock.Code:
            pop ecx                     ; 将 eip.Next 的值存入 ecx, 用于
                                        ; 取 @MainWndProc 和 Self
            jmp StdWndProc              ; 跳转至 StdWndProc

StdWndProc 的汇编代码:
function StdWndProc(Window: HWND; Message, WParam: Longint;
  LParam: Longint): Longint; stdcall; assembler;
asm
            push ebp
            mov ebp, esp
        XOR     EAX,EAX
            xor eax, eax
        PUSH    EAX
            push eax                    ; 设置 Message.Result := 0
        PUSH    LParam                  ; 为什么 Borland 不从上面的堆栈中直接
            push dword ptr [ebp+$14]    ; 获取这些参数而要重新 push 一遍？
        PUSH    WParam                  ; 因为 TMessage 的 Result 是
            push dword ptr [ebp+$10]    ; 记录的最后一个字段，而回调函数的 HWND
        PUSH    Message                 ; 是第一个参数，没有办法兼容。
            push dword ptr [ebp+$0c]
        MOV     EDX,ESP
            mov edx, esp                ; 设置 Message 在堆栈中的地址为
                                        ; MainWndProc 的参数
        MOV     EAX,[ECX].Longint[4]
            mov eax, [ecx+$04]          ; 设置 Self 为 MainWndProc 的隐含参数
        CALL    [ECX].Pointer
            call dword ptr [ecx]        : 呼叫 TWinControl.MainWndProc(Self,
                                        ; @Message)
        ADD     ESP,12
            add esp, $0c
        POP     EAX
            pop eax
end;
            pop ebp
            ret $0010
            mov eax, eax

看不懂上面的汇编代码，不影响对下文讨论的理解。&lt;img src ="http://softdream.cndev.org/aggbug/50583.aspx" width = "1" height = "1" /&gt;</content><wfw:comment>http://softdream.cndev.org/comments/50583.aspx</wfw:comment><slash:comments>0</slash:comments><wfw:commentRss>http://softdream.cndev.org/comments/commentRss/50583.aspx</wfw:commentRss><trackback:ping>http://softdream.cndev.org/services/trackbacks/50583.aspx</trackback:ping></entry><entry><title>[转载]励志</title><link rel="alternate" type="text/html" href="http://softdream.cndev.org/archive/2006/12/23/50275.aspx" /><id>http://softdream.cndev.org/archive/2006/12/23/50275.aspx</id><created>2006-12-23T16:49:00Z</created><issued>2006-12-23T08:49:00+08:00</issued><modified>2006-12-23T16:49:00Z</modified><content type="text/html" mode="escaped">&lt;P&gt;&lt;FONT size=4&gt;&lt;FONT color=#ff0000&gt;每天，不管感觉如何，要强迫自己迅速起床，振作起来，以积极的心态面对生活，尽最大努力做每一件事。不要与那些无精打采、衣冠不整、喜欢自怨自艾的人打交道。&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;　　英国小说家萨克雷说：&amp;#8220;每个人的脸上都写着一个标志着信誉的字母。&amp;#8221;我们的外表就是自己最好的广告，如果衣冠不整，愁眉苦脸，在别人的眼中，我们的声誉就会大大降低。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT size=4&gt;　　&lt;FONT color=#ff0000&gt;想成就一番事业的年轻人，决不会因为自己的条件太有利了，就放松对自己的要求。优厚待遇和好处，只会使自己更有信心和力量去奋斗。他会充分利用自己的各种条件，增加自尊心，赢得成功。&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;　最愚蠢的莫过于早晨精神萎靡地去上班，做什么事都提不起兴趣，对工作毫无积极性和自主性，只是用外在的压力去强迫自己。这样的人是可悲的。&lt;BR&gt;&lt;BR&gt;　　&lt;FONT color=#ff0000&gt;无论何时，只要你生气、发牢骚或抱怨不休，你就会浪费体内的能量，扼杀自己的生机和活力，就像在你的情感水库的大坝上开了一道闸口。否则，完全可以用这些精力完善自我、造福社会。&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;　　每个人都应该有一间起居室，一个安静的角落，可以让自己静静地读书，反思过去、思考未来。只有这样，他才会不断成长。&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src ="http://softdream.cndev.org/aggbug/50275.aspx" width = "1" height = "1" /&gt;</content><wfw:comment>http://softdream.cndev.org/comments/50275.aspx</wfw:comment><slash:comments>2</slash:comments><wfw:commentRss>http://softdream.cndev.org/comments/commentRss/50275.aspx</wfw:commentRss><trackback:ping>http://softdream.cndev.org/services/trackbacks/50275.aspx</trackback:ping></entry><entry><title>宾馆惊魂</title><link rel="alternate" type="text/html" href="http://softdream.cndev.org/archive/2006/12/23/50273.aspx" /><id>http://softdream.cndev.org/archive/2006/12/23/50273.aspx</id><created>2006-12-23T10:52:00Z</created><issued>2006-12-23T02:52:00+08:00</issued><modified>2006-12-23T10:52:00Z</modified><content type="text/html" mode="escaped">&lt;P&gt;　　这，是一个真实的故事。&lt;BR&gt;　　就发生在清晨，12.22日。&lt;BR&gt;本人一直有一个毛病，就是睡觉不关门。这个习惯是今年夏天养成的。因为天气特别热，而我的房子又只有一个向阳的窗，再就是向东开的门，没有其它可以与外界交流空气的通道了，所以每到了夏夜房间里就像一个蒸笼一样，比外面还要高四五度。我总是习惯先放放风再进去睡觉，而且把房门打开，这样就可以有流通的空气了。另外，我的房东也比较尽心，而且邻居们也都处得不错，在这里是比较安全的，可以放心大胆地开门睡觉。久而久之，我也就习惯了。所以，即使在外面出差，有时候也会忘记关门。&lt;BR&gt;　　昨夜回宾馆较晚，洗了个澡跑到被窝里睡不着，就把没有完成的工作拿出来接着做，不知不觉已经过了零点。时间不早了，就把本本往桌子上一放就睡了，完全忘记了门的事情。早上正睡得迷糊呢，好像听见自己房门响了，接着有进来的脚步声，于是勉强睁开眼，并问了声&amp;#8220;谁吖？&amp;#8221;此时进来的黑影刚走到偶床前，正想向偶的衣服奔去呢，听到这话呆了一下，问到，这是&amp;#8220;张军&amp;#8221;么？我沉声答到&amp;#8220;不是&amp;#8221;，黑影没有迟疑，转身走了。&lt;BR&gt;偶也没多想，倒头继续睡。一直睡到七点多偶经理开车来接偶。&lt;BR&gt;把这事儿告诉他，他说，算你命大，他没拿刀子。想想也是，以后应该注意了。万一他有凶器，偶就完蛋了。&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://softdream.cndev.org/aggbug/50273.aspx" width = "1" height = "1" /&gt;</content><wfw:comment>http://softdream.cndev.org/comments/50273.aspx</wfw:comment><slash:comments>7</slash:comments><wfw:commentRss>http://softdream.cndev.org/comments/commentRss/50273.aspx</wfw:commentRss><trackback:ping>http://softdream.cndev.org/services/trackbacks/50273.aspx</trackback:ping></entry><entry><title>生活小忆</title><link rel="alternate" type="text/html" href="http://softdream.cndev.org/archive/2006/12/15/50139.aspx" /><id>http://softdream.cndev.org/archive/2006/12/15/50139.aspx</id><created>2006-12-15T22:43:00Z</created><issued>2006-12-15T14:43:00+08:00</issued><modified>2006-12-15T22:43:00Z</modified><content type="text/html" mode="escaped">&lt;P&gt;话说2005年的冬天,俺是夏天来京的,所以除了几身夏衣外,别的衣裳都不曾带来。冬天来了秋天买的一个薄被子已经抵挡不住寒气的侵袭，让俺每个夜晚都在颤抖中醒来－－当时曾以寒号鸟自比：&amp;#8220;寒风冻死我，明天就垒窝！&amp;#8221;，可是忘性奇大的俺总是在舒服地过了一个白天，回到窝里的时候才悔恨万分，一定要记得去买被子。&lt;BR&gt;　　于是在某个下了班的下午，终于没有再忘记这件事情，冲出大厦门口，直奔中关村的&amp;#8220;物美&amp;#8221;。此时它刚开业不久，俺在一个偶然的机会办了一张它的会员卡，正好想试一试。买东西过程简单至极。到了床上用品区，一看就看到了这个被子，第一感觉就是够厚，盖上肯定不用再受冻了。马上过去拿下，并顺手搞了一个被罩。&lt;BR&gt;　　踏上回程的车，人好多，好挤。售票员见偶拿着被子，说占用了0.17平米的地儿要为被子买票，并把被子放到售票员走动的小过道里。偶一一照办，并挤到售票员身边站着。不知道什么时候，又上来一个ＭＭ，也拿了一个被子。车已经上不来人了，遇站也不怎么停，售票员（是个中看妇女）没什么事儿，就和这也ＭＭ攀谈起来。&lt;BR&gt;新买的被子？多少钱啊？哪一种啊？七孔被？好处是&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;XXX地儿卖得便宜，质量又好&amp;#8230;&amp;#8230;&amp;#8230;&lt;BR&gt;买被子的ＭＭ也是学识渊博，侃侃而谈。&lt;BR&gt;其间售票员大姐问了一句，你那是什么样的被子？俺约模记得标签上写的好像是九孔被。就说是&amp;#8220;九孔被&amp;#8221;。&lt;BR&gt;在梳理了所有的关于&amp;#8220;七孔被&amp;#8221;的线索后，售票员大姐脸转向俺问到你呢？俺明白，大姐给了俺一个发表高见的机会，只是俺什么都不知道啊。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 看着她真诚的眼晴，足足有十秒，连大家都一起看俺，看来一定得说得什么了。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 于是以十二万分的诚意告诉她：俺不知道&amp;#8212;&amp;#8212;俺只是拿上，付款&amp;#8212;&amp;#8212;最后走人。整个过程用了不过五分钟多一点。&lt;/P&gt;
&lt;P&gt;沉默&amp;#8230;&amp;#8230;沉默&amp;#8230;&amp;#8230;一会儿，俺的周围爆发了一片笑声。&lt;/P&gt;&lt;img src ="http://softdream.cndev.org/aggbug/50139.aspx" width = "1" height = "1" /&gt;</content><wfw:comment>http://softdream.cndev.org/comments/50139.aspx</wfw:comment><slash:comments>6</slash:comments><wfw:commentRss>http://softdream.cndev.org/comments/commentRss/50139.aspx</wfw:commentRss><trackback:ping>http://softdream.cndev.org/services/trackbacks/50139.aspx</trackback:ping></entry><entry><title>[转载]生死两重天</title><link rel="alternate" type="text/html" href="http://softdream.cndev.org/archive/2006/12/12/50059.aspx" /><id>http://softdream.cndev.org/archive/2006/12/12/50059.aspx</id><created>2006-12-12T12:17:00Z</created><issued>2006-12-12T04:17:00+08:00</issued><modified>2006-12-13T19:20:00Z</modified><content type="text/html" mode="escaped">走了！在照亮了我的生命以后。&lt;BR&gt;&lt;BR&gt;在一个小火柴盒里我们共度了无数个日日夜夜，太多太多的甜蜜幸福我们都体验过，而今剩下的只有无边的痛。什么才是爱？想过无数次这个愚蠢的问题，想不出答案。也许本来就没有答案的，或许爱只是一种习惯。在这一刻，我想爱是彻骨的痛，这一刻，已是生死两重天。
&lt;img src.="http://www.cndev.org/.imgdb/sn10097/GUID-EDAE8A0D-3051-420F-B898-04B5CFE51B57.jpg"&gt;
看了这幅片子，有一种强烈的震憾。如此平凡的东西，经过看似随意的摆放，显出了强烈的对比效果。难道&amp;#8212;&amp;#8212;这，就是所谓的灵感？ 
呵呵，为拥有自己的单反而努力！&lt;img src ="http://softdream.cndev.org/aggbug/50059.aspx" width = "1" height = "1" /&gt;</content><wfw:comment>http://softdream.cndev.org/comments/50059.aspx</wfw:comment><slash:comments>2</slash:comments><wfw:commentRss>http://softdream.cndev.org/comments/commentRss/50059.aspx</wfw:commentRss><trackback:ping>http://softdream.cndev.org/services/trackbacks/50059.aspx</trackback:ping></entry><entry><title>归心似剑</title><link rel="alternate" type="text/html" href="http://softdream.cndev.org/archive/2006/12/06/50011.aspx" /><id>http://softdream.cndev.org/archive/2006/12/06/50011.aspx</id><created>2006-12-06T21:51:00Z</created><issued>2006-12-06T13:51:00+08:00</issued><modified>2006-12-06T21:55:00Z</modified><content type="text/html" mode="escaped">&lt;P&gt;关于房东&lt;/P&gt;
&lt;P&gt;去年呼市的房价还比较低，我们因为这边的项目租了一个二居室，才500/月，很是便宜。房子是一个学校的家属楼，居客户办公地点直线距离不到100米。房东是个退休多年的老太太，刚开始接触的时候感觉是个热心肠，看我们每天早出晚归，还说要给我们做饭&amp;#8212;&amp;#8212;纯属站着说话不腰痛&amp;#8212;&amp;#8212;跟发高烧说胡话一样。纯粹是面子上的功夫，却极力显的多实在&amp;#8212;&amp;#8212;我在想如果我们真答应下来，在她笑靥如花的脸上，会不会有一丝丝尴尬？&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 随着项目的进展，租的房子有时候几个月没人来，有时候来呆个几天就走，即使是在那里住的时候，也是早上出发，晚上一般加班到11、12点很晚才回去睡觉，大部分时候都是空着的。老太太拿不准我们什么时候在，什么时候不在。于是经常告诉我们：你们来的时候打声招呼，走的时候也打声招呼。偶不理她。心想我们公司租你房子给你钱就行了呗，你管我们有没有人！这倒好，免费送一管家。真受不了。&lt;/P&gt;
&lt;P&gt;后来偶又来过几次，从来不理会这个茬，丫居然给我们经理打电话说我们让她担惊受怕。！经理给我打电话说，这次你走的时候，打声招呼吧，她以为咱们是搞地下工作的。来无影去无踪啊。既然经理吩咐下来那就打吧。一招呼，噢，原来是找不着我们要卫生费、电视费啊。问题是明明两个房间里一个空着什么都没有，另一间有我们哥几个出差时来住的大板床，一个电水壶，还没有杯子；什么时候有过电视？也罢就交吧。谁让咱们租的时候没说清楚。然后要发票啊，居然把她自己家的发票拿出来了！偶晕倒&amp;#8230;&amp;#8230;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 今日又接经理电话&amp;#8230;&amp;#8230;12.18房子到期，老太太说啥也不租给我们了，说是我们让她担惊受怕。经理吩咐这次回去的时候把公司的东西找地方安置下，提前把钥匙还她吧&amp;#8212;&amp;#8212;偶好高兴，终于可以轻松了。&lt;/P&gt;
&lt;P&gt;告诉客户我们要换租房了，客户说：她不租是因为呼市的房价涨了，房租也涨了。她的房租要涨价了&amp;#8212;&amp;#8212;原来如此。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12.07&amp;nbsp; 谨记&lt;/P&gt;
&lt;P&gt;本来定好今天或明天回北京的计划被破坏了。极度不爽；于是偶赶紧去买好了周五晚上的车票，到时候不让走也不行了，嘿嘿。&lt;/P&gt;&lt;img src ="http://softdream.cndev.org/aggbug/50011.aspx" width = "1" height = "1" /&gt;</content><wfw:comment>http://softdream.cndev.org/comments/50011.aspx</wfw:comment><slash:comments>5</slash:comments><wfw:commentRss>http://softdream.cndev.org/comments/commentRss/50011.aspx</wfw:commentRss><trackback:ping>http://softdream.cndev.org/services/trackbacks/50011.aspx</trackback:ping></entry></feed>