我发现这段代码会覆盖整个类:
{ Private declarations }
procedure CMDialogKey(Var Msg: TWMKey) ;
message CM_DIALOGKEY;
procedure TForm1.CMDialogKey(var Msg: TWMKey);
begin
if (ActiveControl is TEdit) and (Msg.Charcode = VK_TAB) then
begin
//
end else
inherited;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
ShowMessage('Tab is Pressed!');
end;
哪个适用(适用于整个班级)。
我可以使用一些易于理解的代码(我是一名初学程序员)吗?或者我可以更改上面的代码以满足我的需求吗?
答案 0 :(得分:2)
继续发表评论后,您要问的一种方法是使用每个VCL控件都具有的Tag
属性。您可以定义一个常量:
const MOVE_NEXT = 123;
然后,在设计器中,选择TabSheet中的哪个控件作为触发页面更改的最终控件,并将其Tag
属性设置为123
。理想情况下,这很可能是页面上具有最高TabOrder
的控件。当然,您也可以通过编程方式执行此操作。
在你的方法中,然后:
procedure TForm1.CMDialogKey(var Msg: TWMKey);
begin
if (ActiveControl.Tag = MOVE_NEXT) and
(Msg.Charcode = VK_TAB) and
(PageControl1.ActivePageIndex < PageControl1.PageCount - 1) then
begin
PageControl1.ActivePageIndex := PageControl1.ActivePageIndex + 1;
Msg.Result := 1;
// note : it is good practice to set the message result to 1
// to indicate that you have handled the message.
end else
inherited;
end;
上述方法将导致TAB
键在其所有页面中循环,在所包含的控件所指示的TabOrder
中的每个控件上着陆。 Tag
123
属性的控件将触发选择下一个标签。在编写时,它将循环遍历页面控件一次,然后离开窗体上的下一个控件。
当然,在下一个周期中,PageControl
将保留在其最后一页上,Tab
键将在最后一页上循环显示控件,然后再继续。您可以通过执行与表单上前面的TabOrder
控件类似的操作,将页面控件重置为每次第一页 - 例如:
procedure TForm1.CMDialogKey(var Msg: TWMKey);
begin
if (ActiveControl.Tag = MOVE_NEXT) and
(Msg.Charcode = VK_TAB) and
(PageControl1.ActivePageIndex < PageControl1.PageCount - 1) then
begin
PageControl1.ActivePageIndex := PageControl1.ActivePageIndex + 1;
Msg.Result := 1;
Exit;
end;
// define new const MOVE_FIRST = 124
if (ActiveControl.Tag = MOVE_FIRST) and (Msg.Charcode = VK_TAB) then
begin
PageControl1.ActivePageIndex := 0;
PageControl1.SetFocus;
Msg.Result := 1;
Exit;
end;
inherited;
end;
答案 1 :(得分:2)
虽然@J ... sugestion会起作用但它并不直观,因为您必须在PageControll上的特定页面上的每个控件上进行制表。 尝试通过大约50个组件进行制表,你会明白我的意思。没有任何形式有这么多组件。然后打开一个网页并使用TAB键在构成网页的不同控件之间移动。
那么为什么不使用特定的组合键来快速浏览PageControll的页面,如CTRL + TAB,它在许多支持多个选项卡(大多数Web浏览器)的程序中使用,甚至可以处理多个文档(旧版本的Microsoft Word, Curent版本的Microsoft Excel等。)
事实上,这个功能是否已经在Page Controll中实现了?