首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 很希望大家把自己做项目中的小技巧共享出来 [已结贴,结贴人:liangpei2008]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-26 11:23:43 楼主
    很久没有在CSDN首页看到Delphi的技术分享贴了,大家努力啊~
    200  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-26 11:32:561楼 得分:0
    我来第一个:
    在使用Delphi中,如果我们想存放一组对象时,用ObjectList最方便
    如果将TObjectList的OwnsObjects属性设为True,那么Objectlist将自动管理数组成员的生命期~
    例:
    UserList:=TObjectList.Create(True)
    此外还有Add,Remove等方法~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-26 11:34:162楼 得分:0
    不过要想从ObjectList取出对象时,需要向下转型
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-26 11:38:303楼 得分:2
    不错~板凳~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-26 11:39:554楼 得分:2
    不错~地板~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-26 11:52:325楼 得分:0
    楼上大哥们,赏个技巧吧~
    这样的贴子大家都不想沉下去~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • rouqing
    • 等级:
    发表于:2007-11-26 11:52:436楼 得分:2
    使用bcb6开发,开发包提供的是vc6开发的dll和lib文件,使用bcb6 bin目录下的工具:coff2omf  a.lib  b.lib 
    将库文件a.lib转换格式生成库文件b.lib
    coff2omf可以转换微软的COFF格式为Borland使用的OMF格式
    在bcb6中导入即可直接调用了!

    另外:tdump  -ee  mydll.dll  >1.txt 
    研究一下别的程序或者dll里边调用了什么函数
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-26 12:09:497楼 得分:0
    在Delphi数据库中,一些朋友的SQL语句写不出来,其实就是对相关子查询不熟悉,现在我总结一下~

    自己总结的,不对请大家指正~:)
    --相关子查询与普通子查询的区别在于:相关子查询引用了外部查询中的列!这种用外部查询来限制子查询的方法使
    SQL查询变得更加强大和灵活。因为相关子查询能够引用外部查询,所以它们尤其适合编写复杂的where条件!
    相关子查询不能自己单独运行,其执行顺序如下:
    1.首先执行一次外部查询
    2.对于外部查询中的每一行分别执行一次子查询,而且每次执行子查询时都会引用外部查询中当前行的值。
    3.使用子查询的结果来确定外部查询的结果集。
    如果外部查询返回100行,SQL 就将执行101次查询,一次执行外部查询,然后为外部查询返回的每一行执行一次子查询。但实际上,SQL的查询
    优化器有可能会找到一种更好的方法来执行相关子查询,而不需要实际执行101次查询。

    相关子查询典型用法:
    declare @t table(rq varchar(10),hh int,ye dec(6,2))
    insert into @t select '2006-01-02'    ,1111    ,2.01
    union all select '2006-01-05'    ,1111    ,3.51
    union all select '2006-01-10'    ,1111    ,2.55
    union all select '2006-01-02'    ,2222    ,3.00
    union all select '2006-01-04'    ,2222    ,2.00
    union all select '2006-01-05'    ,3333    ,6.54
    union all select '2006-01-06'    ,3333    ,5.23
    union all select '2006-01-07'    ,3333    ,8.55

    select * from @t a where not exists(select 1 from @t where hh=a.hh and rq>a.rq)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-26 12:26:088楼 得分:2
    D7以上版本的indy提供的IdStrings.pas里面有几个很有用处的字符处理函数
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-26 12:28:439楼 得分:2
    不错
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-26 14:09:1110楼 得分:2
    不错,呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-26 17:03:1911楼 得分:0
    真是服了Delphi版了,这样的贴子也没人顶~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-26 17:29:4612楼 得分:2
    我来顶了~~~呵呵,接点分
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-26 17:50:4613楼 得分:2
    呵呵,偶以前提过这样的问题,结果也是没有多少人参与
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-26 18:40:3914楼 得分:2
    up,go on study!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ccrun
    • 等级:
    发表于:2007-11-27 02:10:4715楼 得分:2
    友情关注。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-27 08:05:1116楼 得分:2
    向前拱
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • rouqing
    • 等级:
    发表于:2007-11-27 08:42:0717楼 得分:0
    使用Delphi调用开源软件SQLITE函数:

    sqlite引擎在Delphi中的应用从 www.sqlite.org 网站可下载到最新的 sqlite 代码

    sqlite源文件:sqlite3.c和sqlite3.h。首先编译成OBJ,编译生成sqlite3.obj

      bcc32 -pc -RT- -O -w- -6 -I(bcc32)\include -c SQLite3.c

    bcc32为BCB6中的工具,在Bin目录中。

    DELPHI中引用 {$L 'OBJ\sqlite3.obj'} 即可调用其中的函数.

    如果不想直接调用可使用第三方组件:ASQLite

    关于Sqlite可自行在网上查询相关资料。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-27 09:03:2618楼 得分:2
    up, 偶先想想再回。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-27 09:05:3719楼 得分:0
    大家看一下ASP.NET版的技术共享贴(置顶贴),有好多人把技术拿出来,Delphi版怎么就不能呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-27 09:55:4320楼 得分:0
    Delphi存在了这么多年,基本上能遇到的问题别人都问过了,
    而且收集整理各种资料的事情,也早就有人在做,
    大富翁离线资料、CSDN的FAQ、Delphi超级猛料、delphi未经证实葵花宝典
    这些资料都已经很全了
    还是别做重复劳动的好
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-27 12:57:1221楼 得分:2
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xiaoku
    • 等级:
    发表于:2007-11-27 16:14:4322楼 得分:2
    上首页了,过来看看...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-27 21:24:3823楼 得分:2
    我认为自己最能拿出手的东西,
    可以做个基类使用,主要功能就是是子类的用户输入控件可以自动变色,
    不必考虑种类繁多的第三方控件,
    只要是有Color,OnEnter,OnExit,OnChange属性就行。
    unit Ufrmbase;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons,typinfo;
    type
      Tfrmbase = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        procedure CmpEnter(Sender: TObject); //用户获得焦点
        procedure CmpExit(Sender: TObject); //用户失去焦点
      public
        { Public declarations }
      protected
        procedure pSetComponents;
      end;

    var
      frmbase: Tfrmbase;
      //以后应该是可以设置的。风格管理,可以保存在注册表中
    const
      ENTERC0LOR = $00CDBDB4;
      EXITCOLOR = $00DAF3DD;
    implementation
    {$R *.dfm}
    procedure Tfrmbase.CmpEnter(Sender: TObject);
    var
      sProp: PPropInfo;
    begin
      sProp := GetPropInfo(Sender.ClassInfo, 'Color');
      if sProp <> nil then
        SetOrdProp(Sender, sProp, ENTERC0LOR);
    end;

    procedure Tfrmbase.CmpExit(Sender: TObject);
    var
      sProp: PPropInfo;
    begin
      sProp := GetPropInfo(Sender.ClassInfo, 'Color');
      if sProp <> nil then
        SetOrdProp(Sender, sProp, EXITCOLOR);
    end;

    procedure Tfrmbase.pSetComponents;
    var
      i: Integer;
      sColor, sEnter, sExit, sChanged: PPropInfo;
      vEnter, vExit: TMethod;
      mEvent: TNotifyEvent;
    begin
      for i := 0 to componentcount - 1 do
      begin
        sColor := GetPropInfo(Components[i].ClassInfo, 'Color');
        sEnter := GetPropInfo(Components[i].ClassInfo, 'OnEnter');
        sExit := GetPropInfo(Components[i].ClassInfo, 'OnExit');
        sChanged := GetPropInfo(Components[i].ClassInfo, 'OnChange');
        if (sChanged <> nil) and (sEnter <> nil) and
          (sExit <> nil) and (sColor <> nil) then
        begin
          SetOrdProp(Components[i], sColor, EXITCOLOR);
          mEvent := CmpEnter;
          vEnter.Code := @mEvent;
          vEnter.Data := Self;
          SetMethodProp(Components[i], sEnter, vEnter);
          mEvent := CmpExit;
          vExit.Code := @mEvent;
          vExit.Data := Self;
          SetMethodProp(Components[i], sExit, vExit);
        end;
      end;

    end;

    procedure Tfrmbase.FormCreate(Sender: TObject);
    begin
      pSetComponents;
    end;
    end.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • D_Q
    • 等级:
    发表于:2007-11-27 21:45:5624楼 得分:2
    {$Message Hint '比较好找'}
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-28 12:53:3225楼 得分:2
    不错,顶一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-28 13:11:4426楼 得分:0
    不错不错,大家继续~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-28 13:15:5127楼 得分:2
    帮顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-28 14:11:2728楼 得分:2
    先顶上去,待会再共享点东西上来。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-28 17:53:3229楼 得分:2
    顶先
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-29 10:13:4830楼 得分:0
    不错
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-29 12:56:3431楼 得分:2
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-30 09:51:2932楼 得分:2
    //--------------
    如果要在窗体的画布上画图,消除重画时窗体的闪烁,可以在窗体创建时设置双内存机制。
    self.doublebuffered:=true;

    好处是:重画时(onPain())窗体不会闪烁;
    不足是:内存消耗较大;

    //--------------
    将数据加载到内存时,我们多使用动态数组,动态数组的使用是比较好用的。
    1、生存期管理是由编译负责;
    2、增加长度时,重新SetLength()不会影响原有的数据;
    3、从数组中删除某个元素时,可以采用将数据项向前移的方法,移动完数据后,可以重新分配数组长度(缩短);
    4、使用记录类型数据的数组时,可以在记录类型中加入管理方法,实现对记录类型数据中,对象类型数据的管理;


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-30 12:15:0633楼 得分:0
    对于返回TStringList类型的函数常见的问题~
    Delphi(Pascal) code
    function TForm1.getlist:Tstringlist; begin result:=TStringList.Create; result.Add('1'); result.Add('2'); end; procedure TForm1.Button1Click(Sender: TObject); var str:TStrings; begin // str:=TStringList.Create;内存泄露 str:=getlist; showmessage(str.Text); str.Free; end;

    //造成内存泄露的主要原因是程序员没有把对象与对象引用搞清楚~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-30 14:53:3334楼 得分:2
    很难看到了,顶下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-30 17:15:4635楼 得分:2
    不错,以上还有些好贴,不过,我有一个拼音首字母的用法,大家用过极品时刻表吗?里面就有首字输入法
    我有一个单元。
    unit IMCode;

    interface

    function MakeSpellCode(stText: string; iMode, iCount: Integer): string;
    { iMode 二进制功能位说明
      X X X X X X X X X X X X X X X X
                                3 2 1
      1: 0 - 只取各个汉字声母的第一个字母; 1 - 全取
      2: 0 - 遇到不能翻译的字符不翻译; 1 - 翻译成 '?' (本选项目针对全角字符)
      3: 0 - 生成的串不包括非数字, 字母的其他字符; 1 - 包括
        (控制全角的要输出非数字, 字母字符的; 半角的非数字, 字母字符)
    }

    function GetSpellCode(szText: PChar;