<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/vniceboy</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; vniceboy]]></copyright><item><title><![CDATA[TClientDataSet[5]: 读取数据]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8462433</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8462433</guid><author>vniceboy</author><pubDate>Thu, 03 Jan 2013 21:53:09 +0800</pubDate><description><![CDATA[本例用到:
--------------------------------------------------------------------------------
 TClientDataSet.Fields[];           { 字段集合; 它比 FieldList 有更多功能, 如可获取嵌套字段 }
TClientDataSet.FieldList[];]]></description><category></category></item><item><title><![CDATA[TClientDataSet[8]: 关于索引与排序]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8462418</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8462418</guid><author>vniceboy</author><pubDate>Thu, 03 Jan 2013 21:48:47 +0800</pubDate><description><![CDATA[索引的目的有三: 快速定位、排序、建立主从表. 下面是相关属性与方法:
--------------------------------------------------------------------------------
 IndexDefs;       {  }
IndexFieldCount; {  }
IndexFieldNames; {  }
IndexFields]]></description><category></category></item><item><title><![CDATA[TClientDataSet[9]: 计算字段和 State]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8462411</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8462411</guid><author>vniceboy</author><pubDate>Thu, 03 Jan 2013 21:47:34 +0800</pubDate><description><![CDATA[TClientDataSet 中计算字段有两种: Calculated(计算字段)、InternalCalc(内部计算字段).
两者区别是: Calculated 在每次需要时都要重新计算; InternalCalc 只需要计算一次.
 Calculated 需要计算的时间, InternalCalc 需要存取的时间; 当然后者快.
计算字段不会被保存到文件.
--------------]]></description><category></category></item><item><title><![CDATA[TClientDataSet[11]: 分组统计]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8462402</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8462402</guid><author>vniceboy</author><pubDate>Thu, 03 Jan 2013 21:45:17 +0800</pubDate><description><![CDATA[设计时实现的分组统计:


 
运行时实现的分组统计:
--------------------------------------------------------------------------------
 //前期只需要添加 ClientDataSet1、DataSource1、DBGrid1; 事件只需要关联窗体的 OnCreate
unit Unit1;
inte]]></description><category></category></item><item><title><![CDATA[TClientDataSet[12]: 查找]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8462400</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8462400</guid><author>vniceboy</author><pubDate>Thu, 03 Jan 2013 21:43:55 +0800</pubDate><description><![CDATA[方法有:
 1、Locate: 根据字段列表和对应的字段值查找并定位, 找到返回 True.
 2、Lookup: 根据字段列表和对应的字段值查找, 返回需要的字段值.
 3、SetKey、GotoKey 或 SetKey、GotoNearest: 根据索引字段的值查找, 先切换状态再根据条件定位.
 4、FindKey 或 FindNearest: 根据索引字段的值查找.
其中的 Go]]></description><category></category></item><item><title><![CDATA[TClientDataSet[19]: 查找字段(fkLookup)]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8462376</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8462376</guid><author>vniceboy</author><pubDate>Thu, 03 Jan 2013 21:38:04 +0800</pubDate><description><![CDATA[动态建立(其中的 School 字段是 Lookup 字段):


//先在窗体上放置: DBGrid1、DataSource1、ClientDataSet1、ClientDataSet2; 其他全用代码实现:
procedure TForm1.FormCreate(Sender: TObject);
begin
  { 关联控件 }
  DBGrid1.DataSource :=]]></description><category></category></item><item><title><![CDATA[TClientDataSet[23]: 使用数据集字段(TDataSetField)]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8462368</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8462368</guid><author>vniceboy</author><pubDate>Thu, 03 Jan 2013 21:36:13 +0800</pubDate><description><![CDATA[运行时的设计方法:




设计时的准备工作:
ClientDataSet1、DataSource1、DBGrid1 并关联, 这用于主表;
ClientDataSet2、DataSource2、DBGrid2 并关联, 这将成为主表的一个字段(或叫嵌套表);
还可以放个 Splitter1 来协调 DBGrid 的大小.
 
procedure TForm1.FormCrea]]></description><category></category></item><item><title><![CDATA[TClientDataSet[22]: 数组字段与 ObjectView]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8462355</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8462355</guid><author>vniceboy</author><pubDate>Thu, 03 Jan 2013 21:33:11 +0800</pubDate><description><![CDATA[数组字段(ftArray) 与 ADT 字段类似(设计过程一样), 定义数组字段时只需定义一个元素来说明元素类型.

本例同时测试 ObjectView 为 True 和 False 时的不同效果.


下面是在运行时实现的数组字段:


 
//先在窗体上放置: DBGrid1、DataSource1、ClientDataSet1 并关联, 然后:
procedure TFo]]></description><category></category></item><item><title><![CDATA[TClientDataSet[20]: 使用 Blob 字段]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8462329</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8462329</guid><author>vniceboy</author><pubDate>Thu, 03 Jan 2013 21:26:56 +0800</pubDate><description><![CDATA[Blob(Binary Large Object) 字段包括:ftBlob, 
ftMemo, 
ftGraphic, 
ftFmtMemo, 
ftParadoxOle, 
ftDBaseOle, 
ftTypedBinary, 
ftCursor, 
ftFixedChar, 
ftWideString,
ftLargeint, 
ftADT, 
ftArray, 
ftReference,]]></description><category></category></item><item><title><![CDATA[一组 Delphi 快捷键]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8194176</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8194176</guid><author>vniceboy</author><pubDate>Sat, 17 Nov 2012 16:53:26 +0800</pubDate><description><![CDATA[下面的快捷键大部分在Delphi 5.0的菜单中找不到，其中有一些还是非常有用的。

 Ctrl+PageUp      将光标移至本屏的第一行，屏幕不滚动。
 Ctrl+PageDown    将光标移至本屏的最后一行，屏幕不滚动。
 Ctrl+↓          向下滚动屏幕，光标跟随滚动不出本屏。
 Ctrl+↑          向上滚动屏幕，光标跟随滚动不出本屏。
 Ctr]]></description><category></category></item><item><title><![CDATA[几个和当前路径相关的新函数]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8193669</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8193669</guid><author>vniceboy</author><pubDate>Sat, 17 Nov 2012 13:48:48 +0800</pubDate><description><![CDATA[转自：http://www.cnblogs.com/del
偶然从 SysUtils 里发现了几个路径相关的函数, 以前没见过, 可能是 2010 新增的:


GetLocaleDirectory();
GetLocaleFile();
LocaleDirectoryExists();
LocaleFileExists();




应用测试:
uses IOUtils]]></description><category></category></item><item><title><![CDATA[一句话复制整个文件夹(当然包括嵌套文件夹)]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8193664</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8193664</guid><author>vniceboy</author><pubDate>Sat, 17 Nov 2012 13:46:22 +0800</pubDate><description><![CDATA[转自：http://www.cnblogs.com/del
使用的是 Delphi 2010 下 IOUtils 单元的 TDirectory.Copy 函数:


uses IOUtils;


procedure TForm1.Button1Click(Sender: TObject);
const
  SourceDir = 'C:\Temp\Folder1'; { 源文件]]></description><category></category></item><item><title><![CDATA[现在, Delphi 的多线程已经非常易用了!]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8193647</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8193647</guid><author>vniceboy</author><pubDate>Sat, 17 Nov 2012 13:34:09 +0800</pubDate><description><![CDATA[转自：http://www.cnblogs.com/del
先看一个非多线程的例子, 代码执行时不能进行其它操作(譬如拖动窗体):


{自定义方法: 在窗体上绘制...}
procedure MyMethod;
var
  i: Integer;
begin
  for i := 0 to 500000 do
  begin
    Form1.Canvas.Lock;]]></description><category></category></item><item><title><![CDATA[Application.Title在Win7下失效了？]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8193610</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8193610</guid><author>vniceboy</author><pubDate>Sat, 17 Nov 2012 13:09:01 +0800</pubDate><description><![CDATA[Delphi XE会默认使用Mainform的Caption作为Application的title，就是你在任务栏上看到的标题。实际上这是为兼容Vista设计的，如果你要显示自定义的标题，需要修改项目文件, 


begin
  Application.Initialize;
  Application.MainFormOnTaskbar := False; //otherwise wi]]></description><category></category></item><item><title><![CDATA[Delphi中Frame的使用方法]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8193609</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8193609</guid><author>vniceboy</author><pubDate>Sat, 17 Nov 2012 13:08:10 +0800</pubDate><description><![CDATA[Frame是组件面板上的第一个组件，但不是每个人都知道怎么用它，因为它不像Button和Label一样简单明了。实际上，Frame按钮只是打开一个Frame的列表，如果你没有创建任何的Frame，自然什么也不会看到。




那么Frame到底是什么呢？简单来说：

1. Frame是组件容器，类似Panel

2. Frame在使用上类似Components组件，但并没有构造器]]></description><category></category></item><item><title><![CDATA[Delphi XE Refactor重构功能简单说明]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8193606</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8193606</guid><author>vniceboy</author><pubDate>Sat, 17 Nov 2012 13:07:00 +0800</pubDate><description><![CDATA[如果要我只选一个升级到XE的原因，我会选重构。对用惯D7的朋友，这确实是一个非常实用的新功能，但如果你用过Visual Studio，就会发现微软早就实现了类似的功能。让人困惑的是，XE的重构子菜单有一长串，很多菜单很难直观地想像出其功能。别担心，这些都是给建模用的(比如把某个类方法转移到另外一个类），你常用到的只有几个，仔细的你会发现其实就是设了快捷键的那几个。




1. Rena]]></description><category></category></item><item><title><![CDATA[sql中不存在则插入记录小技巧]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8193603</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8193603</guid><author>vniceboy</author><pubDate>Sat, 17 Nov 2012 13:05:44 +0800</pubDate><description><![CDATA[以前都分两步，先判断记录数: select count(*) 如果值等于0则表示不存在，然后再插入数据。其实可以用insert ...select一步完成


create procedure p_add_fav_task
    @taskid int,@opid varchar(10)
as    
    insert into task_fav(taskid,opid,opda]]></description><category></category></item><item><title><![CDATA[sql中不存在则插入记录小技巧]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8193601</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8193601</guid><author>vniceboy</author><pubDate>Sat, 17 Nov 2012 13:05:09 +0800</pubDate><description><![CDATA[以前都分两步，先判断记录数: select count(*) 如果值等于0则表示不存在，然后再插入数据。其实可以用insert ...select一步完成


create procedure p_add_fav_task
    @taskid int,@opid varchar(10)
as    
    insert into task_fav(taskid,opid,opda]]></description><category></category></item><item><title><![CDATA[TBalloonHint气泡提示的用法(How to use TBalloonHint)]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8193597</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8193597</guid><author>vniceboy</author><pubDate>Sat, 17 Nov 2012 13:04:09 +0800</pubDate><description><![CDATA[XE中提供了一个非常简单实用的气泡提示组件TBalloonHint，但怎么个用法似乎没有详细的说明，下面给大家一段演示代码

//代码段1, 加载系统默认图标


    FImageList := TImageList.Create(AOwner);
    FImageList.Height := 24;
    FImageList.Width := 24;
    FIma]]></description><category></category></item><item><title><![CDATA[Parent属性的另类用法]]></title><link>https://blog.youkuaiyun.com/vniceboy/article/details/8193596</link><guid>https://blog.youkuaiyun.com/vniceboy/article/details/8193596</guid><author>vniceboy</author><pubDate>Sat, 17 Nov 2012 13:02:46 +0800</pubDate><description><![CDATA[Parent属性是用来控制控件的显示层次的，所有的TWinControl都有Parent属性，包括TForm。如果你设置TForm的Parent的为一个Panel，在整个Form就嵌入到Panel里了。

举一个应用的例子，假设你有一个配置界面，一个有很多Page的PageControl, 又假设每个Page的逻辑不太相干，如果所有代码都写在同一个单元里，读起来就很吃力。可以利用Form的Pa]]></description><category></category></item></channel></rss>