delphi 2006,自定义组件中的SynTaskDialog编译错误

时间:2012-05-09 05:41:31

标签: delphi delphi-7 custom-component delphi-2006

我正在处理delphi 7delphi 2006的组件,该组件使用synopse中的SynTaskDialog.pas,我已成功使用SynTaskDialog.pas delphi 7组件,但是当我尝试在delphi 2006中使用它来创建组件包时。我收到错误

enter image description here

我在synopse.info/forum

找到了同样的解决方案

引用:

我找到了两个解决方法:

  1. 用字符串数组替换指针数组,如
  2.   TD_ICONS_IDENT: array[TTaskDialogIcon] of string =(
        '', SMsgDlgWarning, SMsgDlgConfirm, SMsgDlgError, SMsgDlgInformation,
        '', SMsgDlgInformation);
    

    并删除一些LoadResString调用或

    2.使用

    等函数替换指针数组
      GetIconIdent(TTaskDialogIcon): Pointer
    

    但即使在那之后我也无法编译组件的包。而这些错误来了

     [Pascal Error] E2201 Need imported data reference ($G) to access 'SMsgDlgOK' from unit 'SynTaskDialog'
     [Pascal Error] E2201 Need imported data reference ($G) to access 'SMsgDlgYes' from unit 'SynTaskDialog'
     [Pascal Error] E2201 Need imported data reference ($G) to access 'SMsgDlgNo' from unit 'SynTaskDialog'
     [Pascal Error] E2201 Need imported data reference ($G) to access 'SMsgDlgCancel' from unit 'SynTaskDialog'
     [Pascal Error] E2201 Need imported data reference ($G) to access 'SMsgDlgRetry' from unit 'SynTaskDialog'
     [Pascal Error] E2201 Need imported data reference ($G) to access 'SCloseButton' from unit 'SynTaskDialog'
    

1 个答案:

答案 0 :(得分:9)

你为什么不问项目论坛的问题?

解决方案可能会增强此开源单元的官方代码。

好的 - 它可以帮助我获得一些SO点。 ;)

AFAIK此“E2001”问题已经确定 - 请参阅this post,并且应该已在最新的主干中修复。这听起来与Delphi 7一起使用,但不适用于Delphi 2006。

以下是此编译器错误的潜在解决方法:

定义这样一个函数:

function IconMessage(Icon: TTaskDialogIcon): string;
begin
  case Icon of
    tiWarning:   result := SMsgDlgWarning;
    tiQuestion:  result := SMsgDlgConfirm;
    tiError:     result := SMsgDlgError;
    tiInformation, tiShield: result := SMsgDlgInformation;
    else result := '';
  end;
end;

如此使用:

if Inst='' then
  Inst := IconMessage(aDialogIcon);

现在是committed in the project trunk

感谢您使用我们的开源组件!