如何在TEdit控件输入框中输入制表符?

小笨同学 2012-08-03 09:18:35
问题描述:窗体上有一个TEdit控件,我想在用户按下[TAB]键时输入一个制表符,而不是将焦点移到下一个控件?尝试过在OnKeyPress 和 OnKeyDown 中捕获[TAB]键,无果,求指示。
...全文
234 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
小笨同学 2012-08-03
  • 打赏
  • 举报
回复
受益颇多,谢谢了
s11ss 2012-08-03
  • 打赏
  • 举报
回复
当然还可以由TEdit来处理以下消息的其中一种:
CM_WANTSPECIALKEY
WM_GETDLGCODE

思路源于Controls单元(Delphi 2007):
procedure TWinControl.CNKeyDown(var Message: TWMKeyDown);
var
Mask: Integer;
begin
with Message do
begin
Result := 1;
UpdateUIState(Message.CharCode);
if IsMenuKey(Message) then Exit;
if not (csDesigning in ComponentState) then
begin
if Perform(CM_CHILDKEY, CharCode, Integer(Self)) <> 0 then Exit;
Mask := 0;
case CharCode of
VK_TAB:
Mask := DLGC_WANTTAB;
VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN:
Mask := DLGC_WANTARROWS;
VK_RETURN, VK_EXECUTE, VK_ESCAPE, VK_CANCEL:
Mask := DLGC_WANTALLKEYS;
end;
if (Mask <> 0) and
(Perform(CM_WANTSPECIALKEY, CharCode, 0) = 0) and
(Perform(WM_GETDLGCODE, 0, 0) and Mask = 0) and
(GetParentForm(Self).Perform(CM_DIALOGKEY,
CharCode, KeyData) <> 0) then Exit;
end;
Result := 0;
end;
end;
s11ss 2012-08-03
  • 打赏
  • 举报
回复
还可以由窗体处理CM_DIALOGKEY消息。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
private
{ Private declarations }
procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.CMDialogKey(var Message: TCMDialogKey);
begin
if GetKeyState(VK_MENU) >= 0 then
with Message do
case CharCode of
VK_TAB:
if GetKeyState(VK_CONTROL) >= 0 then
begin
if ActiveControl is TEdit then
begin
(ActiveControl as TEdit).SelText := #9;
Result := 1;
Exit;
end;
end;
end;
inherited;
end;

end.
s11ss 2012-08-03
  • 打赏
  • 举报
回复
在窗体上拖一个TEdit控件,然后拷贝以下代码:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TEdit = class(StdCtrls.TEdit)
procedure CNKeyDown(var Message: TWMKeyDown); message CN_KEYDOWN;
end;

TForm1 = class(TForm)
Edit1: TEdit;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TEdit }

procedure TEdit.CNKeyDown(var Message: TWMKeyDown);
begin
if Message.CharCode = VK_TAB then
Self.SelText := #9
else
inherited;
end;

end.
内容概要:本文介绍了一个基于Python与数字孪生技术的工业旅游园区运行监测系统的设计与实现。系统通过整合生产设备、环境传感器、客流统计和能源消耗等多源数据,构建统一的数据体系,并利用数字孪生模型实现园区的虚拟映射。系统架构涵盖数据采集、治理、时序存储、对象建模、智能分析与可视化展示五个层次,集成了数据清洗、异常检测(如Isolation Forest)、客流预测(如随机森林回归)、环境质量评价和综合运行评分等功能。通过FastAPI提供服务接口,支持实时监测、预警响应与科学决策,推动园区管理从人工向数据驱动转型。文中还提供了完整的数据生成、特征工程、模型训练与接口开发的代码示例。; 适合人群:具备Python编程基础,熟悉数据分析、机器学习及Web开发的技术人员,适用于高校学生、软件工程师、智能制造与智慧城市领域研究人员;尤其适合从事工业互联网、数字孪生、智慧园区等相关项目的1-3年工作经验开发者。; 使用场景及目标:①实现工业旅游园区的实时运行状态监控与三维可视化展示;②对客流、设备健康、环境舒适度与安全风险进行预测与预警;③为园区调度、应急管理、能源优化和游客服务提供数据支持与决策依据;④作为数字孪生教学案例,用于学习数据处理、模型构建与系统集成全流程。; 阅读建议:此资源结合理论模型与代码实践,建议读者在学习过程中同步运行示例代码,深入理解数据清洗、特征构造、算法建模与接口开发的关键步骤,并可进一步扩展至真实硬件接入、三维引擎集成与大规模部署应用。
内容概要:本文介绍了如何利用Yocto项目的自动化构建系统(Autobuilder)进行嵌入式Linux系统的构建与发布管理。作者结合自身在PCB设计、U-Boot、Linux内核驱动等方面的经验,阐述了在复杂代码环境下使用Autobuilder实现持续集成的重要性。文章详细讲解了Autobuilder的架构原理,包括控制器与工作节点的协作机制、多层代码仓库的管理、构建步骤配置(如Checkout、Build、Publish等),以及如何通过自定义脚本和构建步骤(如ReleaseSyntech.py、PublishArtifactsSyntech.py)适配企业内部流程。此外,还分享了提升构建效率的方法,如预镜像(premirror)加速、构建历史追踪(buildhistory)、基于Git触发构建、运行时自动化测试等最佳实践,并提出了未来优化方向,如外部图层镜像、PR服务集成等。; 适合人群:从事嵌入式Linux开发、熟悉Yocto项目或OpenEmbedded框架,有一定构建系统经验的工程师和技术管理者;适用于希望实现自动化构建、版本管理和持续集成的研发团队。; 使用场景及目标:①搭建企业级Yocto自动化构建流水线;②解决多层依赖、构建不一致和发布不可控的问题;③实现可重复、可追溯的软件发布流程;④提升团队开发效率与系统稳定性。; 阅读建议:建议结合Yocto官方文档与实际项目实践同步阅读,重点关注构建配置、自定义扩展和运维技巧部分,并尝试在本地环境中复现相关功能。

5,944

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧