-1

所以,我有这个虚拟键盘......

它在一个 dll 中,并且基于一个 StayOnTop 模态表单。它由一个函数调用,该函数返回一个带有输入文本的 WideString。这个虚拟键盘有它自己的 TEdit,用户可以在其中书写并查看他正在写的内容。

所需的行为是它们的 KB 表单保持在顶部并具有焦点,直到按下 Esc 或 Enter 键。

对此键盘的调用之一发生在主窗体的 OnShow 事件中,因此在第一次调用键盘时它是不可见的。

一直到现在都是这样。

我创建了一个启动表单来引导用户完成在主表单实际加载之前发生的各个步骤:皮肤加载、插件加载、数据库初始化等。

一旦 DataModule OnCreate 执行,启动画面就会出现,并在主窗体的 OnActivate 上关闭。所以这个初始表单不是 StayOnTop - 它不需要,因为它会在主表单出现的那一刻关闭。

在中间的某个地方,键盘出现了,所以用户可以输入一些需要的数据。

根据我的说法,键盘应该抓住焦点,因为它是一个模态窗口,但事实是,在我单击键盘表单之前,启动表单具有焦点,这是我想要避免的。

如果在键盘之前调用启动表单,没有 Modal,没有 StayOnTop,有人可以告诉我为什么它保持焦点,以及如果可能的话如何避免它。

PS:我确实在 SO 中找到了其他关于类似问题的问题,但结果恰恰相反:希望 StayOnTop 表单将焦点放在主要表单上。那不是我需要的。

4

1 回答 1

0

好吧,我解决了我的问题。这是一个简单的...

我刚刚在调用键盘之前添加了Application.ProcessMessages 。

现在只要可见,焦点就会转到键盘。

于 2014-03-02T14:39:09.970 回答