没写完!好想基本VCL不让重新编译的,可以在原来类基础上重新定义新的类。

解决方案 »

  1.   

    不用看了,你直接在原DB.Pas中修改后编译你的项目就可以了,不过修改前先备份这个单元!
      

  2.   

    直接修改 sources\vcl 下的 db.pas。(修改前备份)。
      

  3.   

    修改完source\vcl下的db.pas后,把$(DELPHI)\source\vcl;加到你的工程的搜索路径,重新编译看看。
      

  4.   

    直接修改编译后,并不改变$(DELPHI)\lib\db.dcu,没有用。
    如果把db.pas拷出来编译,将db.dcu(new) copy to $(DELPHI)\lib\db.dcu。
    就出现错误:
     Unit QRExpr was compiled with a  different version of Db.TStringField
    就连以前的项目编译时也出相同的错。
      

  5.   

    windindance:
    我要做一个通用的模块,需要给一些字段做标志,类型可能是string、char、int等。只好改TstringField,或Tfield对象。
      

  6.   

    1 直接用TStringField,TIntegerField……不行吗?
    2 是否可以在模块中用一个动态数组,保存这些字段的标志。
    3 想一想其他办法……
    不到不得已的时候不要修改VCL源码,否则以后很难维护的。
      

  7.   

    >>我要做一个通用的模块,需要给一些字段做标志,类型可能是string、char、int等
    如果只是做标志不用修改源码的。
    TField对象中有一个tag字段,它是integer类型,给程序员记录一些和对象实例有关的值,
    你现在的情况可以定义
    const
      flString = 1;
      flChar = 2;
      flInt =3;
      ...这样string的就给tag赋值flString,
    char的就给tag赋值flChar,
    如此类推,问题就解决了。
    BTW:如果你程序中要用到一些delphi或第三方提供的构件,基本上就不允许修改vcl的源码了。