代码之家  ›  专栏  ›  技术社区  ›  Brian Frost

Delphi7和Delphi2010之间的TVirtualStringTree兼容性-“参数列表不同”

  •  4
  • Brian Frost  · 技术社区  · 14 年前

    {$IFDEF TargetDelphi7}
    procedure VirtualStringTree1GetText(Sender: TBaseVirtualTree;
      Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
      var CellText: WideString);
    {$ELSE}
    procedure VirtualStringTree1GetText(Sender: TBaseVirtualTree;
      Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
      var CellText: string);
    {$ENDIF}
    

    在实现事件时重复这一点。我错过了一个简单的解决方案吗? 谢谢。

    4 回复  |  直到 14 年前
        1
  •  1
  •   frogb    14 年前

    最简单的解决方案是为D7和D2010维护单独的源和组件文件夹。它最终将节省时间和头痛。

        2
  •  1
  •   Ondrej Kelle    14 年前

    您也可以尝试在中声明一个新类型 VirtualTrees 单位:

    {$IFDEF TargetDelphi7}
    type
      VTString = type WideString;
    {$ELSE}
    type
      VTString = type string;
    {$ENDIF}
    

    并将所有事件签名更改为使用这种新类型,这将使您能够保持.dfm文件的兼容性,并且不受这些条件约束。

        3
  •  1
  •   Cosmin Prund    14 年前

    我可以提出3个解决方案。对于我自己的代码,我使用了解决方案(1),因为对于我的应用程序,很少有代码需要在Delphi7和Delphi2010之间共享。

    1. 如您所做的那样(IFDEF-it-to-compile),并在运行时分配事件处理程序。您只需更改代码,您的需求列表将保持不变。不是个好办法。
    2. 修改TVirtualTree本身,将其更改为对D7和D2010使用相同的类型(字符串)。这也会使你的代码在D7和D2010上都能工作,你的代码可以在D2010上使用vanillantvirtualtree,但是如果有新的开发人员想用D7打开你的代码,他们就需要从你的黑客来源重建VirtualTree。
        4
  •  1
  •   Ian Boyd    13 年前

    我想这个老问题已经解决了 VirtualTrees.pas 已转换为使用 UnicodeString

    {$ifndef COMPILER_12_UP}
    type
      UnicodeString = WideString;
    {$endif COMPILER_12_UP}
    

    我不知道什么时候 独角兽 是介绍的,但我知道 string 现在是 (差 WideString 我知道他的感受