转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
Delphi控件的拿来主义(二)         ★★★★

Delphi控件的拿来主义(二)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2144 更新时间:2009/4/23 18:40:07
Export) then

  FBeforeExport(Self);

 //set the counter to zero

 C:=0;

 Temp:=ShortDateFormat;

 ShortDateFormat:=FDateFormat;

{*************************以下是文本数据导入的核心代码部分,也是我要关心的部分**************************}

 FDataset.DisableControls;

 while (not Eof(FFile)) and (not FStop) do

  begin

   //read from CSV

   Readln(FFile,RecordString);

   //注意,这里好像差了一点什么东西

   //add new record

   try

    FDataset.Append;

    for i:=1 to CountMapItems do

     if Uppercase(GetMapItem(i,D)) <> Uppercase(FIgnoreStr) then

     case FDataset.FieldByName(GetMapItem(i,D)).DataType of

      ftInteger:

       FDataset.FieldByName(GetMapItem(i,D)).AsInteger:=StrToIntDef(Trim(GetCSVRecordItem(i,RecordString)),FDefaultInt);

      ftFloat:

       begin

        try

         F:=StrToFloat(Trim(GetCSVRecordItem(i,RecordString)));

        except

         F:=FDefaultInt;

        end;

        FDataset.FieldByName(GetMapItem(i,D)).AsFloat:=F;

       end;

      else

       if FTrimData then

        FDataset.FieldByName(GetMapItem(i,D)).AsString:=Trim(GetCSVRecordItem(i,RecordString))

       else

        FDataset.FieldByName(GetMapItem(i,D)).AsString:=GetCSVRecordItem(i,RecordString);

     end;

    //post record

    FDataset.Post;

   except

    on E:Exception do

     if not FSilentExport then

      raise

     else

      if Assigned(FExportError) then

       begin

        FExportError(Self,E.Message,C,ErrorResponse);

        if ErrorResponse = pgcsvAbort then

         Break;

       end;

   end;

   if Assigned(FOnAddRecord) then

    FOnAddRecord(Self);

   if Assigned(FExportProgress) then

    FExportProgress(Self, C, FStop);

   Inc(C);

  end;

 FDataset.EnableControls;

{*************************以上是文本数据导入的核心代码部分**************************}

 if Assigned(FAfterExport) then

  FAfterExport(Self);

 //close table if nessecary

 if FAutoOpen then

  begin

   if Assigned(FBeforeCloseTable) then

    FBeforeCloseTable(Self);

   FDataset.Close;

   if Assigned(FAfterCloseTable) then

    FAfterCloseTable(Self);

  end;

 //close CSV file

 CloseFile(FFile);

 //disallocate buffer

 FreeMem(Buffer);

 ShortDateFormat:=Temp;

 //free cache

 for i:=FFieldCache.Count - 1 downto 0 do

  Dispose(FFieldCache.Items[i]);

 FFieldCache.Free;

end;

   (这么长!看得我眼都花了.好在找到了我所关心的核心代码,其他的?别管了吧,我这个懒惰的人.)差的是什么呢?很明显,我们希望把这个时候的RecordString开放出去,经过处理之后再回来进行导入的操作.所以,这里差的只是一个事件处理过程,在这个过程中,我们需要通过Delphi把RecordString的值传出去让用户处理.

    既然没有提供这个接口,那就自己动手添加了。由于需要传参数,这个事件不能用标准的TNotifyEvent来定义,而需要重新声明。

 新的事件声明和事件属性如下:

type

 ...

  TPgCSVRegulateStrEvent  = procedure (Sender : TObject; var ARecordString: string) of object;

 ...

TPgCSV = class(TComponent)

Published

   property RegulateString   : TPgCSVRegulateStrEvent read FRegulateString write FRegulateString;

  //写完后别忘了按一下ctrl+shift+c

 ...

End;

 

  好了,现在可以在我刚才注释的地方写事件调用方法的程序了.

...

 while (not Eof(FFile)) and (not FStop) do

  begin

   //read from CSV

   Readln(FFile,RecordString);

  //xm4014''''s modification

   if Assigned(FRegulateString) then

    FRegulateString(self,RecordString);

  //add new record

   try

    FDataset.Append;  

 ...

重新编译包文件通过后,你就会在TPgCSV控件的事件页面中发现RegulateString这个事件,双击它就可以添加你的处理代码了。这样一来,无论文本数据中有什么样怪异的字符或格式,我们都通过这个事件处理预先过滤一编,让控件放心的处理导入的操作。简单吧(也太简单了点,居然还写了这么长!汗)

但是,这样就行了吗?

 

上一页  [1] [2] [3] 


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台