我有一个使用Embarcadero XE 6创建的Windows控制台应用程序(实际上是从Borland C ++ Builder5项目转换而来)。它有一个带有几个按钮和编辑控件的表单。所有这些控件都设置了TabStop = True和适当的TabOrder。但是,在显示表单时在运行时按Tab键不会执行任何操作(当光标/焦点位于编辑控件中时它只会产生声音,而当按钮聚焦时不会执行任何操作)。
我在文档中读到,除非设置了表单的父级,否则Tab顺序不起作用。但是,这是唯一的VCL表单(其他窗口是控制台和GLUT窗口),因此没有VCL父AFAIK。我试着设置
Parent=Application->MainForm;
在Form的构造函数中,但Application->MainForm
也是NULL。有什么想法吗?
答案 0 :(得分:0)
您的问题是您没有消息循环。这是因为预计控制台应用程序不具有窗口,并且默认情况下不带有消息循环。
您可以通过调用:
来运行消息循环Application->Run();
但是,这可能会阻止应用程序的控制台部分正常工作。你的主线程如何同步地为控制台服务,同时异步GUI消息循环?
我怀疑你需要更认真地重新考虑你的应用程序设计。
关于您的更新,似乎您确实有一个消息循环,但它是GLUT框架的消息循环。 VCL框架需要其消息循环来处理对话消息,如TAB键按下。
运行VCL消息循环代替GLUT消息循环可能会产生更好的结果。但很可能只会打破应用程序的GLUT部分。
尝试从单个消息循环中运行两个不兼容的GUI框架很难做到。这里可能没有快速解决方法。你需要深入挖掘。也许最好放弃VCL并坚持使用一个GUI框架。