<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
	<title>富翁笔记 - Delphibbs.com Blogs</title>
	<link>http://www.delphibbs.com/keylife/iblog_list.asp</link>
	<description>富翁笔记是大富翁论坛提供的 blog 服务。版权声明：富翁笔记所有文章的版权和版权责任属于作者本人，未经许可严禁任何形式的复制和转载，违者将负法律责任。</description>

	<generator>RSS Generated by Delphibbs.com-BLog</generator>

<item>
	<title><![CDATA[OCP必备知识]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30908</link> 
	<pubDate>2009-1-5 17:16:01</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30908</guid>
	<description><![CDATA[Oracle数据库管理：<br>　　&#183; Oracle 数据库体系结构 <br>　　&#183; 创建一个能正常运行的数据库，以及如何以有效和高效的方式来正确管理各种不同的结构，从而构造出一个设计良好、高效率运行的数据库<br>　　&#183; 管理ORACLE的实例、日志文件、控制文件、表空间、用户、权限、角色、表、索引、回滚段<br>　　&#183; 如何在多个数据库之间进行数据迁移 <br><br>Oracle备份与恢复：<br>　　&#183; 根据业务需求，制定与完善数据库的备份、恢复、和RECOVER等策略<br>　　&#183; 执行数据库备份、恢复和RECOVER策略的计划与实施等关键任务，以及如何进行正确性的验证<br>　　&#183; 根据实际数据库的十几种不同的损坏原因，采用不同的恢复和RECOVER方式 <br>　　&#183; 熟练掌握Recovery Manager工具来执行备份、恢复和RECOVER<br>　　&#183; 介绍当今业界最流行的备份软件 <br>　　&#183; Oracle standby 数据库配置与管理 <br><br>Oracle网络管理：<br>　　&#183; 数据库的传输以及用来执行这些活动的实用程序 <br>　　&#183; 学习和熟悉网络概念和配置参数，以及如何解决一些常见的网络问题 <br>　　&#183; 了解各个Net组件并将学习配置简单的和复杂的Net环境<br>　　&#183; 通过动手练习活动，练习配置网络参数，从而使数据库客户机和工具都能实现与Oracle 数据库服务器之间的通信； <br><br>Oracle性能调优：<br>　　&#183; 学习与ORACLE数据库性能相关的各种知识<br>　　&#183; 进行操作系统级调优<br>　　&#183; 进行存储级调优 <br>　　&#183; 调整应用<br>　　&#183; 调整CPU、内存、存储、以及应用等之间的关系<br>　　&#183; 通过使用多种不同的工具，确认、分析、和解决Oracle 数据库在运行过程中所存在的瓶颈<br>]]></description>
	<author>luoyanqing119</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30908</comments>
	<dc:creator>luoyanqing119</dc:creator>
</item>

<item>
	<title><![CDATA[和上司领导沟通必备8个黄金句 转帖 ]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30906</link> 
	<pubDate>2009-1-4 15:33:46</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30906</guid>
	<description><![CDATA[1、句型：我们似乎碰到一些状况   <br> 妙处：以最婉约的方式传递坏消息。 <br> 如果立刻冲到上司的办公室里报告这个坏消息，就算不干你的事，也只会让上司质疑你处理危机的能力。此时，你应该不带情绪起伏的声调，从容不迫地说出本句型，要让上司觉得事情并非无法解决，面我们听起来像是你将与上司站在同一阵线，并肩作战。   <br><br> 2、句型：我马上处理。   <br> 妙处：上司传唤时责无旁贷   <br> 冷静，迅速地做出这样的回答，会令上司直觉地认为你是名有效率的好部属；相反，犹豫不决的态度只会惹得责任本就繁重的上司不快。   <br><br> 3、句型：安琪的主意真不错。   <br> 妙处：表现出团队精神 安琪想出了一条边上司都赞赏的绝妙好计，你恨不得你的脑筋动得比人家快；与其拉长脸孔，暗自不爽，不如偷沾他的光，会让上司觉得你富有团队精神，因而另眼看待。   <br><br> 4、句型：这个报告没有你不行啦！   <br> 妙处：说服同事帮忙   <br> 有件棘手的工作，你无法独立完成，怎么开口才能让那个以这方面工作最拿手的同事心甘情愿地助你一臂之力呢？送高帽，灌迷汤，而那们好心人为了不负自己在这方面的名声，通常会答应你的请求。   <br><br> 5、句型：让我再认真地想一想，3点以前给你答复好吗？   <br> 妙处：巧妙闪避你不知道的事 上司问了你某个与业务有关的问题，而你不知该如何作答，千万不可以说不知道。本句型不仅暂时为你解危，也让上司认为在这件事情上头很用心。不过，事后可得做足功课，按时交出你的答复。   <br><br> 6、句型：我很想知道你对某件事情的看法   <br> 妙外：恰如其分的讨好   <br> 你与高层要人共处一室，这是一个让你能够赢得青睐的绝佳时机。但说些什么好呢？此时，最恰当的莫过一个跟公司前景有关，而又发人深省的话题。在他滔滔不绝地诉说心得的时候，你不仅获益良多，也会让他对你的求知上进之心刮目相看。   <br><br> 7、句型：是我一时失察，不过幸好……   <br> 妙处：承认疏失但不引起上司不满 犯错在所难免，勇于承认自己的过失非常重要，不过这不表示你就得因此对每个人道歉，诀窍在于别让所有的矛头都指到自己身上，坦诚却谈化你的过失，转移众人的焦点。   <br><br> 8、句型：谢谢你告诉我，我会仔细考虑你的建议   <br> 妙处：面对批评表现冷静   <br> 自己的工作成果遭人修正或批评，的确是一件令人苦恼的事。不需要将不满的情绪写出在脸上，不卑不亢的表现令你年起来更有自信，更值得人敬重。 <br>]]></description>
	<author>Supermay</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30906</comments>
	<dc:creator>Supermay</dc:creator>
</item>

<item>
	<title><![CDATA[在线更新源代码]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30904</link> 
	<pubDate>2009-1-4 9:22:53</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30904</guid>
	<description><![CDATA[我做得一个在线更新的程序<br><br><a href='images/u175255/在线更新.rar'>在线更新源代码</a>]]></description>
	<author>muhx</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30904</comments>
	<dc:creator>muhx</dc:creator>
</item>

<item>
	<title><![CDATA[IdTcpServer AThread]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30902</link> 
	<pubDate>2009-1-3 16:33:09</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30902</guid>
	<description><![CDATA[应该先取得你要发送至客户端的 TIdPeerThread<br><br>AThread:TIdPeerThread<br><br>获得TIdPeerThread方法很多，如果在IdTCPServerExecute事件中，IdTCPServerExecute会将其用参数方式带入，可以直接使用。<br>IdTCPServerExecute(AThread: TIdPeerThread);<br><br>如果要在其它地方引用，应当在IdTCPServerConnect(AThread: TIdPeerThread);事件中对上线的机器进行链表记录。<br>或者直接用:<br><br><br>Var<br>    List : Tlist;<br>    <br>    List := IdTCPServer.Threads.LockList;<br>    TidPeerThread(List.Items[i]).Connection.Write(Cmd);<br><br><br><br>这个是发送命令到所有客户端的代码：<br><br><br>procedure SendCmdToAll(CMD:String);<br>var<br>    List: TList;<br>    I: Integer;<br>begin<br>    List := IdTcpServer.Threads.LockList;<br>    try<br>    for I := 0 to List.Count - 1 do<br>    begin<br>        try<br>        TIdPeerThread(List.Items[I]).Connection.Write(CMD);<br>        except<br>        on E: Exception do<br>        begin<br>        TIdPeerThread(List.Items[I]).Stop;<br>        end;<br>        end;<br>    end;<br>    finally<br>    IdTcpServer.Threads.UnlockList;<br>    end;<br>end;<br><br><br><br>//总之都是利用TIdPeerThread的方法，所以能得到TIdPeerThread的话就没有任何问题。<br>AThread.Connection.Write(Cmd);<br><br>]]></description>
	<author>samsi</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30902</comments>
	<dc:creator>samsi</dc:creator>
</item>

<item>
	<title><![CDATA[TIdTCPServer控件]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30901</link> 
	<pubDate>2009-1-3 14:14:23</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30901</guid>
	<description><![CDATA[IdTCPServer <br>简介<br>该控件包含一个完整的、多线程TCP服务器。该控件使用一个或者多个线程监听（listen）客户机连接，使用<br><br>时与TIdThreadMgr联合使用，将每个线程分配给与客户机连接的连接上。<br><br>TIdTCPServer提供允许配置服务器监听线程的功能，包括：<br>DefaultPort<br>ListenQueue<br>OnListenException<br>ReuseSocket<br>MaxConnections<br>MaxConnectionReply<br>该控件也提供控制协议特殊功能的属性和方法，包括：<br>Greeting<br>ReplyExceptionCode<br>ReplyUnknownCommand<br>该控件用来实现两机之间的连接，支持以下事件：<br>OnConnect<br>OnExecute<br>OnDisconnect<br>OnException<br>该控件支持协议命令的控制，包括：<br>CommandHandlers<br>CommandHandlersEnabled<br>OnNoCommandHandler<br>OnAfterCommandHandler<br>OnBeforeCommandHandler<br><br>该控件是以下控件的父类：<br>TIdChargenServer, TIdDayTimeServer, TIdDICTServer, TIdEchoServer, TIdFingerServer, <br><br>TIdGopherServer, TIdHostNameServer, TIdHTTPServer, TIdIRCServer, TIdNNTPServer, TIdQUOTDServer, <br><br>TIdTelnetServer, TIdWhoisServer<br><br>一些重要的属性<br>property ListenQueue: integer;<br>允许排队未解决的最大监听连接数。<br><br>property ReuseSocket: TIdReuseSocket;<br>本地地址中被重新使用的监听线程。<br><br>property MaxConnections: Integer;<br>最大允许的连接数。<br><br>property MaxConnectionReply: TIdRFCReply;<br>到达最大连接后，返回给其它请求的连接的消息。<br><br>property ReplyExceptionCode: Integer;<br>在发生异常后，返回给连接的代码。<br><br>property ReplyTexts: TIdRFCReplies;<br>服务器实现的协议响应。<br><br>property ReplyUnknownCommand: TIdRFCReply;<br>对未知命令的响应。<br><br>property CommandHandlers: TIdCommandHandlers;<br>命令处理器集合。<br><br>property CommandHandlersEnabled: boolean;<br>在监听线程连接时是否使用命令处理器。<br><br>property Greeting: TIdRFCReply;<br>当监听线程连接成功后发送的标题信息。<br>]]></description>
	<author>samsi</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30901</comments>
	<dc:creator>samsi</dc:creator>
</item>

<item>
	<title><![CDATA[DBGridEhToExcel快速类 ]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30900</link> 
	<pubDate>2009-1-3 13:41:17</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30900</guid>
	<description><![CDATA[作者　: chen_liang<br>标题　: DBGridEhToExcel快速类 <br>关键字: <br>分类　: 个人专区 <br>密级　: 公开 <br>(评分: , 回复: 0, 阅读: 679) &amp;raquo;&amp;raquo; <br>unit DBGridEhToExcel;<br><br>interface<br>uses<br>  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br>  Dialogs, DB, ComCtrls, ExtCtrls, StdCtrls, Gauges, DBGridEh, ShellApi;<br><br>type<br>  TTitleCell = array of array of String;<br><br>  //分解DBGridEh的标题<br>  TDBGridEhTitle = class<br>  private<br>    FDBGridEh: TDBGridEh;  //对应DBGridEh<br>    FColumnCount: integer; //DBGridEh列数(指visible为True的列数)<br>    FRowCount: integer;    //DBGridEh多表头层数(没有多表头则层数为1)<br>    procedure SetDBGridEh(const Value: TDBGridEh);<br>    function GetTitleRow: integer;    //获取DBGridEh多表头层数<br>    function GetTitleColumn: integer; //获取DBGridEh列数<br>  public<br>    //分解DBGridEh标题，由TitleCell二维动态数组返回<br>    procedure GetTitleData(var TitleCell: TTitleCell);<br>  published<br>    property DBGridEh: TDBGridEh read FDBGridEh write SetDBGridEh;<br>    property ColumnCount: integer read FColumnCount;<br>    property RowCount: integer read FRowCount;<br>  end;<br><br>  TDBGridEhToExcel = class(TComponent)<br>  private<br>    FCol: integer;<br>    FRow: integer;<br>    FProgressForm: TForm;                                  {进度窗体}<br>    FGauge: TGauge;                                        {进度条}<br>    Stream: TStream;                                       {输出文件流}<br>    FBookMark: TBookmark;                                  <br>    FShowProgress: Boolean;                                {是否显示进度窗体}<br>    FDBGridEh: TDBGridEh;<br>    FBeginDate: TCaption;                                  {开始日期}<br>    FTitleName: TCaption;                                  {Excel文件标题}<br>    FEndDate: TCaption;                                    {结束日期}<br>    FUserName: TCaption;                                   {制表人}<br>    FFileName: String;                                     {保存文件名}<br>    procedure SetShowProgress(const Value: Boolean);<br>    procedure SetDBGridEh(const Value: TDBGridEh);<br>    procedure SetBeginDate(const Value: TCaption);<br>    procedure SetEndDate(const Value: TCaption);<br>    procedure SetTitleName(const Value: TCaption);<br>    procedure SetUserName(const Value: TCaption);<br>    procedure SetFileName(const Value: String);    <br><br>    procedure IncColRow;<br>    procedure WriteBlankCell;                              {写空单元格}<br>    {写数字单元格}<br>    procedure WriteFloatCell(const AValue: Double; const IncStatus: Boolean=True);<br>    {写整型单元格}<br>    procedure WriteIntegerCell(const AValue: Integer; const IncStatus: Boolean=True);<br>    {写字符单元格}<br>    procedure WriteStringCell(const AValue: string; const IncStatus: Boolean=True);<br>    procedure WritePrefix;<br>    procedure WriteSuffix;<br>    procedure WriteHeader;                                 {输出Excel标题}<br>    procedure WriteTitle;                                  {输出Excel列标题}<br>    procedure WriteDataCell;                               {输出数据集内容}<br>    procedure WriteFooter;                                 {输出DBGridEh表脚}<br>    procedure SaveStream(aStream: TStream);<br>    procedure CreateProcessForm(AOwner: TComponent);       {生成进度窗体}<br>    {根据表格修改数据集字段顺序及字段中文标题}<br>    procedure SetDataSetCrossIndexDBGridEh;<br>  public<br>    constructor Create(AOwner: TComponent); override;<br>    destructor Destroy; override;<br>    procedure ExportToExcel; {输出Excel文件}<br>  published<br>    property DBGridEh: TDBGridEh read FDBGridEh write SetDBGridEh;<br>    property ShowProgress: Boolean read FShowProgress write SetShowProgress;<br>    property TitleName: TCaption read FTitleName write SetTitleName;<br>    property BeginDate: TCaption read FBeginDate write SetBeginDate;<br>    property EndDate: TCaption read FEndDate write SetEndDate;<br>    property UserName: TCaption read FUserName write SetUserName;<br>    property FileName: String read FFileName write SetFileName;<br>  end;<br><br>var<br>  CXlsBof: array[0..5] of Word = ($809, 8, 0, $10, 0, 0);<br>  CXlsEof: array[0..1] of Word = ($0A, 00);<br>  CXlsLabel: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);<br>  CXlsNumber: array[0..4] of Word = ($203, 14, 0, 0, 0);<br>  CXlsRk: array[0..4] of Word = ($27E, 10, 0, 0, 0);<br>  CXlsBlank: array[0..4] of Word = ($201, 6, 0, 0, $17);<br><br>implementation<br>{ TDBGridEhTitle }<br><br><br>function TDBGridEhTitle.GetTitleColumn: integer;<br>var<br>  i, ColumnCount: integer;<br>begin<br>  ColumnCount := 0;<br>  for i := 0 to DBGridEh.Columns.Count - 1 do<br>  begin<br>    if DBGridEh.Columns[i].Visible then<br>      Inc(ColumnCount);<br>  end;<br><br>  Result := ColumnCount;<br>end;<br><br>procedure TDBGridEhTitle.GetTitleData(var TitleCell: TTitleCell);<br>var<br>  i, Row, Col: integer;<br>  Caption: String;<br>begin<br>  FColumnCount := GetTitleColumn;<br>  FRowCount := GetTitleRow;<br>  SetLength(TitleCell,FColumnCount,FRowCount);<br>  Row := 0;<br>  for i := 0 to DBGridEh.Columns.Count - 1 do<br>  begin<br>    if DBGridEh.Columns[i].Visible then<br>    begin<br>      Col := 0;<br>      Caption := DBGridEh.Columns[i].Title.Caption;<br>      while POS('|', Caption) &gt; 0 do<br>      begin<br>        TitleCell[Row,Col] := Copy(Caption, 1, Pos('|',Caption)-1);<br>        Caption := Copy(Caption,Pos('|', Caption)+1, Length(Caption));<br>        Inc(Col);<br>      end;<br>      TitleCell[Row, Col] := Caption;<br>      Inc(Row);<br>    end;<br>  end;<br>end;<br><br>function TDBGridEhTitle.GetTitleRow: integer;<br>var<br>  i, j: integer;<br>  MaxRow, Row: integer;<br>begin<br>  MaxRow := 1;<br>  for i := 0 to DBGridEh.Columns.Count - 1 do<br>  begin<br>    Row := 1;<br>    for j := 0 to Length(DBGridEh.Columns[i].Title.Caption) do<br>    begin<br>      if DBGridEh.Columns[i].Title.Caption[j] = '|' then<br>        Inc(Row);<br>    end;<br><br>    if MaxRow &lt; Row then<br>      MaxRow :=  Row;<br>  end;<br><br>  Result := MaxRow;<br>end;<br><br>procedure TDBGridEhTitle.SetDBGridEh(const Value: TDBGridEh);<br>begin<br>  FDBGridEh := Value;<br>end;<br><br>{ TDBGridEhToExcel }<br><br>constructor TDBGridEhToExcel.Create(AOwner: TComponent);<br>begin<br>  inherited Create(AOwner);<br>  FShowProgress := True;<br>end;<br><br>procedure TDBGridEhToExcel.SetShowProgress(const Value: Boolean);<br>begin<br>  FShowProgress := Value;<br>end;<br><br>procedure TDBGridEhToExcel.SetDBGridEh(const Value: TDBGridEh);<br>begin<br>  FDBGridEh := Value;<br>end;<br><br>procedure TDBGridEhToExcel.SetBeginDate(const Value: TCaption);<br>begin<br>  FBeginDate := Value;<br>end;<br><br>procedure TDBGridEhToExcel.SetEndDate(const Value: TCaption);<br>begin<br>  FEndDate := Value;<br>end;<br><br>procedure TDBGridEhToExcel.SetTitleName(const Value: TCaption);<br>begin<br>  FTitleName := Value;<br>end;<br><br>procedure TDBGridEhToExcel.SetUserName(const Value: TCaption);<br>begin<br>  FUserName := Value;<br>end;<br><br>procedure TDBGridEhToExcel.SetFileName(const Value: String);<br>begin<br>  FFileName := Value;<br>end;<br><br>procedure TDBGridEhToExcel.IncColRow;<br>begin<br>  if FCol = DBGridEh.DataSource.DataSet.FieldCount - 1 then<br>  begin<br>    Inc(FRow);<br>    FCol := 0;<br>  end<br>  else<br>    Inc(FCol);<br>end;<br><br>procedure TDBGridEhToExcel.WriteBlankCell;<br>begin<br>  CXlsBlank[2] := FRow;<br>  CXlsBlank[3] := FCol;<br>  Stream.WriteBuffer(CXlsBlank, SizeOf(CXlsBlank));<br>  IncColRow;<br>end;<br><br>procedure TDBGridEhToExcel.WriteFloatCell(const AValue: Double; const IncStatus: Boolean=True);<br>begin<br>  CXlsNumber[2] := FRow;<br>  CXlsNumber[3] := FCol;<br>  Stream.WriteBuffer(CXlsNumber, SizeOf(CXlsNumber));<br>  Stream.WriteBuffer(AValue, 8);<br><br>  if IncStatus then<br>    IncColRow;<br>end;<br><br>procedure TDBGridEhToExcel.WriteIntegerCell(const AValue: Integer; const IncStatus: Boolean=True);<br>var<br>  V: Integer;<br>begin<br>  CXlsRk[2] := FRow;<br>  CXlsRk[3] := FCol;<br>  Stream.WriteBuffer(CXlsRk, SizeOf(CXlsRk));<br>  V := (AValue Shl 2) Or 2;<br>  Stream.WriteBuffer(V, 4);<br><br>  if IncStatus then<br>    IncColRow;<br>end;<br><br>procedure TDBGridEhToExcel.WriteStringCell(const AValue: string; const IncStatus: Boolean=True);<br>var<br>  L: integer;<br>begin<br>  L := Length(AValue);<br>  CXlsLabel[1] := 8 + L;<br>  CXlsLabel[2] := FRow;<br>  CXlsLabel[3] := FCol;<br>  CXlsLabel[5] := L;<br>  Stream.WriteBuffer(CXlsLabel, SizeOf(CXlsLabel));<br>  Stream.WriteBuffer(Pointer(AValue)^, L);<br><br>  if IncStatus then<br>    IncColRow;<br>end;<br><br>procedure TDBGridEhToExcel.WritePrefix;<br>begin<br>  Stream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));<br>end;<br><br>procedure TDBGridEhToExcel.WriteSuffix;<br>begin<br>  Stream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));<br>end;<br><br>procedure TDBGridEhToExcel.WriteHeader;<br>var<br>  OpName, OpDate: String; <br>begin<br>  //标题<br>  FCol := 3;<br>  WriteStringCell(TitleName,False);<br>  FCol := 0;<br><br>  Inc(FRow);<br><br>  if Trim(BeginDate) &lt;&gt; '' then<br>  begin<br>    //开始日期<br>    FCol := 0;<br>    WriteStringCell(BeginDate,False);<br>    FCol := 0<br>  end;<br><br>  if Trim(EndDate) &lt;&gt; '' then<br>  begin<br>    //结束日期<br>    FCol := 5;<br>    WriteStringCell(EndDate,False);<br>    FCol := 0;<br>  end;<br><br>  if (Trim(BeginDate) &lt;&gt; '') or (Trim(EndDate) &lt;&gt; '') then<br>    Inc(FRow);<br><br>  //制表人<br>  OpName := '制表人：' + UserName;<br>  FCol := 0;<br>  WriteStringCell(OpName,False);<br>  FCol := 0;<br><br>  //制表时间<br>  OpDate := '制表时间：' + DateTimeToStr(Now);<br>  FCol := 5;<br>  WriteStringCell(OpDate,False);<br>  FCol := 0;<br><br>  Inc(FRow);  <br>end;<br><br>procedure TDBGridEhToExcel.WriteTitle;<br>var<br>  i, j: integer;<br>  DBGridEhTitle: TDBGridEhTitle;<br>  TitleCell: TTitleCell;<br>begin<br>  DBGridEhTitle := TDBGridEhTitle.Create;<br>  try<br>    DBGridEhTitle.DBGridEh := FDBGridEh;<br>    DBGridEhTitle.GetTitleData(TitleCell);<br><br>    try<br>      for i := 0 to DBGridEhTitle.RowCount - 1 do<br>      begin<br>        for j := 0 to DBGridEhTitle.ColumnCount - 1 do<br>        begin<br>          FCol := j;<br>          WriteStringCell(TitleCell[j,i],False);<br>        end;<br>        Inc(FRow);<br>      end;<br>      FCol := 0;<br>    except<br><br>    end;<br>  finally<br>    DBGridEhTitle.Free;<br>  end;<br>end;<br><br><br>procedure TDBGridEhToExcel.WriteDataCell;<br>var<br>  i: integer;<br>begin<br>  DBGridEh.DataSource.DataSet.DisableControls;<br>  FBookMark := DBGridEh.DataSource.DataSet.GetBookmark;<br>  try<br>    DBGridEh.DataSource.DataSet.First;<br>    while not DBGridEh.DataSource.DataSet.Eof do<br>    begin<br>      for i := 0 to DBGridEh.DataSource.DataSet.FieldCount - 1 do<br>      begin<br>        if DBGridEh.DataSource.DataSet.Fields[i].IsNull or (not DBGridEh.DataSource.DataSet.Fields[i].Visible) then<br>          WriteBlankCell<br>        else<br>        begin<br>          case DBGridEh.DataSource.DataSet.Fields[i].DataType of<br>            ftSmallint, ftInteger, ftWord, ftAutoInc, ftBytes:<br>              WriteIntegerCell(DBGridEh.DataSource.DataSet.Fields[i].AsInteger);<br>            ftFloat, ftCurrency, ftBCD:<br>              WriteFloatCell(DBGridEh.DataSource.DataSet.Fields[i].AsFloat);<br>          else<br>            if DBGridEh.DataSource.DataSet.Fields[i] Is TBlobfield then  // 此类型的字段(图像等)暂无法读取显示<br>              WriteStringCell('')<br>            else<br>              WriteStringCell(DBGridEh.DataSource.DataSet.Fields[i].AsString);<br>          end;<br>        end;<br>      end;<br><br>      //显示进度条进度过程<br>      if ShowProgress then<br>      begin<br>        FGauge.Progress := DBGridEh.DataSource.DataSet.RecNo;<br>        FGauge.Refresh;<br>      end;<br><br>      DBGridEh.DataSource.DataSet.Next;<br>    end;<br><br>  finally<br>    if DBGridEh.DataSource.DataSet.BookmarkValid(FBookMark) then<br>    DBGridEh.DataSource.DataSet.GotoBookmark(FBookMark);<br><br>    DBGridEh.DataSource.DataSet.EnableControls;<br>  end;<br>end;<br><br>procedure TDBGridEhToExcel.WriteFooter;<br>var<br>  i, j: integer;<br>begin<br>  if DBGridEh.FooterRowCount = 0 then exit;<br><br>  FCol := 0;<br>  if DBGridEh.FooterRowCount = 1 then<br>  begin<br>    for i := 0 to DBGridEh.Columns.Count - 1 do<br>    begin<br>      if DBGridEh.Columns[i].Visible then<br>      begin<br>        WriteStringCell(DBGridEh.Columns[i].Footer.Value,False);<br>        Inc(FCol);<br>      end;<br>    end;<br>  end<br>  else if DBGridEh.FooterRowCount &gt; 1 then<br>  begin<br>    for i := 0 to DBGridEh.Columns.Count - 1 do<br>    begin<br>      if DBGridEh.Columns[i].Visible then<br>      begin<br>        for j := 0 to DBGridEh.Columns[i].Footers.Count - 1 do<br>        begin<br>          WriteStringCell(DBGridEh.Columns[i].Footers[j].Value ,False);<br>          Inc(FRow);<br>        end;<br>        Inc(FCol);<br>        FRow := FRow - DBGridEh.Columns[i].Footers.Count;<br>      end;<br>    end;<br>  end;<br>  FCol := 0;<br>end;<br><br>procedure TDBGridEhToExcel.SaveStream(aStream: TStream);<br>begin<br>  FCol := 0;<br>  FRow := 0;<br>  Stream := aStream;<br><br>  //输出前缀<br>  WritePrefix;<br><br>  //输出表格标题<br>  WriteHeader;<br><br>  //输出列标题<br>  WriteTitle;<br><br>  //输出数据集内容<br>  WriteDataCell;<br><br>  //输出DBGridEh表脚<br>  WriteFooter;<br><br>  //输出后缀<br>  WriteSuffix;<br>end;<br><br>procedure TDBGridEhToExcel.ExportToExcel;<br>var<br>  FileStream: TFileStream;<br>  Msg: String;<br>begin<br>  //如果数据集为空或没有打开则退出<br>  if (DBGridEh.DataSource.DataSet.IsEmpty) or (not DBGridEh.DataSource.DataSet.Active) then<br>    exit;<br><br>  //如果保存的文件名为空则退出 <br>  if Trim(FileName) = '' then<br>    exit;<br>    <br>  //根据表格修改数据集字段顺序及字段中文标题<br>  SetDataSetCrossIndexDBGridEh;<br><br>  Screen.Cursor := crHourGlass;<br>  try<br>    try<br>      if FileExists(FileName) then<br>      begin<br>        Msg := '已存在文件（' + FileName + '），是否覆盖？';<br>        if Application.MessageBox(PChar(Msg),'提示',MB_YESNO+MB_ICONQUESTION+MB_DEFBUTTON2) = IDYES then<br>        begin<br>          //删除文件<br>          DeleteFile(FileName)<br>        end<br>        else<br>          exit;<br>      end;<br><br>      //显示进度窗体<br>      if ShowProgress then<br>        CreateProcessForm(nil);<br>        <br>      FileStream := TFileStream.Create(FileName, fmCreate);<br>      try<br>        //输出文件<br>        SaveStream(FileStream);<br>      finally<br>        FileStream.Free;<br>      end;<br>      <br>      //打开Excel文件<br>      ShellExecute(0, 'Open', PChar(FileName), nil, nil, SW_SHOW);<br>    except<br><br>    end;<br>  finally<br>    if ShowProgress then<br>      FreeAndNil(FProgressForm);<br>    Screen.Cursor := crDefault;<br>  end;<br>end;<br><br>destructor TDBGridEhToExcel.Destroy;<br>begin<br>  inherited Destroy;<br>end;<br><br>procedure TDBGridEhToExcel.CreateProcessForm(AOwner: TComponent);<br>var<br>  Panel: TPanel;<br>  Prompt: TLabel;                                           {提示的标签}<br>begin<br>  if Assigned(FProgressForm) then<br>    exit;<br><br>  FProgressForm := TForm.Create(AOwner);<br>  with FProgressForm do<br>  begin<br>    try<br>      Font.Name := '宋体';                                  {设置字体}<br>      Font.Size := 9;<br>      BorderStyle := bsNone;<br>      Width := 300;<br>      Height := 100;<br>      BorderWidth := 1;<br>      Color := clBlack;<br>      Position := poScreenCenter;<br><br>      Panel := TPanel.Create(FProgressForm);<br>      with Panel do<br>      begin<br>        Parent := FProgressForm;<br>        Align := alClient;<br>        BevelInner := bvNone;<br>        BevelOuter := bvRaised;<br>        Caption := '';<br>      end;<br><br>      Prompt := TLabel.Create(Panel);<br>      with Prompt do<br>      begin<br>        Parent := Panel;<br>        AutoSize := True;<br>        Left := 25;<br>        Top := 25;<br>        Caption := '正在导出数据，请稍候......';<br>        Font.Style := [fsBold];<br>      end;<br><br>      FGauge := TGauge.Create(Panel);<br>      with FGauge do<br>      begin<br>        Parent := Panel;<br>        ForeColor := clBlue;<br>        Left := 20;<br>        Top := 50;<br>        Height := 13;<br>        Width := 260;<br>        MinValue := 0;<br>        MaxValue := DBGridEh.DataSource.DataSet.RecordCount;<br>      end;<br>    except<br><br>    end;<br>  end;<br><br>  FProgressForm.Show;<br>  FProgressForm.Update;<br>end;<br><br>procedure TDBGridEhToExcel.SetDataSetCrossIndexDBGridEh;<br>var<br>  i: integer;<br>begin<br>  for i := 0 to DBGridEh.Columns.Count - 1 do<br>  begin<br>    DBGridEh.DataSource.DataSet.FieldByName(DBGridEh.Columns.Items[i].FieldName).Index := i;<br>    DBGridEh.DataSource.DataSet.FieldByName(DBGridEh.Columns.Items[i].FieldName).DisplayLabel<br>      := DBGridEh.Columns.Items[i].Title.Caption;<br>    DBGridEh.DataSource.DataSet.FieldByName(DBGridEh.Columns.Items[i].FieldName).Visible :=<br>      DBGridEh.Columns.Items[i].Visible;<br>  end;<br><br>  for i := 0 to DBGridEh.DataSource.DataSet.FieldCount - 1 do<br>  begin<br>    if POS('*****',DBGridEh.DataSource.DataSet.Fields[i].DisplayLabel) &gt; 0 then<br>      DBGridEh.DataSource.DataSet.Fields[i].Visible := False;<br>  end;  <br>end;<br><br>end.<br><br><br>/*****************************************************************/<br><br>调用的例子<br><br>var<br>  DBGridEhToExcel: TDBGridEhToExcel;<br>begin<br>  DBGridEhToExcel := TDBGridEhToExcel.Create(nil);<br>  try<br>    DBGridEhToExcel.TitleName := '测试测试测试测试测试测试测试';<br>    DBGridEhToExcel.BeginDate := '开始日期：2005-07-01';<br>    DBGridEhToExcel.EndDate := '结束日期：2005-07-18';<br>    DBGridEhToExcel.UserName := '系统管理员';<br>    DBGridEhToExcel.DBGridEh := DBGridEh1;<br>    DBGridEhToExcel.ShowProgress := True;<br>    DBGridEhToExcel.FileName := 'c:\123.xls';<br>    DBGridEhToExcel.ExportToExcel;<br>  finally<br>    DBGridEhToExcel.Free;<br>  end;  <br><br> <br>]]></description>
	<author>longxh025</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30900</comments>
	<dc:creator>longxh025</dc:creator>
</item>

<item>
	<title><![CDATA[SQL日期转换 ]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30899</link> 
	<pubDate>2009-1-3 9:52:43</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30899</guid>
	<description><![CDATA[SQL日期转换 <br>select CONVERT(varchar, getdate(), 120 )<br>2004-09-12 11:06:08<br><br>select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')<br>20040912110608<br><br>select CONVERT(varchar(12) , getdate(), 111 )<br>2004/09/12<br><br>select CONVERT(varchar(12) , getdate(), 112 )<br>20040912<br><br>select CONVERT(varchar(12) , getdate(), 102 )<br>2004.09.12<br><br>其它我不常用的日期格式转换方法:<br><br>select CONVERT(varchar(12) , getdate(), 101 )<br>09/12/2004<br><br>select CONVERT(varchar(12) , getdate(), 103 )<br>12/09/2004<br><br>select CONVERT(varchar(12) , getdate(), 104 )<br>12.09.2004<br><br>select CONVERT(varchar(12) , getdate(), 105 )<br>12-09-2004<br><br>select CONVERT(varchar(12) , getdate(), 106 )<br>12 09 2004<br><br>select CONVERT(varchar(12) , getdate(), 107 )<br>09 12, 2004<br><br>select CONVERT(varchar(12) , getdate(), 108 )<br>11:06:08<br><br>select CONVERT(varchar(12) , getdate(), 109 )<br>09 12 2004 1<br><br>select CONVERT(varchar(12) , getdate(), 110 )<br>09-12-2004<br><br>select CONVERT(varchar(12) , getdate(), 113 )<br>12 09 2004 1<br><br>select CONVERT(varchar(12) , getdate(), 114 )<br>11:06:08.177<br><br><br><br>EXEC AUTOPC_P_GETDAYFROMWEEK '2009','01'<br><br><br><br> CREATE PROCEDURE AUTOPC_P_GETDAYFROMWEEK(@YEAR VARCHAR(10),@WEEK   VARCHAR(10)   ) AS <br><br>--DECLARE @INTYEAR INT ,@INTWEEK INT<br>DECLARE @DATEFIRSTDAYOFYEAR DATETIME<br>DECLARE @DATEFIRSTDAYOFWEEK DATETIME<br>DECLARE @DATELASTDAYOFWEEK DATETIME<br><br><br> <br>SET @DATEFIRSTDAYOFYEAR=CONVERT(SMALLDATETIME,@YEAR + '-1-1')<br>SET @DATEFIRSTDAYOFWEEK= DATEADD(DAY,1-DATEPART(WEEKDAY,@DATEFIRSTDAYOFYEAR),DATEADD(WEEK,CONVERT(VARCHAR(2),@WEEK)-1,@DATEFIRSTDAYOFYEAR) )<br>SET @DATELASTDAYOFWEEK=DATEADD(DAY,6,@DATEFIRSTDAYOFWEEK)<br><br><br>SELECT  <br>--CONVERT(VARCHAR(12),CONVERT(SMALLDATETIME,CONVERT(VARCHAR(4),@INTYEAR) + '-1-1'),111) AS DATEFIRSTDAYOFYEAR,<br>--CONVERT(VARCHAR(12),DATEADD(DAY,1-DATEPART(WEEKDAY,@DATEFIRSTDAYOFYEAR),DATEADD(WEEK,@INTWEEK-1,@DATEFIRSTDAYOFYEAR)),111)  AS DATEFIRSTDAYOFWEEK,<br>--CONVERT(VARCHAR(12),DATEADD(DAY,6,@DATEFIRSTDAYOFWEEK),111) AS DATELASTDAYOFWEEK,<br><br>CONVERT(VARCHAR(10),@YEAR) AS YEA,<br><br>MONTH (DATEADD(DAY,0,@DATEFIRSTDAYOFWEEK)) AS MON1,<br>MONTH (DATEADD(DAY,1,@DATEFIRSTDAYOFWEEK)) AS MON2,<br>MONTH (DATEADD(DAY,2,@DATEFIRSTDAYOFWEEK)) AS MON3,<br>MONTH (DATEADD(DAY,3,@DATEFIRSTDAYOFWEEK)) AS MON4,<br><br>---------------------<br>MONTH (DATEADD(DAY,0,@DATEFIRSTDAYOFWEEK)) AS SMON1,<br>MONTH (DATEADD(DAY,1,@DATEFIRSTDAYOFWEEK)) AS SMON2,<br>MONTH (DATEADD(DAY,2,@DATEFIRSTDAYOFWEEK)) AS SMON3,<br>MONTH (DATEADD(DAY,3,@DATEFIRSTDAYOFWEEK)) AS SMON4,<br>MONTH (DATEADD(DAY,4,@DATEFIRSTDAYOFWEEK)) AS SMON5,<br>MONTH (DATEADD(DAY,5,@DATEFIRSTDAYOFWEEK)) AS SMON6,<br>MONTH (DATEADD(DAY,6,@DATEFIRSTDAYOFWEEK)) AS SMON7,<br>MONTH (DATEADD(DAY,7,@DATEFIRSTDAYOFWEEK)) AS SMON8,<br>--------<br>DAY(DATEADD(DAY,0,@DATEFIRSTDAYOFWEEK)) AS DAY1,<br>DAY(DATEADD(DAY,1,@DATEFIRSTDAYOFWEEK)) AS DAY2,<br>DAY(DATEADD(DAY,2,@DATEFIRSTDAYOFWEEK)) AS DAY3,<br>DAY(DATEADD(DAY,3,@DATEFIRSTDAYOFWEEK)) AS DAY4,<br>DAY(DATEADD(DAY,4,@DATEFIRSTDAYOFWEEK)) AS DAY5,<br>DAY(DATEADD(DAY,5,@DATEFIRSTDAYOFWEEK)) AS DAY6,<br>DAY(DATEADD(DAY,6,@DATEFIRSTDAYOFWEEK)) AS DAY7,<br>DAY(DATEADD(DAY,7,@DATEFIRSTDAYOFWEEK)) AS DAY8<br><br>]]></description>
	<author>longxh025</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30899</comments>
	<dc:creator>longxh025</dc:creator>
</item>

<item>
	<title><![CDATA[经络养生]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30898</link> 
	<pubDate>2009-1-3 8:34:21</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30898</guid>
	<description><![CDATA[    我们能直接看到的世界不过是真实世界的很小一部分，而决定世界的运转的恰恰是那些看不见的绝大部分。<br>    人体也是如此——经络，做为用解剖手段无法检测到、只能用电阻测试乃至同位素示踪等高科技手段才能观察到的元气循行路径，是我们人体色身中一个神秘的组成部分。《黄帝内经》云：经脉者，所以能决生死、处百病、调虚实，不可不通。<br><br>    考虑到不少人对经络等中医理论存在不解或偏见，在此向大家推荐曲黎敏教授的《黄帝内经》讲座视频，我敢断言，能认真看的人，必将终身受用：<br><br>        http://www.tudou.com/playlist/id/2836163/<br><br><br><br>    下面，我将自己对经脉的学习心得整理成口诀，分期贴出，希望能达到抛砖引玉的作用:)]]></description>
	<author>creation-zy</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30898</comments>
	<dc:creator>creation-zy</dc:creator>
</item>

<item>
	<title><![CDATA[面部选取]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30897</link> 
	<pubDate>2009-1-2 7:44:20</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30897</guid>
	<description><![CDATA[一个小的图片工具<br><br><img src='images/u242573/未命名.JPG' class=blogimg>]]></description>
	<author>睢志强</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30897</comments>
	<dc:creator>睢志强</dc:creator>
</item>

<item>
	<title><![CDATA['ARITHABORT'錯誤]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30896</link> 
	<pubDate>2008-12-30 17:04:07</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30896</guid>
	<description><![CDATA[在SQL Server 2005中使用了计算列之后，执行查询时出现错误:<br><br>“INSERT failed because the following SET options have incorrect settings: 'ARITHABORT'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or query notifications and/or xml data type methods.”<br><br>解决方法：<br>将该数据库的兼容级别改为: SQL Server 2005(90)<br>原来设置的是: SQL Server 2000(80)<br>]]></description>
	<author>longxh025</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30896</comments>
	<dc:creator>longxh025</dc:creator>
</item>

<item>
	<title><![CDATA[新年到了，也发布一款日历日记软件。]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30895</link> 
	<pubDate>2008-12-30 14:31:31</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30895</guid>
	<description><![CDATA[1、翻页效果，模拟真实日记本； <br>2、纯绿色软件，功能强大，内容丰富，大小仅一兆多，无需安装，解压即可使用； <br>3、2009年运势预测、属相运势预测； <br>4、2009年黄道吉日查询 <br>5、二万多条成语查询； <br>6、近七千条、四十多种分类名人名言字典； <br>7、每年法定节日查询； <br>8、一百五十年万年历查询、节日查询、公历、农历转换； <br>9、搜集本机中所有常用软件快捷方式，提供快速打开软件、查找软件位置等功能； <br>10、网址大全：提供最热门上千个网址； <br>11、每日备忘记录，备忘全文检索功能； <br>12、日记功能、日记全文检索功能； <br>13、天干地支查询； <br>14、文本格式化功能； <br>15、皮肤自定义功能；<br>16、背景自定义功能；<br>17、四季分明的界面主题；<br>18、近百种背景图的漂亮“迷你窗”、“迷你”日历、“迷你”日期时间提示。<br>19、界面操作简单、明了，主要功能都在主菜单、右键菜单、按钮上体现。<br>20、系统资源占用少。<br><br><br><a href='images/u298690/BM09V1.rar'>新年到了，也发布一款日历日记软件。</a>]]></description>
	<author>白日依山黄河入海</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30895</comments>
	<dc:creator>白日依山黄河入海</dc:creator>
</item>

<item>
	<title><![CDATA[共享我的藏书----delphi书籍和光盘源码]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30894</link> 
	<pubDate>2008-12-28 19:23:44</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30894</guid>
	<description><![CDATA[1999-2000年接触delphi至今，本事没学到多少，delphi的书买了不少。在手头的都列出来，有需要随书带的源码的，可以和我联系:)<br><br>1。delphi5学习教程                           北京大学出版社     1999年<br>2。delphi5开发人员指南                       机械工业出版社     2000年<br>3。delphi5编程指南                           人民邮电出版社     2000年<br>4。delphi5.x ado/mts/com+高级程序设计篇      机械工业出版社     2000年 <br>5。delphi多媒体特效制作百例                  中国电力出版社     2001年<br>6。delphi串口通信编程                        人民邮电出版社     2001年<br>7。delphi5.0多媒体时尚编程百例               机械工业出版社     2001年<br>8。delphi5.0时尚编程百例                     机械工业出版社     2001年<br>9。internet与tcp/ip程序设计之delphi高手      清华大学出版社     2001年<br>10。delphi6.0数据库实例编程                  中国水利水电出版社 2002年<br>11。delphi6.0网络及数据库时尚编程百例        机械工业出版社     2002年<br>12。delphi深度编程及其项目应用开发           中国水利水电出版社 2002年<br>13。delphi数字图像处理及高级应用             科学出版社         2003年<br>14。delphi6开发人员指南                      机械工业出版社     2003年<br>15。delphi面向对象编程思想                   机械工业出版社     2003年<br>16。delphi算法与数据结构                     中国电力出版社     2003年<br>17。delphi企业经营管理系统开发实例导航       人民邮电出版社     2003年<br>18。delphi住宿餐饮管理系统开发实例导航       人民邮电出版社     2003年<br>19。delphi7下intraweb应用开发详解            电子工业出版社     2003年<br>20。delphi7 web开发与应用                    机械工业出版社     2003年<br>21。delphi下深入windows核心编程              电子工业出版社     2003年<br>22。计算机地图制图                           科学出版社         2004年（再版）<br>23。delphi win32核心api参考                  中国电力出版社     2004年<br>24。80例上手delphi7编程                      山东电子音像出版社 2004年<br>25。分形算法与程序设计-delphi实现            科学出版社         2004年<br>26。运筹学算法与编程实践-delphi实现          清华大学出版社     2004年<br>27。delphi模式编程                           机械工业出版社     2004年<br>28。delphi源代码分析                         电子工业出版社     2004年<br>29。delphi类库查询辞典                       中国铁道出版社     2004年<br>30。delphi经典游戏程序设计40例               中国铁道出版社     2004年<br>31。面向对象开发实践之路-delphi版            电子工业出版社     2005年<br>32。delphi2006高效数据库程序设计-dbexpress篇 电子工业出版社     2006年<br>33。多媒体视频程序设计-使用delphi            中国铁道出版社     2006年<br>34。delphi数据库系统开发案例精选             人民邮电出版社     2006年<br>35。基于delphi的数字图像处理工程软件设计     北京水利水电出版社 2006年<br>36。数字图像模式识别工程软件设计             北京水利水电出版社 2008年<br><br>2009年1月4日整理，未完待续......  <br><br>各位需要代码的请耐心等待，等我整理完书目和光盘后，一并送上:)   <br><br>]]></description>
	<author>啊啊啊啊啊</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30894</comments>
	<dc:creator>啊啊啊啊啊</dc:creator>
</item>

<item>
	<title><![CDATA[偶像-Anders Hejlsberg]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30893</link> 
	<pubDate>2008-12-27 18:42:54</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30893</guid>
	<description><![CDATA[Anders Hejlsberg<br><br><br><br><img src='images/u274058/zwn4_Anders_Hejlsberg_Young.gif' class=blogimg>]]></description>
	<author>delhpi</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30893</comments>
	<dc:creator>delhpi</dc:creator>
</item>

<item>
	<title><![CDATA[FastReport问题集]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30892</link> 
	<pubDate>2008-12-27 11:30:05</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30892</guid>
	<description><![CDATA[---------------- 使用自定义函数 ----------------------------------------<br><br>Q: 我怎样添加我的自定义函数?<br>A: 使用 TfrReport.OnUserFunction 事件. 这里有一个简单的例子:<br><br>procedure TForm1.frReport1UserFunction(const Name: String;<br>p1, p2, p3: Variant; var val: Variant);<br>begin<br>if AnsiCompareText(‘SUMTOSTR‘, Name) = 0 then<br>val := My_Convertion_Routine(frParser.Calc(p1));<br>end;<br><br>然后，你就可以在报表（任何表达式或脚本）的任何地方使用 SumToStr 函数了。<br><br><br>Q: 但是它仅仅能工作在一个TfrReport组件中。可我想在任何地方（在所有的TfrReport组件中）使用的我的自定义函数？<br>A: 使 OnUserFunction event 句柄作为所有组件的公用句柄。如果你不能做到这一点，你需要创建函数库：<br><br>type<br>TMyFunctionLibrary = class(TfrFunctionLibrary)<br>public<br>constructor Create; override;<br>procedure DoFunction(Fno: Integer; p1, p2, p3: Variant;<br>var val: Variant); override;<br>end;<br><br>constructor TMyFunctionLibrary.Create;<br>begin<br>inherited Create;<br>with List do<br>begin<br>Add(‘DATETOSTR‘);<br>Add(‘SUMTOSTR‘);<br>end;<br>end;<br><br>procedure TMyFunctionLibrary.DoFunction(Fno: Integer; p1, p2, p3: Variant;<br>var val: Variant);<br>begin<br>val := 0;<br>case Fno of<br>0: val := My_DateConvertion_Routine(frParser.Calc(p1));<br>1: val := My_SumConvertion_Routine(frParser.Calc(p1));<br>end;<br>end;<br><br>要注册函数库，调用<br>frRegisterFunctionLibrary(TMyFunctionLibrary);<br>要卸载函数库，调用<br>frUnRegisterFunctionLibrary(TMyFunctionLibrary);<br><br><br>Q: 我怎样将我的函数添加到函数列表中 (用表达式生成器)?<br>A: 使用 frAddFunctionDesc 过程 (在FR_Class 单元中):<br><br>frAddFunctionDesc(FuncLib, ‘SUMTOSTR‘, ‘My functions‘,<br>‘SUMTOSTR(&lt;Number&gt;)/Converts number to its verbal presentation.‘);<br><br>注意: &quot;/&quot; 符号是必须的! 它从它的描述中分隔函数语法。<br>FuncLib 被声明为你自己的函数库 (如果你不使用函数库可以将其设置为nil). 当函数库未注册时，所有它的函数将自动从函数列表中删除。<br><br><br>---------------- 使用变量 -------------------------------------<br><br>Q: 我怎样编程实现填充变量列表（在数据词典中）?<br><br>A: 数据词典中的所有变量及分类都被存储在 TfrReport.Dictionary.Variables 中.<br><br>with frReport1.Dictionary do<br>begin<br>// 创建分类(名称用空白)<br>Variables[‘ New category‘] := ‘‘;<br>// 创建变量<br>Variables[‘New Variable‘] := ‘CustomerData.Customers.&quot;CustNo&quot;‘;<br>Variables[‘Another Variable‘] := ‘Page#‘;<br>end;<br><br>Q: 我定义了字符串变量:<br><br>with frReport1.Dictionary do<br>Variables[‘Month‘] := ‘March‘;<br><br>但是当我运行报表是，出现了错误，为什么?<br><br>A: 因为 FastReport 假定数据词典中的字符串变量值是一个表达式，它需要分析、计算它。<br>可以使用其它的方法:<br><br>with frReport1.Dictionary do<br>Variables[‘Month‘] := ‘‘‘‘ + ‘March‘ + ‘‘‘‘;<br><br>或者, 使用 frVariables 来传输固定数据到报表。<br><br><br>Q: 我不想在数据词典中显示某些数据集？<br><br>A: 使用 TfrReport.Dictionary.DisabledDatasets:<br><br>with frReport1.Dictionary do<br>begin<br>// 关闭该数据集<br>DisabledDatasets.Add(‘CustomerData.Bio‘);<br>// 或者, 关闭整个数据模块/窗体<br>DisabledDatasets.Add(‘CustomerData*‘);<br>end;<br><br><br>Q: 我怎样将数据传送到报表?<br><br>A: 有几个方法可以实现它. 第一是使用全局对象 frVariables (在 FR_Class 单元中被定义):<br><br>frVariables[‘My variable‘] := 10;<br><br>这段代码创建了一个名称为“My variable”，值为 10 的变量。这是最好的传输固定数据的报表的方法。<br><br>第二种方法是使用 TfrReport.OnGetValue 事件. 这可以使用这个方法来传送动态数据、记录等。<br><br>procedure TForm1.frReport1GetValue(ParName: String; var ParValue: Variant);<br>begin<br>if ParName = ‘MyField‘ then<br>ParValue := Table1MyField.Value;<br>end;<br><br>最后, 第三种方法是通过编程在数据词典中定义变量（可以参考以前的问题）:<br><br>with frReport1.Dictionary do<br>begin<br>Variables[‘MyVariable‘] := ‘CustomerData.Customers.&quot;CustNo&quot;‘;<br>Variables[‘Another Variable‘] := ‘10‘;<br>end;<br><br><br>Q: 我能在报表和程序间传送数据吗?<br>A: 使用 frVariables 对象. 如果你在报表的任何对象的脚本中写入以下代码：<br><br>MyVariable := 10<br><br>那么，在你的程序中，你可以使用以下代码来获取 MyVariable 的值:<br>v := frVariables[‘MyVariable‘];<br><br><br>---------------- 脚本 (FastReport Pascal) ---------------------------------<br><br>Q: Band 中是否可以使用脚本?<br><br>A: 当然. 选择 band ，然后按 Ctrl+Enter 或在对象浏览器中选择 &quot;OnBeforePrint&quot; 属性。<br><br>Q: 报表页中是否可以使用脚本?<br><br>A: 当然. 选择页 (在空白处单击) ，然后在对象浏览器中选择 &quot;OnBeforePrint&quot; 属性。如果该页是一个对话框窗体，那么这个属性就是 &quot;OnActivate&quot;.<br><br><br>Q: 我有两个对象: Memo1 和 Memo2. 我能否在 Memo1 的脚本中调用 Memo2 的属性和方法？<br><br>A: 当然， 例如，你可以这样做： 对象名.属性名.<br><br><br>Q: 在脚本中，我可以使用对象的哪些属性?<br><br>A: 几乎所有你能在对象浏览器中看到的属性。例如，可以使用 Font.Name, Font.Size等来存取字体属性。<br><br><br>---------------- 其它问题 --------------------------------------------<br><br>Q: 怎样改变多页报表中某一页的顺序?<br><br>A: 拖动页标签到目的位置。<br><br><br>Q: 我想查看所有的字段及变量，我想在报表中使用列表来实现它？<br><br>A: 设置 TfrReport.MixVariablesAndDBFields := True.现在，所有的数据字段及变量可在“插入数据字段”对话框中可存取了。<br><br><br>Q: 我不想显示导入选项对话框？<br><br>A: 在导入组件（比如，TfrTextExport)中设置所有必需的选项，然后通过设置ShowDialog属性为False来关闭此对话框。<br><br><br>Q: 为什么 TotalPages 变量不起作用? 它总是返回 0.<br><br>A: 在你的报表中设置 Two-pass 选项. 要设置它，你需要在报表设计器的“文件”菜单中，打开“报表选项”对话框。<br><br><br>Q: 我用BLOB字段来存储我的报表。当我运行报表设计器时，它显示我的报表未命名？<br><br>A: 在运行报表设计器前，这样做:<br><br>frReport1.FileName := ‘Name of my report‘;<br><br><br>Q: 我想在重新定义报表设计器中的“打开”及“保存”按钮的功能？<br><br><br>A: 查看 TfrDesigner 组件. 它有几个必需的事件: OnLoadReport 和<br>OnSaveReport. 这里有一小段代码例子:<br><br>procedure TForm1.frDesigner1LoadReport(Report: TfrReport;<br>var ReportName: String; var Opened: Boolean);<br>begin<br>with MyOpenDialog do<br>begin<br>Opened := ShowModal = mrOk;<br>if Opened then<br>begin<br>Report.LoadFromBlobField(…);<br>ReportName := …;<br>end;<br>end;<br>end;<br><br>procedure TForm1.frDesigner1SaveReport(Report: TfrReport;<br>var ReportName: String; SaveAs: Boolean; var Saved: Boolean);<br>begin<br>if SaveAs then<br>with MySaveDialog do<br>begin<br>Saved := ShowModal = mrOk;<br>if Saved then<br>begin<br>Report.SaveToBlobField(…);<br>ReportName := …;<br>end;<br>end<br>else<br>Report.SaveToBlobField(…);<br>end;<br><br><br>Q: 在 QR 中, 我可以写这样的代码： QRLabel1.Caption := ‘Some text‘. 我可以用FR这样做吗？<br><br>A: FR 对象并不是一个组件 (这并不像 QR, RB). 但使用 TfrReport.FindObject 方法可以通过对象名称找到该对象。<br><br>var<br>t: TfrMemoView;<br>begin<br>t := TfrMemoView(frReport1.FindObject(‘Memo1‘));<br>if t &lt;&gt; nil then<br>t.Memo.Text := ‘FastReport‘;<br>end;<br><br><br>Q: 我想在用户预览（TfrPreview组件）中自定义热键？<br><br>A: 这个组件有个窗口: Tform 属性. 将自定义句柄指定到 Window.OnKeyDown 属性.<br><br><br>Q: Fast Report 2.4 不能装载 FreeReport 2.21 文件？<br><br>A: 这仅需要使用16进制数改变报表文件的第一字节，然后在源代码中修改下面的部分。在这些修改之后， 装载报表并保存它. 最后，返回到源代码处.<br><br>FR_Class:<br><br>function ReadString(Stream: Tstream): String;<br>begin<br>{ if frVersion &gt;= 23 then}<br>Result := frReadString(Stream) {else<br>Result := frReadString22(Stream);}<br>end;<br><br>procedure ReadMemo(Stream: Tstream; Memo: Tstrings);<br>begin<br>{ if frVersion &gt;= 23 then}<br>frReadMemo(Stream, Memo){ else<br>frReadMemo22(Stream, Memo);}<br>end;<br><br><br>FR_Utils:<br><br>procedure frReadMemo(Stream: Tstream; l: Tstrings);<br>var<br>s: String;<br>b: Byte;<br>n: Word;<br>begin<br>l.Clear;<br>l.Text := frReadString(Stream); exit;<br>Stream.Read(n, 2);<br>if n &gt; 0 then<br>repeat<br>Stream.Read(n, 2);<br>SetLength(s, n);<br>Stream.Read(s[1], n);<br>l.Add(s);<br>Stream.Read(b, 1);<br>until b = 0<br>else<br>Stream.Read(b, 1);<br>end;<br><br>function frReadString(Stream: Tstream): String;<br>var<br>s: String;<br>n: Integer;<br>b: Byte;<br>begin<br>Stream.Read(n, 4);<br>SetLength(s, n);<br>Stream.Read(s[1], n);<br>if (n &gt; 0) and (s[n] = #$0A) then<br>SetLength(s, n - 2);<br>// Stream.Read(b, 1);<br>Result := s;<br>end;<br><br><br>Q: 怎样不在打印预览中打印报表？<br>A: 这里有一段代码:<br><br>frReport1.PrepareReport;<br>frReport1.PrintPreparedReport(‘‘, 1, True, frAll);<br>或<br>frReport1.PrintPreparedReportDlg;<br><br><br>Q: 我想在报表中旋转图片。问题是这张图片是由我的应用程序生成的。是否有方法可以在打印前将这幅图片装载到报表中？<br><br>A: 使用 TfrReport.OnBeforePrint 事件:<br><br>if View.Name = ‘Picture1‘ then<br>TfrPictureView(View).Picture.LoadFromFile(…) 或<br>.Assign 或<br>.你所想要做的任何事情<br><br>资料引用:http://www.knowsky.com/336300.html]]></description>
	<author>XCC</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30892</comments>
	<dc:creator>XCC</dc:creator>
</item>

<item>
	<title><![CDATA[DBGridEh和dbgrid导出]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30891</link> 
	<pubDate>2008-12-26 14:44:10</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30891</guid>
	<description><![CDATA[uses  ComObj<br>如果你用DBGrid把数据显示出来，不管你用什么数据库，都可以导出到Excel表里！   <br>    <br>  uses   ComObj;   <br>    <br>  procedure   TSearchinforfrm.Button11Click(Sender:   TObject);   <br>  var   <br>      eclApp,WorkBook:olevariant;   <br>      xlsFileName:string;   <br>      i,j:integer;   <br>  begin   <br>    <br>      if   SaveDialog1.Execute   then   <br>          xlsFileName:=SaveDialog1.FileName;   <br>    <br>          try   <br>          eclApp:=CreateOleObject('Excel.Application');   <br>          WorkBook:=CreateOleObject('Excel.Sheet');   <br>          except   <br>          Application.MessageBox('系统没有安装Microsoft   Excel','Microsoft   Excel',MB_OK+MB_ICONWarning);   <br>          Exit;   <br>          end;   <br>    <br>          try   <br>          WorkBook:=eclApp.workbooks.Add;   <br>          for   i:=0   to   DBGrid1.Columns.Count-1   do   <br>          begin   <br>          //这里可以更改列名，用if   ...   then进行判断和指定列名   <br>          eclApp.Cells(1,i+1):=DBGrid1.Columns[i].FieldName;   <br>          end;   <br>    <br>          DBGrid1.DataSource.DataSet.First;   <br>          j:=2;   <br>          while   not   DBGrid1.DataSource.DataSet.Eof   do   <br>          begin   <br>          for   i:=0   to   DBGrid1.DataSource.DataSet.FieldCount-1   do   <br>          begin   <br>          eclApp.Cells(j,i+1):=DBGrid1.DataSource.DataSet.Fields[i].Value;   <br>          end;   <br>          DBGrid1.DataSource.DataSet.Next;   <br>          inc(j);   <br>          end;   <br>    <br>          WorkBook.SaveAS(xlsFileName);   <br>          WorkBook.close;   <br>          except   <br>          ShowMessage('文件导出失败！');   <br>          Exit;   <br>          end;   <br>          Application.MessageBox('保存成功!','恭喜',MB_OK   +   MB_ICONINFORMATION);   <br>  end;]]></description>
	<author>XCC</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30891</comments>
	<dc:creator>XCC</dc:creator>
</item>

<item>
	<title><![CDATA[各种数据库的ado连接字符串]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30889</link> 
	<pubDate>2008-12-26 14:21:41</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30889</guid>
	<description><![CDATA[作者: wqch88<br>标题: 各种数据库的ado连接字符串 <br>关键字: 连接字符串 <br>分类: 开发技巧 <br>密级: 公开 <br>(评分: , 回复: 0, 阅读: 2886) &amp;raquo;&amp;raquo; <br>1.Oracle:<br> a&gt;先设置好Oracle本地服务名配置,如:USER_DB<br> b&gt;配置ODBC引擎:ODBC_DB,该引擎的服务器指向Oracle的本地服务名,即:USER_DB<br> c&gt;配置联接字符串,如:Provider=MSDASQL.1;Password=user;Persist Security Info=True;User ID=user;Data Source=ODBC_DB;Extended Properties=&quot;DSN=ODBC_DB;UID=user;PWD=user;SERVER=USER_DB;&quot;<br>2.Access<br> 联接字符串:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\aa.mdb;Jet OLEDB:Database password=123<br>3.DBF(Dbase数据库)<br> 联接字符串:Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=D:\DBF\;Mode=Share Deny None;Extended Properties=DBase 5.0<br>4.Excel<br> 联接字符串:Provider=Microsoft.Jet.OLEDB.4.0;Password=&quot;&quot;;User ID=Admin;Data Source=F:\Excel\demo.xls;Mode=Share Deny None;Extended Properties=Excel 8.0;<br>5.TEXT<br> 联接字符串:Provider=Microsoft.Jet.OLEDB.4.0;Password=&quot;&quot;;User ID=Admin;Data Source=D:\txt;Mode=Share Deny None;Extended Properties=&quot;text;HDR=YES;FMT=Delimited&quot;<br>6.DBF(Visual Foxpro数据库)<br> 联接字符串:Provider=MSDASQL;Persist Security Info=False;Extended Properties=&quot;DSN=Visual FoxPro Tables;UID=;SourceDB=D:\DBF\;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;&quot;<br>7.db(Paradox7.0)<br>联接字符串:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Borland\Borland Shared\Data;Mode=Share Deny None;Extended Properties=paradox 7.x <br>]]></description>
	<author>XCC</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30889</comments>
	<dc:creator>XCC</dc:creator>
</item>

<item>
	<title><![CDATA[DevExpress部分使用技巧]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30888</link> 
	<pubDate>2008-12-26 14:12:01</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30888</guid>
	<description><![CDATA[本文由 轻舞肥羊 发表于 大富翁论坛<br>转载请标明出处,谢谢<br><br>声明:以下代码请看懂再使用,本人水平有限,发现bug希望提出,让我们共同改进 <br><br><br><br>2004-1-10 17:06:00    <br> 发表评语&amp;raquo;&amp;raquo;&amp;raquo;     <br><br> 2004-1-10 17:08:06    1.扩展cxLookupComboBox,使其支持多列查询的cxLookupComboBoxEx //==============================================================================<br>// Unit Name: cxLookupComboBoxEx<br>// Author   : ysai<br>// Date     : 2003<br>// Purpose  : 扩展cxLookupComboBox,cxDBLookupComboBox,使其支持多列过滤<br>// History  :<br>//    2003-05-28大数据量改进<br>//    2003-07-07可操作性改进<br>//    2003-08-20效率改进<br>//    2003-08-29加入过滤延时<br>// 注意:<br>//     限制1,不能再使用Properties.OnChange事件<br>//     限制2,不能再使用Properties.ListSource.DataSet.OnFilterRecord事件<br>//     限制3,不能再使用Properties.ListSource.DataSet.Filtered属性<br>//     其它,最好在设计期设好一切属性,运行期再设置属性可能引发求知错误<br>//==============================================================================<br><br>unit cxLookupComboBoxEx;<br><br>interface<br><br>uses<br>  SysUtils, Classes, Controls, Windows, Messages,DB,StrUtils,<br>  cxControls, cxContainer, cxEdit, cxTextEdit,<br>  cxMaskEdit, cxDropDownEdit, cxLookupEdit, cxDBLookupEdit,<br>  cxDBLookupComboBox;<br><br>type<br>  TcxLookupComboBoxEx = class(TcxLookupComboBox)<br>  private<br>    //保存要过滤的字段列表<br>    FFieldList  : TList;<br>    FFindText   : String;<br>    <br>    //过滤事件<br>    procedure _OnFilterRecord(DataSet: TDataSet; var Accept: Boolean);<br>    //编辑框文字改变事件<br>    procedure _OnChange(Sender : TObject);<br>    procedure GetFieldList;<br>    //延时过滤消息<br>    procedure WMTimer (var Message: TMessage); message WM_TIMER;<br>  protected<br>    //下拉表格收回时<br>    procedure CloseUp(AAccept: Boolean); override;<br>    //过滤过程<br>    procedure _FilterListSource;<br>    //初始化下拉表格事件<br>    procedure DoInitPopup; override;<br>  public<br>    constructor Create(AOwner : TComponent); override;<br>    destructor Destroy; override;<br>    //更新要过滤的字段列表<br>    procedure UpdateFilterFields;<br>  published<br>  end;<br><br>  TcxDBLookupComboBoxEx = class(TcxDBLookupComboBox)<br>  private<br>    //保存要过滤的字段列表<br>    FFieldList  : TList;<br>    FFindText   : String;<br><br>    //过滤事件<br>    procedure _OnFilterRecord(DataSet: TDataSet; var Accept: Boolean);<br>    //编辑框文字改变事件<br>    procedure _OnChange(Sender : TObject);<br>    //取得要过滤的字段列表<br>    procedure GetFieldList;<br>    //延时过滤消息<br>    procedure WMTimer (var Message: TMessage); message WM_TIMER;<br>  protected<br>    //下拉表格收回时<br>    procedure CloseUp(AAccept: Boolean); override;<br>    //过滤过程<br>    procedure _FilterListSource;<br>    //初始化下拉表格事件<br>    procedure DoInitPopup; override;<br>  public<br>    constructor Create(AOwner : TComponent); override;<br>    destructor Destroy; override;<br>    //更新要过滤的字段列表<br>    procedure UpdateFilterFields;<br>  published<br>  end;<br><br>procedure Register;<br><br>implementation<br><br>const<br>  UM_TIMER_FILTER = WM_USER + $101;             //自定义延时消息ID<br>  FILTERTIMER     = 500;                        //延时时间<br>  DROPDOWN_ROWS   = 12;<br><br>procedure Register;<br>begin<br>  RegisterComponents('Dev Express', [TcxLookupComboBoxEx,TcxDBLookupComboBoxEx]);<br>end;<br><br>{ TcxLookupComboBoxEx }<br><br>procedure TcxLookupComboBoxEx.CloseUp(AAccept: Boolean);<br>begin<br>  inherited;<br>  //收起下拉后取消过滤<br>  if  Assigned(Properties.ListSource) then<br>    if Assigned(Properties.ListSource.DataSet) then<br>      Properties.ListSource.DataSet.Filtered := False;<br>end;<br><br>constructor TcxLookupComboBoxEx.Create(AOwner: TComponent);<br>begin<br>  inherited;<br>  //默认值<br>  Properties.AutoSelect                 :=  False;<br>  Properties.DropDownAutoSize           :=  True;<br>  Properties.DropDownListStyle          :=  lsEditList;<br>  Properties.DropDownRows               :=  DROPDOWN_ROWS;<br>  Properties.DropDownSizeable           :=  True;<br>  Properties.IncrementalFiltering       :=  False;<br>  Properties.Revertable                 :=  True;<br>  Properties.OnChange                   :=  _OnChange;<br>  Properties.UseLeftAlignmentOnEditing  :=  False;<br>end;<br><br>destructor TcxLookupComboBoxEx.Destroy;<br>begin<br>  //释放过滤字段列表<br>  if Assigned(FFieldList) then FFieldList.Free;<br>  inherited;<br>end;<br><br>procedure TcxLookupComboBoxEx.DoInitPopup;<br>begin<br>  //取得过滤字段<br>  if  Assigned(Properties.ListSource) then<br>    if Assigned(Properties.ListSource.DataSet) then<br>    begin<br>      GetFieldList;<br>      Properties.ListSource.DataSet.Filtered := False;<br>    end;<br>  inherited DoInitPopup;<br>end;<br><br>procedure TcxLookupComboBoxEx._FilterListSource;<br>//过滤字段<br>begin<br>  if Assigned(Properties.ListSource)<br>      and Assigned(Properties.ListSource.DataSet) then<br>  try<br>    Properties.ListSource.DataSet.DisableControls;<br>    Properties.ListSource.DataSet.Filtered        :=  False;<br>    Properties.ListSource.DataSet.OnFilterRecord  :=  _OnFilterRecord;<br>    if Text &lt;&gt;  '' then<br>    begin<br>      FFindText :=  Text;<br>      if SelLength &gt; 0 then<br>        FFindText :=  LeftStr(Text,SelStart);<br>      Properties.ListSource.DataSet.Filtered  :=  FFindText &lt;&gt; '';<br>    end;<br>    Changed;<br>  finally<br>    Properties.ListSource.DataSet.EnableControls;<br>  end;<br>end;<br><br>procedure TcxLookupComboBoxEx.GetFieldList;<br>//取得过滤字段列表<br>var<br>  i           : Integer;<br>  sFieldName  : String;<br>  fdTemp      : TField;<br>begin<br>  if not Assigned(FFieldList) then<br>  begin<br>    FFieldList  :=  TList.Create;<br>    for i:=0 to Properties.ListColumns.Count -1 do<br>    begin<br>      sFieldName := Properties.ListColumns.Items[i].FieldName;<br>      if sFieldName = '' then Continue;<br>      fdTemp  :=  Properties.ListSource.DataSet.FindField(sFieldName);<br>      if Assigned(fdTemp) then<br>        FFieldList.Add(Pointer(fdTemp));<br>    end;<br>  end;<br>end;<br><br>procedure TcxLookupComboBoxEx._OnChange(Sender: TObject);<br>//设置延时<br>begin<br>  if Focused and DroppedDown then<br>  begin<br>    KillTimer(Handle,UM_TIMER_FILTER);<br>    SetTimer(Handle,UM_TIMER_FILTER,FILTERTIMER,nil);<br>  end;<br>end;<br><br>procedure TcxLookupComboBoxEx._OnFilterRecord(DataSet: TDataSet;<br>  var Accept: Boolean);<br>//过滤事件<br>var<br>  s : String;<br>  i : Integer;<br>begin<br>  s :=  LowerCase(FFindText);<br>  if (s &lt;&gt; '') and (Properties.ListColumns.Count &gt; 0) then<br>  begin<br>    Accept  :=  False;<br>    for i := 0 to FFieldList.Count -1 do<br>    begin<br>      Accept  :=  Pos(s,LowerCase(TField(FFieldList[i]).AsString))&gt;0;<br>      if Accept then Exit;<br>    end;<br>  end<br>  else<br>    Accept  :=  True;<br>end;<br><br>procedure TcxLookupComboBoxEx.WMTimer(var Message: TMessage);<br>//延时更新消息<br>begin<br>  KillTimer(Handle,UM_TIMER_FILTER);<br>  if Focused and DroppedDown then _FilterListSource;<br>end;<br><br>procedure TcxLookupComboBoxEx.UpdateFilterFields;<br>//更新要过滤的字段列表<br>begin<br>  if Assigned(FFieldList) then<br>  begin<br>    FFieldList.Free;<br>    FFieldList  :=  nil;<br>  end;<br>  GetFieldList;<br>end;<br><br>{ TcxDBLookupComboBoxEx }<br><br>procedure TcxDBLookupComboBoxEx.CloseUp(AAccept: Boolean);<br>begin<br>  inherited;<br>  //收起下拉后取消过滤<br>  if  Assigned(Properties.ListSource) then<br>    if Assigned(Properties.ListSource.DataSet) then<br>      Properties.ListSource.DataSet.Filtered := False;<br>end;<br><br>constructor TcxDBLookupComboBoxEx.Create(AOwner: TComponent);<br>begin<br>  inherited;<br>  //默认值<br>  Properties.AutoSelect                 :=  False;<br>  Properties.DropDownListStyle          :=  lsEditList;<br>  Properties.DropDownRows               :=  DROPDOWN_ROWS;<br>  Properties.DropDownSizeable           :=  True;<br>  Properties.IncrementalFiltering       :=  False;<br>  Properties.Revertable                 :=  True;<br>  Properties.OnChange                   :=  _OnChange;<br>  Properties.UseLeftAlignmentOnEditing  :=  False;<br>end;<br><br>destructor TcxDBLookupComboBoxEx.Destroy;<br>begin<br>  //释放过滤字段列表<br>  if Assigned(FFieldList) then FFieldList.Free;<br>  inherited;<br>end;<br><br>procedure TcxDBLookupComboBoxEx.DoInitPopup;<br>begin<br>  //取得过滤字段<br>  if  Assigned(Properties.ListSource) then<br>    if Assigned(Properties.ListSource.DataSet) then<br>    begin<br>      GetFieldList;<br>      Properties.ListSource.DataSet.Filtered := False;<br>    end;<br>  inherited DoInitPopup;<br>end;<br><br>procedure TcxDBLookupComboBoxEx._FilterListSource;<br>//过滤字段<br>begin<br>  if Assigned(Properties.ListSource)<br>      and Assigned(Properties.ListSource.DataSet) then<br>  try<br>    Properties.ListSource.DataSet.DisableControls;<br>    Properties.ListSource.DataSet.Filtered        :=  False;<br>    Properties.ListSource.DataSet.OnFilterRecord  :=  _OnFilterRecord;<br>    if Text &lt;&gt;  '' then<br>    begin<br>      FFindText :=  Text;<br>      if SelLength &gt; 0 then<br>        FFindText :=  LeftStr(Text,SelStart);<br>      Properties.ListSource.DataSet.Filtered  :=  FFindText &lt;&gt; '';<br>    end;<br>    Changed;<br>  finally<br>    Properties.ListSource.DataSet.EnableControls;<br>  end;<br>end;<br><br>procedure TcxDBLookupComboBoxEx.GetFieldList;<br>//取得过滤字段列表<br>var<br>  i           : Integer;<br>  sFieldName  : String;<br>  fdTemp      : TField;<br>begin<br>  if not Assigned(FFieldList) then<br>  begin<br>    FFieldList  :=  TList.Create;<br>    for i:=0 to Properties.ListColumns.Count -1 do<br>    begin<br>      sFieldName := Properties.ListColumns.Items[i].FieldName;<br>      if sFieldName = '' then Continue;<br>      fdTemp  :=  Properties.ListSource.DataSet.FindField(sFieldName);<br>      if Assigned(fdTemp) then<br>        FFieldList.Add(Pointer(fdTemp));<br>    end;<br>  end;<br>end;<br><br>procedure TcxDBLookupComboBoxEx._OnChange(Sender: TObject);<br>//设置延时<br>begin<br>  if Focused and DroppedDown then<br>  begin<br>    KillTimer(Handle,UM_TIMER_FILTER);<br>    SetTimer(Handle,UM_TIMER_FILTER,FILTERTIMER,nil);<br>  end;<br>end;<br><br>procedure TcxDBLookupComboBoxEx._OnFilterRecord(DataSet: TDataSet;<br>  var Accept: Boolean);<br>//过滤事件<br>var<br>  s : String;<br>  i : Integer;<br>begin<br>  s :=  LowerCase(FFindText);<br>  if (s &lt;&gt; '') and (Properties.ListColumns.Count &gt; 0) then<br>  begin<br>    Accept  :=  False;<br>    for i := 0 to FFieldList.Count -1 do<br>    begin<br>      Accept  :=  Pos(s,LowerCase(TField(FFieldList[i]).AsString))&gt;0;<br>      if Accept then Exit;<br>    end;<br>  end<br>  else<br>    Accept  :=  True;<br>end;<br><br>procedure TcxDBLookupComboBoxEx.WMTimer(var Message: TMessage);<br>//延时更新消息<br>begin<br>  KillTimer(Handle,UM_TIMER_FILTER);<br>  if Focused and DroppedDown then _FilterListSource;<br>end;<br><br>procedure TcxDBLookupComboBoxEx.UpdateFilterFields;<br>//更新要过滤的字段列表<br>begin<br>  if Assigned(FFieldList) then<br>  begin<br>    FFieldList.Free;<br>    FFieldList  :=  nil;<br>  end;<br>  GetFieldList;<br>end;<br><br>end. <br><br> <br> 2004-1-10 17:14:06    2.动态生成TcxGridDBTableView的列及页脚的合计栏 var<br>  i   : Integer;<br>  cl  : TcxGridDBColumn;<br>begin<br>  Screen.Cursor :=  crHourGlass;<br>  cxtvMaster.BeginUpdate;<br>  try<br>    cxtvMaster.ClearItems;<br>    cxtvMaster.DataController.Summary.FooterSummaryItems.Clear;<br>    for i := 0 to cxtvMaster.DataController.DataSet.FieldCount - 1 do<br>    begin<br>      cl  :=  cxtvMaster.CreateColumn;<br>      cl.DataBinding.FieldName :=<br>          cxtvMaster.DataController.DataSet.Fields[i].FieldName;<br>      if cxtvMaster.DataController.DataSet.Fields[i] is TNumericField then<br>      begin<br>        TNumericField(cxtvMaster.DataController.DataSet.Fields[i])<br>            .DisplayFormat  :=  '#,##0.00';<br>        cl.Width := 80;<br>        with TcxGridDBTableSummaryItem(<br>            cxtvMaster.DataController.Summary.FooterSummaryItems.Add) do<br>        begin<br>          Column  :=  cl;<br>          FieldName :=  cl.DataBinding.FieldName;<br>          Format  :=  '#,##0.00';<br>          Kind  :=  skSum;<br>        end;<br>      end<br>      else if cxtvMaster.DataController.DataSet.Fields[i] is TStringField then<br>        cl.Width := 100<br>      else<br>        cl.Width := 80;<br>      cl.HeaderAlignmentHorz :=  taCenter;<br>    end;  //if<br>  finally<br>    cxtvMaster.EndUpdate;<br>    Screen.Cursor := crDefault;<br>  end;<br>end; <br><br> <br> 2004-1-10 17:24:32    3.动态生成TcxGridDBBandedTableView的列及页脚的合计栏 如果存储过程或SQL返回如下结果集<br><br>员工     1月$  1月￥ 2月$ 2月￥ 合计$ 合计￥<br>-------------------------------------------<br>测试员A  200   1658  300  2487  500   4145<br><br>将生成如下样式的Grid(页脚没有画出,麻烦,另外设置了显示格式,金额将以#,##0.00的方式显示)<br>_________________________________________________<br>|  员工  |    1月     |    2月     |    合计    |<br>|-----------------------------------------------|<br>|  员工  |  ＄ |  ￥  |  ＄ |  ￥  |  ＄ |  ￥  |<br>|-----------------------------------------------|<br>|测试员A | 200 | 1658 | 300 | 2487 | 500 | 4145 |<br>-------------------------------------------------<br><br>var<br>  i     : Integer;<br>  cl    : TcxGridDBBandedColumn;<br>begin<br>  Screen.Cursor :=  crHourGlass;<br>  cxbtvMaster.BeginUpdate;<br>  try<br>    cxbtvMaster.ClearItems;<br>    cxbtvMaster.Bands.Clear;<br>    cxbtvMaster.DataController.Summary.FooterSummaryItems.Clear;<br>    for i := 0 to cxbtvMaster.DataController.DataSet.FieldCount - 1 do<br>    begin<br>      if i = 0 then<br>        with cxbtvMaster.Bands.Add do<br>        begin<br>          Options.HoldOwnColumnsOnly  :=  True;<br>          Caption  := cxbtvMaster.DataController.DataSet.Fields[i].FieldName;<br>        end;<br>      if RightStr(<br>          cxbtvMaster.DataController.DataSet.Fields[i].FieldName,<br>          1) = '$' then<br>        with cxbtvMaster.Bands.Add do<br>        begin<br>          Options.HoldOwnColumnsOnly  :=  True;<br>          Caption  := Copy(<br>              cxbtvMaster.DataController.DataSet.Fields[i].FieldName, 1,<br>              Length(cxbtvMaster.DataController.DataSet.Fields[i].FieldName)<br>              - 1);<br>          cxbtvMaster.DataController.DataSet.Fields[i].DisplayLabel :=  '＄';<br>        end;<br>      if RightStr(<br>          cxbtvMaster.DataController.DataSet.Fields[i].FieldName,<br>          1) = '￥' then<br>        cxbtvMaster.DataController.DataSet.Fields[i].DisplayLabel :=  '￥';<br><br>      cl  :=  cxbtvMaster.CreateColumn;<br>      cl.HeaderAlignmentHorz :=  taCenter;<br>      cl.Position.BandIndex :=  cxbtvMaster.Bands.Count - 1;<br>      cl.DataBinding.FieldName :=<br>          cxbtvMaster.DataController.DataSet.Fields[i].FieldName;<br>      if cxbtvMaster.DataController.DataSet.Fields[i] is TNumericField then<br>      begin<br>        TNumericField(cxbtvMaster.DataController.DataSet.Fields[i])<br>            .DisplayFormat  :=  '#,##0.00';<br>        cl.Width := 80;<br>        with TcxGridDBBandedTableSummaryItem(<br>            cxbtvMaster.DataController.Summary.FooterSummaryItems.Add) do<br>        begin<br>          Column  :=  cl;<br>          FieldName :=  cl.DataBinding.FieldName;<br>          Format  :=  '#,##0.00';<br>          Kind  :=  skSum;<br>        end;<br>      end<br>      else if cxbtvMaster.DataController.DataSet.Fields[i] is TStringField then<br>        cl.Width := 100<br>      else<br>        cl.Width := 80;<br>    end;  //if<br>  finally<br>    cxbtvMaster.EndUpdate;<br>    Screen.Cursor := crDefault;<br>  end;<br>end; <br><br> <br> 2004-1-31 22:36:25    4.自动调整列宽的方法要注意的地方 可以用ApplyBestFit实现自动列宽;<br>不能在BeginUpdate和EndUpdate之间调用这个方法,否则会产生下标越界错误;<br>在BeginUpdate和EndUpdate中清除/建立列不会产生屏幕闪烁,其它需要长时间更新cxGrid数据的操作最好放在BeginUpdate和EndUpdate执行,并用try包起来. <br><br> <br> 2004-2-8 15:32:30    DevExpress Bar的动态菜单 没有什么说明,细心点应该知道表结构及数据的内容形式<br>对比了一下代码,用dxBar比用ToolBar+PopupMenu生成动态菜单要简单,只用了一个递归过程<br><br>type<br>  //菜单项<br>  PMenuItemInfo = ^TMenuItemInfo;<br>  TMenuItemInfo = record<br>    ID            : string;<br>    ParentID      : string;<br>    Caption       : string;<br>    Hint          : string;<br>    LibraryName   : string;<br>    ProcedureName : string;<br>    wParam        : Integer;<br>    lParam        : Integer;<br>  end;<br><br>procedure TmgMainForm.BuildMenu;<br>//生成菜单<br><br>  procedure SetMenuItemInfo(<br>      const ADataSet  : TDataSet;<br>      const AItem     : PMenuItemInfo<br>      );<br>  begin<br>    AItem.ID            :=  ADataSet.FieldByName('ID').AsString;<br>    AItem.ParentID      :=  ADataSet.FieldByName('ParentID').AsString;<br>    AItem.Caption       :=  ADataSet.FieldByName('Caption').AsString;<br>    AItem.Hint          :=  ADataSet.FieldByName('Hint').AsString;<br>    AItem.LibraryName   :=  ADataSet.FieldByName('LibraryName').AsString;<br>    AItem.ProcedureName :=  ADataSet.FieldByName('ProcedureName').AsString;<br>    AItem.wParam        :=  ADataSet.FieldByName('wParam').AsInteger;<br>    AItem.lParam        :=  ADataSet.FieldByName('lParam').AsInteger;<br>  end;<br><br>  procedure CreateItemList(<br>      const ADataSet  : TDataSet;<br>      const AList     : TList;<br>      const AText     : string<br>      );<br>  //根据父节点建立子项目列表<br>  var<br>    m : PMenuItemInfo;<br>    i : Integer;<br>  begin<br>    ADataSet.First;<br>    for i := 0 to ADataSet.RecordCount - 1 do<br>    begin<br>      if ADataSet.FieldByName('ParentID').AsString = AText then<br>      begin<br>        New(m);<br>        SetMenuItemInfo(ADataSet,m);<br>        AList.Add(m);<br>        ADataSet.Delete;<br>      end else<br>        ADataSet.Next;<br>    end;  //for<br>  end;<br><br>  procedure CreateMenuItems(<br>      const ADataSet    : TDataSet;<br>      const AKeyValue   : string;<br>      const AItemLinks  : TdxBarItemLinks;<br>      const AIndex      : Integer<br>      );<br>  //建立菜单项<br>  var<br>    db  : TdxBarButton;<br>    dbs : TdxBarSubItem;<br>    l   : TList;<br>    i   : Integer;<br>    j   : Integer;<br>    bg  : Boolean;<br>  begin<br>    bg  :=  False;<br>    j :=  AIndex;<br>    l :=  TList.Create;<br>    try<br>      CreateItemList(ADataSet, l, AKeyValue);<br>      for i := 0 to l.Count - 1 do<br>      begin<br>        if ADataSet.Locate('ParentID', PMenuItemInfo(l[i]).ID, []) then<br>        begin<br>          //有子项<br>          dbs         :=  TdxBarSubItem.Create(dxBar);<br>          dbs.Caption :=  PMenuItemInfo(l[i]).Caption;<br>          dbs.Hint    :=  PMenuItemInfo(l[i]).Hint;<br>          dbs.Tag     :=  Integer(l[i]);<br>          if AIndex &gt; 0 then<br>            dbs.ImageIndex  :=  0;<br>          with AItemLinks.Add do<br>          begin<br>            Item        :=  dbs;<br>            Index       :=  j;<br>            BeginGroup  :=  bg;<br>          end;  //with<br>          bg          :=  False;<br>          CreateMenuItems(ADataSet, PMenuItemInfo(l[i]).ID, dbs.ItemLinks, 0);<br>          if dbs.ItemLinks.Count = 0 then<br>            dbs.Free<br>          else<br>            Inc(j);<br>        end<br>        else begin<br>          //无子项<br>          if not (PMenuItemInfo(l[i]).Caption = '-') then<br>          begin<br>            db          :=  TdxBarButton.Create(dxBar);<br>            db.Caption  :=  PMenuItemInfo(l[i]).Caption;<br>            db.Hint     :=  PMenuItemInfo(l[i]).Hint;<br>            db.Tag      :=  Integer(l[i]);<br>            db.OnClick  :=  MenuItemClick;<br>            if AIndex &gt; 0 then<br>              db.ImageIndex :=  0;<br>            with AItemLinks.Add do<br>            begin<br>              Item        :=  db;<br>              Index       :=  j;<br>              BeginGroup  :=  bg;<br>            end;<br>            bg          :=  False;<br>            Inc(j);<br>          end<br>          else begin<br>            bg  :=  True;<br>          end;  //if bg<br>        end;  //if  Locate<br>      end;  //for<br>    finally<br>      l.Free;<br>    end;<br>  end;<br><br>var<br>  rsMenus : TDataSet;<br>begin<br>  rsMenus :=  mgDMMain.GetMenus;  //取得数据集<br>  if Assigned(rsMenus) then<br>  try<br>    CreateMenuItems(rsMenus, '', dxBar.Bars[0].ItemLinks, 1);<br>    //一定要刷新一下,否则不更改样式会出错<br>    dxBar.Bars[0].ItemLinks[0].Visible  :=  False;<br>    dxBar.Bars[0].ItemLinks[0].Visible  :=  True;<br>  finally<br>    rsMenus.Free;<br>  end;<br>end; <br><br> <br> 2005-1-4 16:34:35    取得TcxLookupComboBox下拉列表中各项的内容 Properties.DataController.Values包含了所有内容,如果要取得当前选择行的内容,用以下代码<br>//cmb:TcxLookupComboBox;<br>  with cmb.Properties.DataController do<br>    ShowMessage(Values[FindRecordIndexByKey(cmb.EditValue),0]);<br>//0代表显示的第一列,以Properties.ListColumns为准,可以从这个集合中查找对应的字段名 <br><br>]]></description>
	<author>XCC</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30888</comments>
	<dc:creator>XCC</dc:creator>
</item>

<item>
	<title><![CDATA[文件保存到数据库(blob类型）]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30886</link> 
	<pubDate>2008-12-24 11:35:14</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30886</guid>
	<description><![CDATA[unit Unit1;<br><br>interface<br><br>uses<br>  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br>  Dialogs, Grids, DBGrids, DB, ADODB, StdCtrls, Word2000, OleServer;<br><br>type<br>  TForm1 = class(TForm)<br>    WordApplication1: TWordApplication;<br>    Button1: TButton;<br>    Button2: TButton;<br>    OpenDialog1: TOpenDialog;<br>    ADOConnection1: TADOConnection;<br>    ADOQuery1: TADOQuery;<br>    DataSource1: TDataSource;<br>    DBGrid1: TDBGrid;<br>    procedure Button1Click(Sender: TObject);<br>    procedure Button2Click(Sender: TObject);<br>    procedure FormCreate(Sender: TObject);<br>  private<br>    { Private declarations }<br>  public<br>    { Public declarations }<br>  end;<br><br>var<br>  Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>  m_File:TMemoryStream;<br>begin<br>  if OpenDialog1.Execute then<br>  begin<br>    m_File:=TMemoryStream.Create;<br>    m_File.LoadFromFile(OpenDialog1.FileName);<br>    ADOQuery1.Append;<br>    TBlobField(ADOQuery1.FieldByName('文件')).LoadFromStream(m_File);<br>    try<br>      ADOQuery1.Post;<br>    finally<br>      m_File.Free;<br>    end;<br>  end;<br>end;<br><br>procedure TForm1.Button2Click(Sender: TObject);<br>var<br>  Template : OleVariant;<br>  NewTemplate : OleVariant;<br>  DocuType : OleVariant;<br>  Visible : OleVariant;<br>begin<br>  if ADOQuery1.IsEmpty then<br>  begin<br>    ShowMessage('当前数据库为空！');<br>  end<br>  else<br>  begin<br>    TBlobField(ADOQuery1.FieldByName('文件')).SaveToFile('C:\temp.doc');<br>    WordApplication1.Connect;<br>    WordApplication1.Visible:=True;<br>    Template:='C:\temp.doc';<br>    NewTemplate:=False;<br>    DocuType:=0;<br>    Visible:=True;<br>    try<br>      //WordApp.Documents.Add(Template:='C:\Doc1.dot',NewTemplate:=False,DocuType,Visible);<br>      WordApplication1.Documents.Add(Template,NewTemplate,DocuType,Visible);<br>    except<br>      showmessage('打开文档失败！');<br>    end;<br>  end;<br>end;  <br><br><br><br>注：//存入数据库<br>TBlobField(adotable1.FieldByName('doc')).LoadFromFile('FileName')；<br>//存出数据库<br>TBlobField(adotable1.FieldByName('doc')).SavetoFile('FileName');  <br><br>]]></description>
	<author>luoyanqing119</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30886</comments>
	<dc:creator>luoyanqing119</dc:creator>
</item>

<item>
	<title><![CDATA[重入Delphi]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30885</link> 
	<pubDate>2008-12-23 22:24:21</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30885</guid>
	<description><![CDATA[    2008年12月23,今天我又注册了大富翁,想想几年的编程经历,真是一肚子的水!....]]></description>
	<author>delYang</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30885</comments>
	<dc:creator>delYang</dc:creator>
</item>

<item>
	<title><![CDATA[又想要进Delphi世界了]]></title>
	<link>http://www.delphibbs.com/keylife/iblog_show.asp?xid=30882</link> 
	<pubDate>2008-12-22 20:41:42</pubDate>
	<guid isPermaLink="true">http://www.delphibbs.com/keylife/iblog_show.asp?xid=30882</guid>
	<description><![CDATA[今天下载了delphi2009,开始玩玩看。]]></description>
	<author>zjting</author>
	<comments>http://www.delphibbs.com/keylife/iblog_comment.asp?xid=30882</comments>
	<dc:creator>zjting</dc:creator>
</item>

</channel>
</rss>