Переход по контролам

Тема в разделе "Delphi - Компоненты", создана пользователем Maniacosaur, 29 ноя 2004.

  1. Maniacosaur

    Maniacosaur Гость

    Как лучше сделать, чтобы при нажатии Enter фокус перемещался к следующему контролу (как при TaB).
    В настоящий момент я делаю так:
    Код (Text):
      if Key=#13 then
         FindNextControl(ActiveControl,true,true,true).SetFocus;
    Все бы в этом подходе хорошо, но только при каждом нажатии на Enter система издает звук, аналогичный "Стандартный звук".
     
  2. Barmutik

    Barmutik Гость

    Если без звука то могу посоветовать так:

    Код (Text):
     private
     procedure CMDialogKey(var Msg:TWMKey); message CM_DIALOGKEY;

    procedure TForm1.CMDialogKey(var Msg: TWMKey);
    begin
    if Msg.Charcode = 13 then
     Msg.Charcode := 9;
    inherited;
    end;
    Единственное что стоит заметить ... кнопки по вводу нажиматься не будут!!! Это следует учесть! Удачи!
     
  3. zubr

    zubr Гость

    А вот еще способ:
    Код (Text):
    protected
    procedure WndProc(var Message: TMessage);override;

    procedure TForm1.WndProc(var Message: TMessage);
    begin
    If Message.Msg=WM_KEYDOWN then
    begin
    If Message.WParam=VK_RETURN then
    begin
     FindNextControl(ActiveControl,true,true,true).SetFocus;
     //или любой другой код, который должен выполняться при нажатии enter
     exit;
    end;
    end;
    inherited;
    end;
     
  4. zubr

    zubr Гость

    Извините, это неправильный код. Вот правильно:
    Код (Text):

    protected
    procedure AppMessageHandler(var Msg:TMsg; var Handled:boolean);

    var
    b:boolean;

    procedure TForm1.AppMessageHandler(var Msg:TMsg; var Handled:boolean);
    begin
    If Msg.message=WM_KEYDOWN then
    begin
    If Msg.wParam=VK_RETURN then
    begin
    b:=True;
    FindNextControl(Form1.ActiveControl,true,true,true).SetFocus;
    //или любой другой код, который должен выполняться при нажатии enter
    exit;
    end;
    end;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    b:=False;
    KeyPreview:=True;
    Application.OnMessage:=AppMessageHandler;
    end;

    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
    If b then
    begin
    b:=False;
    Key:=Chr(0);
    end;
    end;

    Кнопки по вводу нажиматься будут!
     
  5. zubr

    zubr Гость

    Извините это неправильный код, вот правильно:
    Код (Text):
    protected
     procedure AppMessageHandler(var Msg:TMsg; var Handled:boolean);

    var
    b:boolean;

    procedure TForm1.AppMessageHandler(var Msg:TMsg; var Handled:boolean);
    begin
    If Msg.message=WM_KEYDOWN then
    begin
     If Msg.wParam=VK_RETURN then
     begin
      b:=True;
      FindNextControl(Form1.ActiveControl,true,true,true).SetFocus;
      //или любой другой код, который должен выполняться при нажатии enter
      exit;
     end;
    end;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    b:=False;
    KeyPreview:=True;
    Application.OnMessage:=AppMessageHandler;
    end;

    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
    If b then
    begin
    b:=False;
    Key:=Chr(0);
    end;
    end;
    Кнопки по вводу нажиматься будут!
     
Загрузка...

Поделиться этой страницей