繁体   English   中英

为什么InputQuery不返回布尔值?

[英]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 boolbccaarm 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

根据您链接到的文档 ,采用TInputCloseQueryProcInputQuery() TInputCloseQueryProc将返回void ,而不是bool ,因此转换错误。 返回bool并接受close回调的重载采用TInputCloseQueryFuncTInputCloseQueryEvent 因此,您需要相应地更新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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM