在資料輸入密集的表單中,使用者習慣按 Enter 鍵移動到下一個控件。Delphi 可透過表單的 OnKeyPress 或 OnKeyDown 事件攔截按鍵,並呼叫 Perform(WM_NEXTDLGCTL, 0, 0) 模擬 Tab 鍵行為。
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then // Enter 鍵
begin
// 可選:排除特定控件(如 StringGrid)
if not (ActiveControl is TStringGrid) then
begin
Key := #0; // 避免發出嗶聲
Perform(WM_NEXTDLGCTL, 0, 0); // 移動焦點
end;
end;
end;
務必將表單的 KeyPreview 屬性設為 True,否則表單不會接收到按鍵訊息。
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_RETURN then
begin
if not (ActiveControl is TStringGrid) then
begin
Key := 0;
Perform(WM_NEXTDLGCTL, 0, 0);
end;
end;
end;
TButton 且 Default 屬性為 True,按 Enter 會觸發按鈕而非換欄,需視需求調整。TMemo)通常需保留 Enter 換行功能,可在條件中排除。