【发布时间】:2011-10-29 13:27:18
【问题描述】:
这里有很多类似的问题,但我找不到我的问题的答案。
我有一个TRichEdit,并希望在用户按下 Tab 时实现一些自定义行为。我将富编辑的WantTabs 属性设置为True 并尝试在OnKeyDown 中添加我的自定义行为,这工作正常,但不幸的是之后“正常”选项卡行为也被执行(在编辑)。我尝试在事件处理程序中将Key 设置为0,但这没有帮助。
如何防止“正常”选项卡行为被执行?
【问题讨论】:
这里有很多类似的问题,但我找不到我的问题的答案。
我有一个TRichEdit,并希望在用户按下 Tab 时实现一些自定义行为。我将富编辑的WantTabs 属性设置为True 并尝试在OnKeyDown 中添加我的自定义行为,这工作正常,但不幸的是之后“正常”选项卡行为也被执行(在编辑)。我尝试在事件处理程序中将Key 设置为0,但这没有帮助。
如何防止“正常”选项卡行为被执行?
【问题讨论】:
改用OnKeyPress 事件:
procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = chr(VK_TAB) then
begin
beep;
Key := #0;
end;
end;
或者,如果您确实需要使用OnKeyDown 事件,只需删除关键消息:
procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
msg: TMsg;
begin
if Key = VK_TAB then
begin
beep;
while PeekMessage(msg, RichEdit1.Handle, WM_KEYFIRST, WM_KEYLAST,
PM_REMOVE) do;
end;
end;
【讨论】:
OnKeyPress 和OnKeyDown 之间似乎存在一些根本区别。你能解释一下这是什么吗?
VK_RIGHT,你会得到一个按键向下和一个按键向上(当然),但没有按键,因为没有'VK_RIGHT字符'插入到控件中。)