4

我继承了一个有许多问题的程序。最新的一个是太多实际参数警告:

  if MessageDlgPos('IS THIS CORRECT? ' , mtConfirmation,
  **[mbyes, mbno], 0, 400, 450, mbno) = mrno then begin**
    edtPstvEmplyNmbr.SetFocus;
    xitFlg:= True;

粗体部分是错误突出显示的地方。

注意:该程序有效,只是不在我的机器上。它是使用相同版本的 Delphi (7) 开发的,但在 clx (kylix) 环境中。我想我(可能)已经解决了 clx 和 vcl (我当前的环境)之间的所有不兼容问题,但可能是我缺少一个生成此错误的组件。我会尽力澄清任何问题,但请记住,我开发 Delphi 才几个月。

4

1 回答 1

5

Delphi 的 VCL 和 Kylix 的 CLX 不完全兼容。特别是,一些名称相似的函数采用不同数量的参数,正如您亲身学习的那样。

现代版本的 Delphi 支持MessageDlgPos您尝试调用的版本,但很明显 Delphi 7 不支持。可能发生的情况是,当VCL 版本只有六个参数时,CLX 引入了七参数重载,然后后来的 Delphi 版本将 CLX 版本移植回 VCL。请记住,Delphi 7 已有十多年的历史了。

要查看可以使用的函数版本,请查看Dialogs.pas

如果您有六参数版本,您可能可以简单地删除最后一个参数,然后处理默认按钮可能不是您想要的事实。另一种选择是调用MessageBox,它可以让您以指定窗口位置为代价来指定默认按钮。

于 2013-01-03T21:34:58.197 回答