[英]Why isn't InputQuery returning bool?
我遵循清晰的文档来实现输入对话框。 工作正常。 但是,现在我想忽略用户单击“取消”的输入。 以下是该文档的引用。
“如果用户单击“ 确定”按钮,则InputQuery返回True
;否则, InputQuery返回False
。”
因此,我尝试了以下代码,而我得到的错误是E2034 Cannot convert void to bool
当我在Win32上运行时, E2034 Cannot convert void to bool
,并且bccaarm error 1711 value of type void is not contextually convertible 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 */;
在InputQuery()
的最后一个参数中,您传入TInputCloseQueryProc
,但是引用的声明改为使用TInputCloseQueryFunc
。
根据您链接到的文档 ,采用TInputCloseQueryProc
的InputQuery()
TInputCloseQueryProc
将返回void
,而不是bool
,因此转换错误。 返回bool
并接受close回调的重载采用TInputCloseQueryFunc
或TInputCloseQueryEvent
。 因此,您需要相应地更新Met
变量。
话虽如此,不推荐使用Fmx::Dialogs::InputQuery()
函数/过程,如在引用的声明中清楚所示。 如弃用消息所示,您应该使用InputQuery()
的Fmx::DialogService
版本。 根据需要使用TDialogServiceSync::InputQuery()
或TDialogServiceAsync::InputQuery()
1 。
1:Android不支持模式对话框,因此您不能在Android上使用InputQuery()
的同步版本。
附带说明一下,C ++ Builder在<sysopen.h>
具有EXISTINGARRAY()
帮助宏,用于传递采用Delphi样式的开放数组的静态数组 ,因此您不必手动指定数组范围,例如:
InputQuery(..., EXISTINGARRAY(Prompts), EXISTINGARRAY(Defaults), ...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.