2

我正在为delphi 7and开发组件delphi 2006,该组件使用SynTaskDialog.pas来自synopse,我已经成功使用了SynTaskDialog.pasindelphi 7组件,但是当我尝试使用它delphi 2006来创建组件包时。我收到一个错误

在此处输入图像描述

我在synopse.info/forum上找到了相同的解决方案


引用:

我找到了两种解决方法:

  1. 用字符串数组替换指针数组,如
  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'
4

1 回答 1

9

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

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

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

AFAIK 这个“E2001”问题已经被确定 - 看到这个帖子应该已经在最新的主干中修复了。这听起来适用于 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);

现在已在项目主干中提交

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

于 2012-05-09T06:22:32.033 回答