0

我有一个使用 Embarcadero XE 6 创建的 Windows 控制台应用程序(实际上是从 Borland C++Builder5 项目转换而来的)。它有一个带有几个按钮和编辑控件的表单。所有这些控件都设置了 TabStop=True 和适当的 TabOrder。但是,在显示表单时在运行时按 Tab 不会执行任何操作(当光标/焦点位于 Edit 控件中时它只会产生声音,而当按钮获得焦点时不会执行任何操作)。

我在文档中读到,除非设置了表单的父级,否则 Tab 顺序将不起作用。但是,这是唯一的 VCL 形式(其他窗口是控制台和 GLUT 窗口),因此没有 VCL 父 AFAIK。我试图设置

Parent=Application->MainForm;

在窗体的构造函数中,但Application->MainForm也是 NULL。有任何想法吗?

4

1 回答 1

0

您的问题是您没有消息循环。这是因为控制台应用程序不应该有窗口并且默认情况下不带有消息循环。

您可以通过调用来运行消息循环:

Application->Run();

但是,这可能会阻止应用程序的控制台部分正常工作。您的主线程如何同时服务控制台和异步 GUI 消息循环?

我怀疑您需要更认真地重新考虑您的应用程序设计。


关于您的更新,您似乎确实有一个消息循环,但它是 GLUT 框架的消息循环。VCL 框架需要它的消息循环来处理对话消息,如 TAB 按键。

运行 VCL 消息循环代替 GLUT 消息循环会产生更好的结果是合理的。但这很可能会破坏应用程序的 GLUT 部分。

试图从一个消息循环中运行两个不兼容的 GUI 框架很难做到正确。这里可能没有快速解决方法。你需要深入挖掘。也许最好放弃 VCL 并坚持一个 GUI 框架。

于 2014-10-04T21:09:39.023 回答