如何将制表符写入InputQuery?
How to write the tab character into the InputQuery?
我需要允许用户将制表符 (#9
) 写入 InputQuery
函数的编辑器中。
按 tab 键将焦点移动到确定按钮上,按 Alt + 0 0 9
无效。
我找到的唯一方法是从文本编辑器(如记事本)复制选项卡并将其粘贴到 InputQuery
编辑器,但这对每个人来说都很不舒服...
有人知道其他方法吗?
那个“编辑器”只是一个TEdit
。您所要做的就是按照您想要的方式将制表符输入 TEdit
(默认情况下也不起作用)。如果你找不到办法做到这一点,那么你也不会有 InputQuery()
的运气。
但是,TMemo
已经在其 .WantTabs
属性 中加入了此功能。但话又说回来,这是一个多行输入控件 - 您必须自己决定这是否适合您。
重现 InputQuery()
的代码相当简单 - 它只是即时创建一个表单和控件,并在单击按钮后将它们全部释放。您还可以使用设计器来创建该表单。或者修改 Andreas' 代码以显示 TMemo
而不是 TEdit
.
虽然 AmigoJack's 是正确的,但我建议采用不同的方法。
就个人而言,我希望 Tab 键在对话框中像往常一样工作。我希望它将焦点移到下一个控件。
所以我的建议是引入一个不同的热键,最好是Ctrl+I,插入一个#9
插入符位置(替换任何选择)。
Ctrl+I for #9
有点standard,因为I是第9个字母英文字母表。 (一个不同的常用热键是 Ctrl+Tab 但如果您使用页面控件或其他形式的选项卡,这会导致冲突。我更喜欢 Ctrl+I.)
很明显,这应该是编辑框的本地热键,这样Ctrl+I就不会被其他控件盗用了编辑框没有焦点。使用编辑框的 OnKeyPress
处理程序:
procedure TMyInputDialog.InputEditKeyPress(Sender: TObject; var Key: Char);
begin
if Sender is TEdit then
case Key of
^I:
begin
TEdit(Sender).SelText := #9;
Key := #0;
end;
end;
end;
需要Key := #0
语句来抑制无效输入的蜂鸣声。 (因为现在 Ctrl+I 是 valid 输入。)
我需要允许用户将制表符 (#9
) 写入 InputQuery
函数的编辑器中。
按 tab 键将焦点移动到确定按钮上,按 Alt + 0 0 9
无效。
我找到的唯一方法是从文本编辑器(如记事本)复制选项卡并将其粘贴到 InputQuery
编辑器,但这对每个人来说都很不舒服...
有人知道其他方法吗?
那个“编辑器”只是一个TEdit
。您所要做的就是按照您想要的方式将制表符输入 TEdit
(默认情况下也不起作用)。如果你找不到办法做到这一点,那么你也不会有 InputQuery()
的运气。
但是,TMemo
已经在其 .WantTabs
属性 中加入了此功能。但话又说回来,这是一个多行输入控件 - 您必须自己决定这是否适合您。
重现 InputQuery()
的代码相当简单 - 它只是即时创建一个表单和控件,并在单击按钮后将它们全部释放。您还可以使用设计器来创建该表单。或者修改 Andreas' 代码以显示 TMemo
而不是 TEdit
.
虽然 AmigoJack's
就个人而言,我希望 Tab 键在对话框中像往常一样工作。我希望它将焦点移到下一个控件。
所以我的建议是引入一个不同的热键,最好是Ctrl+I,插入一个#9
插入符位置(替换任何选择)。
Ctrl+I for #9
有点standard,因为I是第9个字母英文字母表。 (一个不同的常用热键是 Ctrl+Tab 但如果您使用页面控件或其他形式的选项卡,这会导致冲突。我更喜欢 Ctrl+I.)
很明显,这应该是编辑框的本地热键,这样Ctrl+I就不会被其他控件盗用了编辑框没有焦点。使用编辑框的 OnKeyPress
处理程序:
procedure TMyInputDialog.InputEditKeyPress(Sender: TObject; var Key: Char);
begin
if Sender is TEdit then
case Key of
^I:
begin
TEdit(Sender).SelText := #9;
Key := #0;
end;
end;
end;
需要Key := #0
语句来抑制无效输入的蜂鸣声。 (因为现在 Ctrl+I 是 valid 输入。)