DELPHI FAQ: Как заставить кнопку Enter работать наподобие Tab?


Как заставить кнопку Enter работать наподобие Tab?
Previous  Home  Next


Автор: Khaled Shagrouni

Как-то бухгалтер, который пользовался моей программой, заявил, что ему не удобно перескакивать пустые поля в форме кнопкой Tab, и что намного удобнее это делать обычным Enter-ом. Предлагаю посмотреть, как я решил эту проблемму.

Совместимость: Все версии Delphi

Пример обработчика события:

procedure
 Tform1.FormKeyDown(Sender: TObject; var Key: Word; 
  Shift: TShiftState); 
var
 
  ACtrl: TWinControl; 
begin
 
  if
 key = 13 then 
    begin
 
      ACtrl := ActiveControl; 
      if
 ACtrl is TCustomMemo then exit; 
      repeat
 
        ACtrl:= FindNextControl(ACtrl,true,true,false); 
      until
 (ACtrl is TCustomEdit) or 
      (ACtrl is
 TCustomComboBox) or 
      (ACtrl is
 TCustomListBox) or 
      (ACtrl is
 TCustomCheckBox) or 
      (ACtrl is
 TRadioButton); 
      ACtrl.SetFocus ; 
    end

end


Не забудьте установить свойство формы KeyPreview в true.

Как Вы можете видеть; этот код использует функцию FindNextControl, которая ищет следующий свободный контрол.

так как все формы в моём приложении наследуются от одной, то достаточно поместить этот код в главную форму и после этого все формы будут реагировать на нажатие Enter подобным образом.

Взято с Исходников.ru http://www.sources.ru



Существует множество методов решения этой проблемы, но самый быстрый способ, это перехват нажатия клавиш, перед тем как их получит форма:

В секции формы
PRIVATE добавьте:

Procedure CMDialogKey(Var Msg:TWMKey); message CM_DIALOGKEY; 

В секции
IMPLEMENTATION добавьте:

Procedure TForm1.CMDialogKey(Var Msg: TWMKey); 
Begin
 
If
 NOT (ActiveControl Is TButton) Then 
If
 Msg.Charcode = 13 Then 
Msg.Charcode := 9

inherited

End


Тем самым мы исключаем срабатывания нашей подмены, если фокус находится на кнопке.

Чтобы ускорить работу приложения, не надо активизировать свойство формы
KEYPREVIEW

Взято с Исходников.ruhttp://www.sources.ru




DELPHI FAQ




EOMY TOP 100      Рейтинг@Mail.ru      Rambler's Top100