JustMe
JustMe

Reputation: 2383

Focus next control on enter - in overridden KeyUp

I have my custom class that extends TEdit:

  TMyTextEdit = class (TEdit)
   private
     fFocusNextOnEnter: Boolean;
   public
    procedure KeyUp(var Key: Word; Shift :TShiftState); override;
   published
     property FocusNextOnExnter: Boolean read fFocusNextOnEnter
                                 write fFocusNextOnEnter default false;
  end;

In The KeyUp procedure I do:

procedure TMyTextEdit.KeyUp(var Key: Word; Shift: TShiftState);
begin
  inherited;

  if FocusNextOnExnter then
    if Key = VK_RETURN then 
      SelectNext(Self as TWinControl, True, false);
end;

But it isn't moving focus to the next control. I tried to

if Key = VK_RETURN then
      Key := VK_TAB;

but it isn't working either. What am I missing?

Upvotes: 14

Views: 21376

Answers (4)

JustMe
JustMe

Reputation: 2383

Here's the PostMessage approach (uses Messages) for the record :)

procedure TMyEdit.KeyUp(var Key: Word; Shift: TShiftState);
begin
  inherited;
  if FocusNextOnEnter then
    if Key = VK_RETURN then begin
      PostMessage(GetParentForm(Self).Handle, wm_NextDlgCtl, Ord((ssShift in Shift)), 0);
      Key := 0;
    end;
end;

Upvotes: 6

k9dog
k9dog

Reputation: 31

The THackWinControl can be avoided, and to make it nice:

SelectNext(ActiveControl as TWinControl, True, ssShift in Shift);

Problem is it still pull down combobox choices.

I'm working on that.

Upvotes: 0

Tacu Aureliu
Tacu Aureliu

Reputation: 51

procedure TMyEdit.KeyUp(var Key: Word; Shift: TShiftState);
begin

  inherited;

  if FocusNextOnExnter and Focused and (Key = VK_RETURN) then 

  begin

    Perform(CM_DIALOGKEY, VK_TAB, 0);

    Key := 0;

  end;

end;

Upvotes: 5

Ondrej Kelle
Ondrej Kelle

Reputation: 37221

SelectNext selects next sibling child control, ie. you need to call it on your edit's parent:

type
  THackWinControl = class(TWinControl);

if Key = VK_RETURN then
  if Assigned(Parent) then
    THackWinControl(Parent).SelectNext(Self, True, False);

Upvotes: 15

Related Questions