我遵循clear documentation来实现输入对话框。工作正常。但是,现在我想忽略用户单击“取消”的输入。以下是该文档的引用。
”如果用户单击确定按钮,则 InputQuery 返回True
;否则 InputQuery 返回False
。 ”
因此,我尝试了以下代码,当我在Win32和Android上运行E2034 Cannot convert void to bool
时,遇到的错误是bccaarm error 1711 value of type void is not contextually convertible to bool
。
if (InputQuery(caption, Prompts, sizeof(Prompts)/sizeof(Prompts[0]) - 1, Defaults, sizeof(Defaults)/sizeof(Defaults[0]) - 1, (TInputCloseQueryProc *)Met)){
// clicked OK
} else {
// clicked cancel
}
我如何测试OK
或Cancel
被点击了?以下是InputQuery
的声明,应为bool。我很困惑。
extern DELPHI_PACKAGE bool __fastcall InputQuery _DEPRECATED_ATTRIBUTE1("Use FMX.DialogService methods") (const System::UnicodeString ACaption, const System::UnicodeString *APrompts, const int APrompts_High, System::UnicodeString *AValues, const int AValues_High, const _di_TInputCloseQueryFunc ACloseQueryFunc = _di_TInputCloseQueryFunc())/* overload */;
答案 0 :(得分:1)
在InputQuery()
的最后一个参数中,您传入的是TInputCloseQueryProc
,但是引用的声明改为使用TInputCloseQueryFunc
。
根据您链接的documentation,InputQuery()
的重载占用TInputCloseQueryProc
会返回void
,而不是bool
,因此转换错误。返回bool
并接受关闭回调的重载采用TInputCloseQueryFunc
或TInputCloseQueryEvent
。因此,您需要相应地更新Met
变量。
话虽这么说,Fmx::Dialogs::InputQuery()
函数/过程已被弃用,正如您引用的声明中清楚显示的那样。如弃用消息所述,您应该使用Fmx::DialogService
的{{1}}版本。根据需要 1 使用TDialogServiceSync::InputQuery()
或TDialogServiceAsync::InputQuery()
。
1:Android不支持模式对话框,因此您无法在Android上使用InputQuery()
的同步版本。
另一方面,C ++ Builder在InputQuery()
中有一个EXISTINGARRAY()
帮助宏,用于传递静态数组,其中是Delphi样式的开放数组< / em>,因此您不必手动指定数组边界,例如:
<sysopen.h>