gpt4 book ai didi

delphi - 覆盖单个对象的选项卡控件

转载 作者:行者123 更新时间:2023-12-02 06:16:48 28 4
gpt4 key购买 nike

我发现这段代码可以覆盖整个类:

{ 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;

效果很好(对于整个类(class))。

是否有一些易于理解的代码(我是一名初级程序员)可以使用?或者我可以更改上面的代码以满足我的需要吗?

最佳答案

根据注释,实现您所要求的一种方法是利用每个 VCL 控件都有的 Tag 属性。您可以定义一个常量,例如:

const MOVE_NEXT = 123; 

然后,在设计器中,选择 TabSheet 中的哪个控件作为触发页面更改的最终控件,并将其 Tag 属性设置为 123。理想情况下,这很可能是页面上 TabOrder 最高的控件。当然,您也可以通过编程来执行此操作。

enter image description here

在你的方法中,然后:

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;

关于delphi - 覆盖单个对象的选项卡控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25361841/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com