1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

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

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

  1. Maniacosaur

    Maniacosaur Гость

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

    Barmutik Гость

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

    Код:
     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 Гость

    Репутация:
    0
    А вот еще способ:
    Код:
    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 Гость

    Репутация:
    0
    Извините, это неправильный код. Вот правильно:
    Код:
    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 Гость

    Репутация:
    0
    Извините это неправильный код, вот правильно:
    Код:
    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;
    Кнопки по вводу нажиматься будут!
     
Загрузка...

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