Delphi 10.2中TDrawGrid编辑时插入预设文本且保持编辑状态的实现
Delphi 10.2 TDrawGrid 插入预设文本并保持编辑状态的实现方案
不需要子类化TDrawGrid,直接通过Windows API定位内置编辑控件即可实现需求,步骤如下:
- 捕获编辑状态下的快捷键(比如Ctrl+P)
- 找到DrawGrid内部的TEdit控件句柄
- 设置预设文本并将光标移至文本末尾,维持编辑状态
具体代码实现
在TDrawGrid的OnKeyDown事件中添加以下逻辑:
procedure TForm1.DrawGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var EditHandle: HWND; PresetText: string; begin // 仅在编辑模式下处理Ctrl+P if DrawGrid1.EditorMode and (Key = Ord('P')) and (ssCtrl in Shift) then begin // 查找DrawGrid内置的TEdit控件 EditHandle := FindWindowEx(DrawGrid1.Handle, 0, 'TEdit', nil); if EditHandle <> 0 then begin PresetText := 'Propagate '; // 设置预设文本 SetWindowText(EditHandle, PChar(PresetText)); // 将光标定位到文本末尾,保持编辑状态 SendMessage(EditHandle, EM_SETSEL, Length(PresetText), Length(PresetText)); // 拦截原按键,避免输入多余的P Key := 0; end; end; end;
说明
- 该方案依赖Delphi 10.2中TDrawGrid的内置编辑控件类名为
TEdit,这个版本下是稳定的 - 通过
EditorMode判断确保仅在单元格编辑状态下触发操作,避免无效执行
内容的提问来源于stack exchange,提问作者mait
相关产品推荐
相关产品推荐

